Python:函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

定义和调用

>>> def add(x,y):
...     print('x=',x)  #Python3必须加"()"
...     print('y=',y)
...     return x+y
...
>>> add(1,2)
x= 1
y= 2
3

参数收集

#当参数不确定时,使用*定义函数,并返回一个元组

def func(x,*arg):
    print (x)        
    result=x
    print (arg)
    for i in arg:
        result +=i
    return result
print (func(1,2,3,4,5,6,7,8,9))    
#返回结果
1                    #对应print (x)
(2, 3, 4, 5, 6, 7, 8, 9)        #对应print (arg)
45                   #最后print (func(1,2,3,4,5,6,7,8,9))结果    

#当参数为赋值语句时,使用**定义函数,并返回一个字典

>>> def f(**karg):
...     print (karg)
...
>>> f(a=1,b=2,c=3)        #当参数为非赋值语句时,报错
{'c': 3, 'a': 1, 'b': 2}

*和**定义函数综合举例

>>> def foo(x,y,z,*arg,**karg):
...     print (x)
...     print (y)
...     print (z)
...     print (arg)
...     print (karg)
...
>>> foo('taylor',1989,'adele')
taylor
1989
adele
()
{}
>>> foo(1,2,3,4,5)
1
2
3
(4, 5)
{}
>>> foo(1,2,3,4,5,name="taylor")
1
2
3
(4, 5)
{'name': 'taylor'}

几种定义方式汇总

1. def a(p1,p2,p3) #参数的位置很重要
2. def a(p1=v1,p2=v2) #定义的时候直接赋值
3. def a(*arg) #适用不确定个数
4. def a(**arg) #必须接收arg=val的形式

几个函数

lambda

>>> num=[1,2,3,4,5]
>>> lam=lambda x:x+1    #函数后直接使用变量,变量后为冒号隔离表达式,表达式的结果为函数的返回值
>>> n=[]
>>> for i in num:
...     n.append(lam(i))
...
>>> n
[2, 3, 4, 5, 6]

map

map(func,seq),对可迭代对象的每个元素执行func函数

>>> num=[1,2,3,4,5]
>>> list(map(lambda x:x+1,num))    #python3需要将map转换成list格式,否则报错,因为直接使用map返回的是iterators
[2, 3, 4, 5, 6]
>>> l1=[1,2,3,4,5]
>>> l2=[9,8,7,6,5]
>>> list(map(lambda x,y:x+y,l1,l2))
[10, 10, 10, 10, 10]

reduce

reduce(func,seq),func必须为二元操作函数,先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。横向运算。

>>> from functools import reduce        #python3无法直接使用reduce函数,需先引用
>>> reduce(lambda x,y:x+y,[1,2,3,4,5])     #“横着”依次计算
15

filter

filter(func, iterable),对iterable中的元素执行func,并将满足func的元素返回新list中

>>> l=[1,2,3,4,5]
>>> list(filter(lambda x:x>3,l))        #同reduce函数
[4, 5]

  等价语句

>>> [x for x in l if x>3]        #三元操作符    
[4, 5]

#三元操作符 
A=Y if x else Z
如果x为真,执行A=Y
如果x为假,执行A=Z

 

posted @ 2016-06-05 11:46  LiliP  阅读(242)  评论(0编辑  收藏  举报