Pythonは、関数内の関数に対してのみグローバル変数を共有します

Oles Savluk

内部で別の関数を再帰的に実行する関数があり、その関数のすべての実行で変数を共有したいと思います。

そんな感じ:

def testglobal():
  x = 0
  def incx():
    global x
    x += 2
  incx()
  return x
testglobal() # should return 2

ただし、エラーが発生します NameError: name 'x' is not defined

リストを作成し、そのリストの最初の値をとして使用するためのハッキーなソリューションがありxます。しかし、これはとても醜いです。

だから、どのように私は共有することができxincx機能?それとも、まったく異なるアプローチを使用する必要がありますか?

チェプナー

このnonlocalステートメントを使用して、にアクセスしますx。これは、グローバルではなく、ローカルtestglobalです。

def testglobal():
  x = 0
  def incx():
    nonlocal x
    x += 2
  incx()
  return x
assert 2 == testglobal() 

Python 2でこれを行うのに最も近いのxは、質問で述べた引数ハックと同様に、可変値に置き換えることです。

def testglobal():
  x = [0]
  def incx():
    x[0] += 2
  incx()
  return x[0]
assert 2 == testglobal()

これは、リストの代わりに関数属性を使用する例です。これは、より魅力的な代替手段です。

def testglobal():
  def incx():
    incx.x += 2
  incx.x = 0
  incx()
  return inc.x
assert 2 == testglobal() 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonは関数内のグローバル変数を改訂します

分類Dev

PHPは他の関数内の関数内のグローバル変数にアクセスします

分類Dev

Python関数内のすべてのグローバル変数を検出しますか?

分類Dev

関数の外部で使用される関数内の変数を宣言します(ただし、グローバルには宣言しません)

分類Dev

qkdbの関数内でグローバル変数を定義します

分類Dev

JavaScript:関数内のグローバル変数を初期化します

分類Dev

.change関数の変数からグローバル変数Jqueryに値を渡して更新します

分類Dev

非同期関数内またはpromise内でグローバル変数の値を設定しますか?

分類Dev

Pythonスレッドは関数内のグローバル変数を変更しません

分類Dev

関数を使用して別の関数内にグローバル変数を含めるにはどうすればよいですか?

分類Dev

グローバルを使用しない、またはCの関数入力を変更しない、関数内の配列への変数の割り当て

分類Dev

tmを使用してR関数にグローバル変数を割り当てます:Linuxのバグ?

分類Dev

tmを使用してR関数にグローバル変数を割り当てます:Linuxのバグ?

分類Dev

PHPは関数のグローバル変数を定義しますか?

分類Dev

関数の値をグローバル変数に渡します

分類Dev

非同期関数の結果をグローバル変数に保存します

分類Dev

グローバル変数に不要な変更を引き起こす関数内の変数割り当てを一覧表示します

分類Dev

複数の関数値を複数のグローバル変数にどのように返しますか?

分類Dev

複数の関数値を複数のグローバル変数にどのように返しますか?

分類Dev

Reactの関数でグローバル変数を渡して変更しないようにする方法は?

分類Dev

javascript関数内にグローバル変数を設定します

分類Dev

Ember.jsは、すべての単一ルートのルート変更時に関数を実行します。グローバル活性化関数?

分類Dev

関数内のグローバルディクショナリを読み取って再割り当てします

分類Dev

パラメータを使用して関数内のグローバル変数を変更する方法

分類Dev

javascript変数をグローバルにして関数ajaxに渡す方法は?

分類Dev

メソッド内の関数内のグローバル変数を更新します

分類Dev

関数内のifステートメントの条件でグローバル変数が使用されると、PythonはUnboundLocalErrorをスローします

分類Dev

グローバル変数+2つの関数で使用されている変数を削除しますか?

分類Dev

Javascriptの変数参照。によってグローバルを参照し、関数を介してグローバルに作用します

Related 関連記事

  1. 1

    Pythonは関数内のグローバル変数を改訂します

  2. 2

    PHPは他の関数内の関数内のグローバル変数にアクセスします

  3. 3

    Python関数内のすべてのグローバル変数を検出しますか?

  4. 4

    関数の外部で使用される関数内の変数を宣言します(ただし、グローバルには宣言しません)

  5. 5

    qkdbの関数内でグローバル変数を定義します

  6. 6

    JavaScript:関数内のグローバル変数を初期化します

  7. 7

    .change関数の変数からグローバル変数Jqueryに値を渡して更新します

  8. 8

    非同期関数内またはpromise内でグローバル変数の値を設定しますか?

  9. 9

    Pythonスレッドは関数内のグローバル変数を変更しません

  10. 10

    関数を使用して別の関数内にグローバル変数を含めるにはどうすればよいですか?

  11. 11

    グローバルを使用しない、またはCの関数入力を変更しない、関数内の配列への変数の割り当て

  12. 12

    tmを使用してR関数にグローバル変数を割り当てます:Linuxのバグ?

  13. 13

    tmを使用してR関数にグローバル変数を割り当てます:Linuxのバグ?

  14. 14

    PHPは関数のグローバル変数を定義しますか?

  15. 15

    関数の値をグローバル変数に渡します

  16. 16

    非同期関数の結果をグローバル変数に保存します

  17. 17

    グローバル変数に不要な変更を引き起こす関数内の変数割り当てを一覧表示します

  18. 18

    複数の関数値を複数のグローバル変数にどのように返しますか?

  19. 19

    複数の関数値を複数のグローバル変数にどのように返しますか?

  20. 20

    Reactの関数でグローバル変数を渡して変更しないようにする方法は?

  21. 21

    javascript関数内にグローバル変数を設定します

  22. 22

    Ember.jsは、すべての単一ルートのルート変更時に関数を実行します。グローバル活性化関数?

  23. 23

    関数内のグローバルディクショナリを読み取って再割り当てします

  24. 24

    パラメータを使用して関数内のグローバル変数を変更する方法

  25. 25

    javascript変数をグローバルにして関数ajaxに渡す方法は?

  26. 26

    メソッド内の関数内のグローバル変数を更新します

  27. 27

    関数内のifステートメントの条件でグローバル変数が使用されると、PythonはUnboundLocalErrorをスローします

  28. 28

    グローバル変数+2つの関数で使用されている変数を削除しますか?

  29. 29

    Javascriptの変数参照。によってグローバルを参照し、関数を介してグローバルに作用します

ホットタグ

アーカイブ