Python の関数スコープ

不言
リリース: 2018-05-07 13:56:36
オリジナル
1215 人が閲覧しました

この記事では主に Python の関数スコープを紹介します。これには特定の参照値があります。必要な友達はそれを参照してください。

Python では、関数はスコープです。この記事では、Python での関数スコープの紹介に焦点を当てています。興味のある方は、ぜひ一緒にご覧ください。

name = 'xiaoyafei'
def change_name():
  name = '肖亚飞'
  print('在change_name里的name:',name)
change_name() # 调用函数
print("在外面的name:",name)
ログイン後にコピー

上記の入れ子関数では、関数がスコープであることは十分に説明できます。 それでは、コードを少し変更して何が起こるか見てみましょう

age = 15
def func():
  print('第一层age:',age) # 第一层age: 15
  def func2():
    age = 73
    print("func2中的age:",age) # func2中的age: 73
    def func3():
      age = 84
      print("func3中的age:",age) # func3中的age: 84
    func3() # 调用func3函数
  func2() # 调用func2函数
func()
ログイン後にコピー

さて、この時点で誰かが、多くのナンセンスが変わったと言いました。ローカル変数とグローバル変数があるので、質問したいのですが: 上記の入れ子関数では、func2 に age 変数がありません。では、グローバル変数 age = 15 はどうやって見つけますか?

この時点で、次のことを確認する必要があります。スコープの検索順:



変数スコープ LEGB

L: ローカル ローカル変数と実パラメータを含む関数内の名前空間

E: 囲む外部の入れ子関数の名前空間例: func2 に age 変数がない場合、組み込みモジュールの funcG:globals グローバル変数

  • B:builtins 名前空間でこれを見つけます。

  • まず、名前空間とは何かを理解しましょう。

  • 名前空間とも呼ばれる、その名前が示すように、名前が保存される場所です。たとえば、x = 1、などです。 1 はメモリに格納されるので、変数名 x はどこに格納されるのでしょうか? 名前空間は、名前 x と 1 の結合関係が格納される場所です。 : ローカル変数と仮パラメータを含む、関数内の名前空間です
  • globals: グローバル変数、関数が定義されているモジュールの名前空間
  • builtins: 組み込みモジュールの名前空間

さまざまな変数のスコープは、変数が配置されている名前空間によって決まります

スコープはスコープです

  • グローバルスコープ:グローバルに有効、グローバルに有効

  • ローカルスコープ:一時的なインベントリ、ローカルに有効

  • 例を見てみましょう

    age = 15
    def func():
      print('第一层age:',age) # 第一层age: 15
      def func2():
        print("func2中的age:",age) # func2中的age: 15 # 看到没有,如果当前作用域里没有age变量,那么它就会往上找
        def func3():
          age = 84
          print("func3中的age:",age) # func3中的age: 84
        func3() # 调用func3函数
      func2() # 调用func2函数
    func()
    ログイン後にコピー
    L --> E --> G --> B のルールを使用して検索します。つまり、ローカルに見つからない場合は、ローカル エリアの外でローカルに検索されます。 (クロージャなど) 再度見つからない場合は、グローバルに検索してから、組み込み関数内で検索します。

    関連する推奨事項:

      Python の関数の紹介

    以上がPython の関数スコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート