我正在学习python名称空间和范围,为此,我正在遵循This教程。最终要预测下面的代码将输出什么。
a = 'global'
def outer():
def len(in_var):
print('called my len() function: ', end="")
l = 0
for i in in_var:
l += 1
return l
a = 'local'
def inner():
global len
nonlocal a
a += ' variable'
inner()
print('a is', a)
print(len(a))
outer()
print(len(a))
print('a is', a)
我对以上代码块的问题是:我们怎么可能在external()内部调用len()函数?那么,为什么print(len(a))调用external()内部的len()函数?
当我尝试像下面所做的那样调用嵌套函数时,它将无法工作。有人可以启发我吗?:
print("Does my Inner get called automatically if I call my outer?")
def outer():
def inner():
print("Yes")
outer() #A call to outer does not call inner() automatically
print(inner()) #Gives a NameError
答案 0 :(得分:1)
b()函数的范围在a()函数内部定义。这意味着它位于a()内部。每当我们走到a()之外时,b()就会被破坏。因此,仅在该范围内可用。除此之外,它不可用。
def a():
def b():
print("inside b")
b() // no error
a()
b() // error. As you are trying to access something which is not available there.
答案 1 :(得分:0)
我认为print(len(a))
正在len(in_var)
内调用函数outer()
。因此,我感到困惑,因为我自己无法调用嵌套函数。然而,事实证明,print(len(a))
正在调用len()
的内置版本,而不是outer()
内部的版本。而且,不可能从嵌套函数的函数“外部”直接调用嵌套函数。案件结案。