我相信Python使用函数作用域作为局部变量。也就是说,在任何给定的函数中,如果您为某个局部变量赋值,则该函数将从该函数内的那一刻起可用,直到它返回。因此,由于您的代码的两个分支都保证分配给a
,所以最初不需要将None
分配给a
。
请注意,如果您还可以访问在外部函数中声明的变量 - 换句话说,Python有闭包。
def adder(first):
def add(second):
return first + second
return add
这定义了一个称为加法器的函数。当用参数first
调用时,它将返回一个函数,它将接收的任何参数添加到first
并返回该值。例如:
add_two = adder(2)
add_three = adder(3)
add_two(4) # = 6
add_three(4) # = 7
不过,虽然你可以阅读从外部函数的值,你不能改变它(不像许多其他语言)。例如,设想尝试实施累加器。你可能会写代码,像这样:
def accumulator():
total = 0
def add(number):
total += number
return total
return add
不幸的是,试图在一个错误信息使用此代码的结果:
UnboundLocalError: local variable 'total' referenced before assignment
这是因为total += number
试图线路改变total
的价值,不能用在Python中以这种方式完成。
在python中没有“声明”一个变量的东西! – 2010-03-01 23:06:28