最初のプログラムは段階的に書かれ、期待通りに機能しました。これは一度に完全に定義した後で、タイトルで説明したエラーを投げた。 2番目のものを実行した後、私は最初のエラーを実行しました。私は最初のものが最初に働いた後、特に私が正しい骨を強く感じます。ここに最初ですPython 3.6.1は明確に定義した後、未定義の値/変数を述べています
a = {"piz":12, "san":23, "dg":45}
def see(a):
if "dg" in a:
r = a["dg"]
return r
print (r)
def see(r):
return r + 1
print (see(r))
ここにエラーがあります。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/spyder/util/site/sitecustomize.py", line 880, in runfileexecfile(filename, namespace)
File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/home/josh/python/viper.py", line 7, in <module>
print (r)
NameError: name 'r' is not defined
第2の関数はさらに「クレイジー」であり、変数「e」を作成し、別の「f」を作成しません。
d = 3
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
#The function just checks if "d" is in "a", then creates variables "e" and "f"
def enclosing():
def abc(a, d):
if d in a:
print ("yes")
print (a[0])
e = a[0]
f = a[1]
return
print (e)
print (f)
そして、そのエラーです。
File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File "/usr/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/home/josh/python/d.py", line 25, in <module>
print (e)
NameError: name 'e' is not defined
'print(r)'を呼び出すときに 'r'を_clearly_定義しましたか?その時点であなたの 'r'は関数の中にあり(' see() '、それはグローバルとして宣言されていないのでそのまま残されます)、もちろん、Pythonはあなたが何を印刷したいのか分からないとき。 – zwer
_variableスコープについては、それらが存在する場所と存在しない場所について少し学んでください。また、関数を定義すると、関数を実際に呼び出すまで実行されません。インターネットからのランダムなヒット:https://www.smallsurething.com/how-variable-scope-works-in-python/(私は詳細を読んでいないが、役に立つと思われる)。 – tevemadar
ありがとう、今私はそれがスコープについてすべてであることを見る。私はそれを調べます。 – Minyae