为什么可以';Python是否从外部访问子函数?
为什么上述(如此简单的代码)在Python中不可能实现?是否有一种“pythonic”(易读、不令人惊讶、不黑客)的解决方法,它不会将()转换为类 编辑1:上面向我解释了B是A的局部,因此它只在A被评估时存在。因此,如果我们将其设置为全局(并且确保不将其覆盖),那么为什么这不起作用呢为什么可以';Python是否从外部访问子函数?,python,Python,为什么上述(如此简单的代码)在Python中不可能实现?是否有一种“pythonic”(易读、不令人惊讶、不黑客)的解决方法,它不会将()转换为类 编辑1:上面向我解释了B是A的局部,因此它只在A被评估时存在。因此,如果我们将其设置为全局(并且确保不将其覆盖),那么为什么这不起作用呢 def A(): def B(): #do something a = A() a.B() 它说它正在返回一个“非类型”对象。因为函数定义只是在本地名称空间中创建一个名称。你所做的与以下
def A():
def B():
#do something
a = A()
a.B()
它说它正在返回一个“非类型”对象。因为函数定义只是在本地名称空间中创建一个名称。你所做的与以下没有什么不同:
def A():
def B():
#do something
return A()
a = A()
a.B()
然后询问为什么不能从函数外部访问a
。绑定在函数中的名称是函数的本地名称
此外,您提出的代码很奇怪。如果执行a=f()
,则将a设置为函数的返回值。函数不返回任何内容,因此不能希望通过返回值访问任何内容。可以直接返回内部函数:
def f():
a = 2
这确实是有用的。但是除了修改全局变量(这通常是个坏主意)或返回值之外,没有一种从外部访问函数内部内容的通用方法。函数就是这样工作的:它们接受输入并返回输出;它们不能让外部单词使用它们的内部信息。要使用所需语法调用B,请使用:
def f():
def g():
return "blah"
return g
>>> func = f()
>>> func()
'blah'
不幸的是,它是无用的,因为要初始化
A.B
必须调用A()
至少一次:(@prokher调用A甚至创建一个嵌套函数都是必要的。每次调用A时,它都是一个不同的函数。这是拥有嵌套函数的唯一原因。这不是无用的。你必须知道在哪里使用它!谢谢@panda-34。
def A():
def B():
print("I'm B")
A.B = B
return A
a = A()
a.B()
A.B()