看js看到
arguments.callee 这个属性指向了拥有arguments属性的函数
从而想到python是否也会有 函数名覆盖的问题.
def factorial(num):
if num <= 1:
return 1;
else:
return num* factorial(num-1)
hello = factorial
def hi(num):
return 0
factorial = hi
print hello(5)
猜猜结果是多少. 如果认为factorial定义中 进行递归命名是绑定的话那就错了.
通过在外部对factorial的重新复制就会覆盖掉.
要注意哦.
这里相当于函数在创建的时候就直接绑定给factorial. 但是由于函数在python中是一级对象,
实际上factorial只是持有一个引用罢了
def hello():
'''hello'''
pass
a = hello
hello.__doc__ = "hi"
print hello.__doc__ # hi
print a.__doc__ # hi
def hello():
print "hello"
hi = hello
hello = None
hi() # hello