函数中的全局对象在 globals() 中不存在
A global object in a function doesn't exist in globals()
为什么 "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
对象 'k' 被定义为全局对象,为什么我不能在函数之外使用它?
我看到了以下主题,它应该有效:
Use of "global" keyword in Python
k
直到函数被调用才被定义。在调用 func1
之前,k
的值是多少?
将对 func1
的调用移至您尝试使用 k
的上方,以便在您尝试使用它之前对其进行定义。
这是一个很好的例子,说明了为什么(滥用)使用全局变量不是一个好主意。直接 return 来自 func1
的值,然后在调用站点使用它会好得多。这样一来,数据的来源就一目了然,并且您不会在数据定义之前不小心使用数据。
为什么 "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
对象 'k' 被定义为全局对象,为什么我不能在函数之外使用它? 我看到了以下主题,它应该有效: Use of "global" keyword in Python
k
直到函数被调用才被定义。在调用 func1
之前,k
的值是多少?
将对 func1
的调用移至您尝试使用 k
的上方,以便在您尝试使用它之前对其进行定义。
这是一个很好的例子,说明了为什么(滥用)使用全局变量不是一个好主意。直接 return 来自 func1
的值,然后在调用站点使用它会好得多。这样一来,数据的来源就一目了然,并且您不会在数据定义之前不小心使用数据。