## 函数
[TOC]
>[info] #### 基础系统函数
~~~
>>>abs(-10) # 10 取绝对值
>>>cmp(x,y) #就需要两个参数,如果x<y,返回-1,如果x==y,返回0,如果x>y,返回1
>>>int("10"), float("1.25"),str(123), unicode(100),bool(1),
>>>int(float("12.2")) #浮点型转整型
~~~
* 函数相当于一个别名,可以赋值给某变量
~~~
>>>a = abs
>>>a(-99)
99
~~~
>[info] #### 定义函数
* 标准定义函数,以冒号:开始
~~~
def calc(x):
return x
~~~
>[info] #### 使用函数默认值
~~~
def add(a, b=10) :
return a + b
print add(10) #相当于10+10
def dec(a, b = 1, c = 2):
return a - b - c
print dec(10, c=3) #使用默认值可以不按顺序来,相当于10-1-3 = 7
~~~
* 常见问题
~~~
def add_end(L = []):
L.append("A")
return L
print add_end()
print add_end()
print add_end()
['A']
['A', 'A']
['A', 'A', 'A']
~~~
* 如何解决呢?
~~~
def add_end(L = None):
if L is None:
L = []
L.append("A")
return L
print add_end()
print add_end()
print add_end()
['A']
['A']
['A']
~~~
>[info] #### 可变参数
* 加*变成可变参数
* 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
~~~
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 3, 5, 7)
84
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
~~~
>[info] #### 关键字参数
* 用两个**表示
* 关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
~~~
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
~~~
~~~
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
~~~
>[info] #### 参数组合
* 参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
~~~
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
~~~
~~~
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
~~~
>[info] 小结
* 默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
* *args是可变参数,args接收的是一个tuple;
* **kw是关键字参数,kw接收的是一个dict。