Python常见陷阱

# -*- 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
posted @ 2015-03-25 14:29  action爱生活  阅读(145)  评论(0编辑  收藏