您的位置:首页 > 其它

基础知识回顾——函数

2017-01-14 12:52 465 查看
函数是一个可重用的代码块,用来实现特定的功能。

认识函数

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: