1. ホーム
  2. スクリプト・コラム
  3. ゴラン

囲碁言語基本閉鎖原理分析例詳細

2022-01-06 14:28:25

I. クロージャの概要

  • クロージャは、ローカル変数が外部からアクセスできない問題の解決策である
  • クロージャは、関数を戻り値として扱うことの応用である

II. コードデモ

一般的なアイデアは、関数内部でローカル変数を定義し、別の関数を戻り値として扱うことです。ローカル変数は、戻り値関数のすべての変数と等価なので、戻り値関数を複数回呼び出すと、ローカル変数の値は変化に追従する。

  File "object_detection/builders/model_builder_test.py", line 24, in <module>
    from object_detection.builders import model_builder
  Datei "F:\File_Python\Python_example\models-master\research\object_detection\builders\model_builder.py", Zeile 20, in <module>
    from object_detection.builders import anchor_generator_builder
  Datei "F:\File_Python\Python_example\models-master\research\object_detection\builders\anchor_generator_builder.py", Zeile 21, in <module>
    from Objekterkennung.protos importieren anker_generator_pb2
  Datei "F:\File_Python\Python_example\models-master\research\object_detection\protos\anchor_generator_pb2.py", Zeile 15, in <module>
    from object_detection.protos import grid_anchor_generator_pb2 as object__detection_dot_protos_dot_grid__anchor__generator__pb2
  Datei "F:\File_Python\Python_example\models-master\research\object_detection\protos\grid_anchor_generator_pb2.py", Zeile 22, in <module>
    serialized_pb=_b('\n3object_detection/protos/grid_anchor_generator.proto\x12\x17object_detection. protos\"\xcd\x01\n\x13GridAnchorGenerator\x12\x13\n\x06height\x18\x01 \x01(\x05:\x03\x32\x35\x36\x12\x12\n\x05width\x18\x02 \x01(\x05: \x03\x32\x35\x36\x12\x19\n\rheight_stride\x18\x03 \x01(\x05:\x02\x31\x36\x12\x18\n\x0cwidth_stride\x18\x04 \x01(\x05: \x02\x31\x36\x12\x18\n\rheight_offset\x18\x05 \x01(\x05:\x01\x30\x12\x17\n\x0cwidth_offset\x18\x06 \x01(\x05: \x01\x30\x12\x0e\n\x06scales\x18\x07 \x03(\x02\x12\x15\n\raspect_ratios\x18\x08 \x03(\x02')
TypeError: __init__() erhielt ein unerwartetes Schlüsselwortargument 'serialized_options'

結果を実行する

pip install -U protobuf

コードの説明

2行目では、変数 f の関数です。 type address は、Go言語では関数が参照型となります。Java言語を勉強した人なら、Javaオブジェクトのメモリ空間がスタック、ヒープ、メソッドエリア、スタティックエリアであることを知っているはずです。

3行目~5行目では

pre

suf
2つの変数のアドレスは、それぞれの呼び出しが
pre

suf
アドレスは変更されません。

6行目~9行目 これは、新しく宣言された f1 という変数があり、その時点で

pre

suf
のアドレスと、直前の f の中にある
pre

suf
アドレスは同じではありません。

参照型の変数を作成する場合、それは実際には単なるヘッダー値であり、ヘッダー値には基礎となるデータへのポインタが含まれているため、それが指す基礎構造はコピーされずに渡されるため、参照型は値型よりも効率的に渡されることになるのです。 <リンク

以上、Go言語の基本的なクロージャの基本原理と例について詳しく説明しましたが、Go言語のクロージャについての詳細は、Script Houseの他の関連記事にもご注目ください