【发布时间】:2021-02-04 15:17:09
【问题描述】:
鉴于其中之一:
def operations(x, y, z):
def add(x,y):
return x+y
def sub(x,y):
return x-y
return z(x,y)
--------------------------------------------------
def operations(x, y, z):
if z == add:
def add(x,y):
return x+y
if z == sub:
def sub(x,y):
return x-y
res = z(x,y)
return res
我正在尝试从 python 中的外部变量函数之一调用多个内部函数之一,但出现以下错误:
result = operations(10,5,add)
=>
NameError: name 'add' is not defined
--------------------------------------------------
result = operations(10,5,"add")
=>
TypeError: 'str' object is not callable
我知道我可以使用这个解决方案:
def add(x,y):
return x+y
def sub(x,y):
return x-y
def operations(x, y, z):
return z(x,y)
但对我来说,使用 嵌套 函数似乎更清晰。
我也读过这个: Short description of the scoping rules? 但这并没有真正帮助我。
【问题讨论】:
-
为什么你认为嵌套函数更清晰?每次调用
operations时,您都在重新定义这些函数。当operations本身被定义时,它们不会被定义一次。 -
如果要将它们隔离到自己的命名空间中,请使用类。
标签: python python-3.x function scope