修改函数默认参数
def fun(x=[],y=False):
y=True
x.append('hello')
return x,y
if __name__ == '__main__':
# (['hello'], True)
print fun()
# (['hello', 'hello'], True)
print fun()
错误使用类变量
一开始a.x,b.x和c.x引用的都是a.x的变量
修改a.x则全部修改
修改b.x则相当于往类b加入属性x
class A(object):
x=1
class B(A):
pass
class C(A):
pass
if __name__ == '__main__':
# 1 1 1
print A.x,B.x,C.x
# 2 2 2
# A.x=2
# print A.x,B.x,C.x
# 1 2 1
# B.x=2
# print A.x,B.x,C.x
变量名解析
在函数内部进行赋值操作,解释器自动该作用域为局部变量
x=1
def fun():
x+=1
print x
# Traceback (most recent call last):
# File "F:\Project\python1\demo\demo1.py", line 12, in <module>
# fun()
# File "F:\Project\python1\demo\demo1.py", line 8, in fun
# x+=1
# UnboundLocalError: local variable 'x' referenced before assignment
if __name__ == '__main__':
fun()
正确:
list=[]
def fun():
list.append('x')
print list
if __name__ == '__main__':
fun()
遍历列表时更改列表
odd=lambda x:bool(x%2)
numbers=[n for n in range(10)]
# Traceback (most recent call last):
# File "F:\Project\python1\demo\demo1.py", line 12, in <module>
# if odd(numbers[i]):
# IndexError: list index out of range
if __name__ == '__main__':
for i in range(len(numbers)):
if odd(numbers[i]):
del numbers[i]
正确:
odd=lambda x:bool(x%2)
numbers=[n for n in range(10)]
if __name__ == '__main__':
numbers=[n for n in numbers if not odd(n)]
print numbers