基础知识回顾——函数

函数是一个可重用的代码块,用来实现特定的功能。

认识函数

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.交换变量,类似于三目操作符

1 >>> def dem1():
2        return True if 1 == 1 else False
3 >>> dem1()
4 True
5  
6 >>> def dem2():
7        return True if 1 == 2 else False
8 >>> dem2()
9 False

 

posted on 2017-01-14 12:52  Ryana  阅读(345)  评论(0编辑  收藏  举报