【发布时间】:2013-04-14 23:50:36
【问题描述】:
假设我有以下功能:
def xplusy(x, y):
return x+y
def xplus1(x):
xplusy = xplusy(x, 1)
return xplusy
现在如果我调用a = xplus1(4),它会抛出以下错误:
UnboundLocalError: local variable 'xplusy' referenced before assignment
报错是因为命名冲突,如果我重新定义xplus1如下:
def xplus1(x):
s = xplusy(x, 1)
return s
效果很好。
为什么会这样:编译器不能正确区分变量和函数调用?
有什么办法吗?
【问题讨论】:
-
为什么要让你的生活复杂化?换个名字就行了。
-
你可以这样做
return xplusy(x,1),像这样:def xplus1(x): return xplusy(x,1) -
这通常是一件很自然的事情,并且在其他语言中广泛使用。更改它不是问题,但如果是在代码中添加几个字符的问题,我可以接受。为什么理论上会发生这种情况我也不清楚......
-
Python 中的“变量”和函数没有区别。函数和其他对象一样是对象。
-
@sashkello 您还应该阅读 python namespaces。命名空间本质上是从名称到对象的映射,因此可以覆盖任何名称,包括所有内置函数、您导入到本地命名空间的任何内容以及您自己定义的所有内容。
标签: python