python函数递归小坑

看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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值