# -*- coding: utf-8 -*-
#python需要常见陷阱
print u'---------------#1. 默认值参数 Default Parameter Values---------------'
#1. 默认值参数 Default Parameter Values
#1.1 默认值参数的引入
#默认值参数的作用:还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
#计算x的平方
def power(x):
return x * x
#再定义一个计算n次方的函数时,上面的函数就失效了
def power(x, n):
s = 1
while n > 0:
n -= 1
s *= x
return s
#print power(2) 报错,因为后面又定义了power(x, n)
print power(2, 10)
#使用默认函数可以解决这个问题
def power(x, n=2):
s = 1
while n > 0:
n -= 1
s *= x
return s
print power(2)
print power(2, 10)
print u'-----------1.2 默认参数值陷阱————默认值参数必须指向不变对象------------'
#1.2 默认参数值陷阱————默认值参数必须指向不变对象
#定义一个函数,传入一个list,添加一个end后再返回
def addEnd(list=[]):
list.append('END')
return list
print addEnd([1, 2, 3])
#但是参数使用默认值时就会出问题,函数每次都“记住了”上次添加了'END'后的list。
print addEnd(), addEnd()
#解决办法:使用不变对象None
def add_END(list=None):
if list is None:
list = []
list.append('END')
return list
#现在,无论调用多少次,都不会有问题:
print add_END(), add_END()
代码参见:github