第一个程序是逐步编写的,按照我的预期工作。这是在完全定义它之后,它抛出了我在标题中描述的错误。运行第二个后,我确实运行了第一个,错误就像我描述的那样。特别是在第一次第一次工作之后,我非常感觉到我的骨头。这是第一个
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
第二个功能是&#34;疯狂&#34;,它创建了一个变量&#34; e&#34;并且不会创造另一个,&#34; f&#34;。
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
答案 0 :(得分:0)
您没有定义您想要的变量,或者您在该范围内未定义这些变量。首先,在第一个片段中,您已经两次定义了相同的函数,这绝不是一个好主意。在第一个定义中,仅在语句if "dg" in a:
求值为True时定义r。因此,如果这是假的,则会出现错误(我建议在if语句之前为r设置占位符值)。
在第二个代码片段中,您在函数中定义了两个变量,然后尝试在函数外部访问它们。这些变量仅在函数范围内定义(在大多数语言中,包括python,函数中定义的变量是该函数的本地变量,并且不能在其外部访问),因此您必须将它们设置为返回函数的值或使它们成为全局变量。