函数中的全局对象在 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 的值,然后在调用站点使用它会好得多。这样一来,数据的来源就一目了然,并且您不会在数据定义之前不小心使用数据。