每日 4
Python 知识点:
- 
可变默认参数的陷阱 
 def append_to(element, target=[]):
 target.append(element)
 return target
 print(append_to(1)) # [1]
 print(append_to(2)) # [1, 2] → 惊不惊喜?
 解释:默认参数在函数定义时初始化一次,后续调用会共享同一个列表。应改为 target=None 并在函数内初始化。
- 
列表推导式的变量泄漏 
 x = 10
 squares = [x**2 for x in range(5)]
 print(x) # Python 2 → 4;Python 3 → 10(Python 3修复了泄漏)
 解释:Python 2中列表推导式会覆盖外部作用域的变量,Python 3中则不会。
- 
闭包与延迟绑定 
 functions = []
 for i in range(3):
 functions.append(lambda: i)
print([f() for f in functions])  # [2, 2, 2] → 所有lambda共享最终的i值
解决:通过默认参数立即绑定变量:
functions = [lambda i=i: i for i in range(3)]
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号