为什么用" k"表示的对象和" p"不是全局的吗?
my_global = 5
def func1(n=5):
global my_global, k, p
k = 10
p = 15
return my_global + n + k + p
all_gobals = globals()
print(k in all_gobals)
print(func1())
输出:
print(k in all_gobals )
NameError: name 'k' is not defined
globals()给了我:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f1649b48c88>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/home/pawel/PycharmProjects/test/exerc.py', '__cached__': None, 'random': <module 'random' from '/usr/lib/python3.6/random.py'>, 'itertools': <module 'itertools' (built-in)>, 'string': <module 'string' from '/usr/lib/python3.6/string.py'>, 'a': 20, 'is_perfect_number': <function is_perfect_number at 0x7f1649b7ae18>, 'is_palindrome': <function is_palindrome at 0x7f16497e31e0>, 'ask_for_help': <function ask_for_help at 0x7f16486a5bf8>, 'method': <function method at 0x7f16486a5c80>, 'my_global': 5, 'func1': <function func1 at 0x7f16486a5d08>, 'all_gobals': {...}}
为什么执行print(k)会给出?:
NameError: name 'k' is not defined
对象&#39; k&#39;被定义为全局,为什么我不能使用它的功能? 我看到了以下主题,它应该是wokrs: Use of "global" keyword in Python
答案 0 :(得分:1)
k
尚未定义。在调用k
之前,func1
的价值是多少?
将呼叫转移到func1
以上,以便您尝试使用k
,以便在尝试使用之前定义它。
这是一个很好的例子,说明为什么(ab)使用全局变量并不是一个好主意。最好直接从func1
返回值,然后在调用站点使用它。这样就清楚了数据的来源,并且在定义数据之前不会意外地使用数据。