【问题标题】:How a function in python can access the values which are declared outside its block and never passed as arguments during its call?python 中的函数如何访问在其块之外声明并且在其调用期间从未作为参数传递的值?
【发布时间】:2020-08-07 13:38:14
【问题描述】:

我编写了一个 Python 代码,其中没有参数的函数可以访问在其范围之外声明的变量。我想知道 Python 解释器如何访问这个变量而不会像其他编程语言(例如 JAVA)一样给出任何错误。

# Code 1:
def A():
    # count accessed inside function 
    print(count)
    
# count declared outside function A
count = 23
A()

代码 1 的输出: 23

还有一个额外的问题。在 Python 中,如果我们在循环内声明任何变量,那么它如何在循环外使用。因为,正如我们所知,任何变量的范围都将保留在定义它的块之下。

# Code 2:
for i in range(1):
    # num declared inside for loop block
    num = 23
# num can be accessed outside for loop block.
print(num)

代码 2 的输出: 23

【问题讨论】:

    标签: python-3.x function loops


    【解决方案1】:

    变量范围是由内向外的。当你像函数一样从局部范围内调用变量时,Python 首先会检查局部范围内是否存在具有该名称的变量。如果没有找到,它将检查的范围扩展到下一个外部范围。在您的情况下,这是全局范围,最高级别的范围。声明缺少任何上下文(例如函数或方法)的内容默认为全局范围,这就是 count 所在的位置。

    如果您想清楚自己引用的是哪个count,可以在函数定义中添加nonlocal countglobal count,明确表示您引用的是不同的范围。

    额外问题 - 您不能在其范围之外引用局部范围的变量,因此它不能反向工作,抱歉。但是,在您的示例中,您使用的是一个循环,它在 Python 中没有自己的范围(但 Julia 有,所以如果您曾经进行过该切换)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2020-12-15
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多