基础知识回顾——函数
函数是一个可重用的代码块,用来实现特定的功能。
认识函数
1.定义函数
函数代码块以 def 关键词开头,后接函数名,函数名不能以数字开头;
函数的参数是对函数的输入,参数可以有多个,也可以完全没有(但括号要保留);
函数体内容以冒号开始,并且缩进;
return [表达式]返回函数结果,可以没有返回结果即None,也可以返回多个函数结果;
1 def rectangle(a,b): 2 c = (a + b)*2 3 return c
当程序执行到return的时候,程序将停止执行函数内余下的语句。return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。
2.调用函数通过函数名和传入参数,实现函数的调用。
1 print retangle(3,4) #(3,4)即对应位置参数(a,b)
3.函数传参
1)位置传参 def add(a,b): return a + b print add(3,4)
2)引用传参 def add(a,b): return a + b x,y = 3,4 print add(x,y)
3)关键字传参 def add(a,b): return a + b print add(a = 3,b = 4)
4)默认传参 def f(a,b=10): return a+b print add(a = 3,b)
5)包裹传参(包裹传递定义函数时,在相应元组或字典前加*或**) >>> def func(*name): print type(name) print name
>>> func(1,4,6)
<type 'tuple'>
(1, 4, 6)
>>> def func(**name):
print type(name)
print name
>>> func(a=1,b=9)
<type 'dict'>
{'a': 1, 'b': 9}
在包裹传参中,定义func函数的参数表分别用元组name和字典name收集;相应的如果在函数调用是用*name或者**name传参,则被称为“解包裹”的过程。
位置参数解包 >>> def func(a,b,c): print a,b,c
>>> name = (1,3,4) >>> s = func(*name) 1 3 4 关键字参数解包 >>> def func(a,b,c): print a,b,c >>> name = {'a':1,'b':2,'c':3} >>> s2 = func(**name) 1 2 3
函数式编程
python在应对函数式编程有一些比较有用的函数:map、filter、reduce和lambda函数,其中map函数和filter函数可以被列表推导式代替。
1.map(function,iterable,....)函数的第一个参数是函数对象,第二个参数是列表(或元组字典等),map的作用就是将函数对象依次作用于表的每一个元素,然后返回列表。
1 >>> def double(x):
2 return x*2
3
4 >>> list1 = [11,22,33]
5 >>> map(double,list1) #函数可以分配给变量,作为参数传递以及从其他函数返回
6 [22, 44, 66]
7
8 >>> tuple1 = (11,22,33)
9 >>> map(double,tuple1)
10 [22, 44, 66]
11
12 >>> dic1 = {'s':'shenzhen','w':'wuhan'}
13 >>> map(double,dic1)
14 ['ss', 'ww']
15
16 #多个可迭代参数,则每次从多个表中取出一个元素应用函数对象
17 >>> def abc(a,b,c):
18 return a*100+b*10+c
19
20 >>> list1 = [1,2,3]
21 >>> list2 = [4,5,6]
22 >>> list3 = [7,8,9]
23 >>> map(abc,list1,list2,list3)
24 [147, 258, 369]
25
26 #若函数给出的是'None',则默认'identity'函数
27 >>> list1 = [11,22,33]
28 >>> list2 = [44,55,66]
29 >>> map(None,list1,list2)
30 [(11, 44), (22, 55), (33, 66)]
2.filter(function or None,seq)函数可以基于一个返回布尔值的函数对元素进行过滤,对序列参数seq(列表、元组或是字符串)中的每个元素调用function函数,最后返回调用结果为True的元素
1 >>> def func(x):
2 return x.isalnum() #返回含字母或数字的元素
3
4 >>> seq = ["apple","nana1","?!","&c"]
5 >>> filter(func,seq)
6 ['apple', 'nana1']
7
8 >>> seq2 = ['sf','se3','4h']
9 >>> filter(None,seq2)
10 ['sf', 'se3', '4h']
3.reduce(function,seq)函数只能接收两个参数,先将序列的前两个元素与function联合使用,然后将返回值与序列的第三个元素继续联合使用,直到整个序列处理完
1 >>> def add(x,y):
2 return x+y
3
4 >>> num = [12,432,79,20]
5 >>> reduce(add,num)
6 543
4.lambda[arg1[arg2,arg3...]:expression,lambda匿名函数中,冒号前是参数,冒号后是表达式
1 #无参数
2 >>> bar = lambda:'echo'
3 >>> print bar()
4 echo
5
6 #有参数
7 >>> def double(x):
8 return x*2
9 等价于 double = lambda x:x*2
10
11 >>> def abc(a,b,c):
12 return a*100+b*10+c
13 等价于 abc = lambda a,b,c:a*100+b*10+c
14
15 >>> def func(x):
16 return x.isalnum()
17 等价于 func = lambda x:x.isalnum
5.交换变量,类似于三目操作符