(一)函数声明:
def <函数名> (参数列表):
<函数语句>
return <返回值>
1)无返回值的函数声明
>>> def printAll(X):
... for x in X:
... print x
...
>>> l = [1,2,3,4] #定义一个列表
>>> print l
[1, 2, 3, 4]
>>> printAll(l)
1
2
3
4
>>> t = ('a','b','c') #定义一个元组
>>> print t
('a', 'b', 'c')
>>> printAll(t)
a
b
c
>>>
2)带返回值的函数声明:
>>> def sum(L):
... result = 0
... for i in L:
... result = result + i
... return result
...
>>> l = [1,2,3,4,5]
>>> sum(l)
15
>>> r = sum(l)
>>> print r
15
>>>
(二)函数中的参数
1)参数默认值
def <函数名>(参数=默认值):
<语句>
>>> def cube(x = 5):
... return x ** 3
...
>>> cube(2)
8
>>> cube()
125
>>>
>>> def fun(x = 1, y = 2, z = 3):
... return (x + y - z) * 2
...
>>> fun()
0
>>> fun(2,3,1)
8
>>> fun( , , 5) #这样是错误的
File "<stdin>", line 1
fun( , , 5) #这样是错误的
^
SyntaxError: invalid syntax
>>> def fun(x = None, y = None, z = None):
... if None == x:
... x = 1
... if None == y:
... y = 2
... if None == z:
... z = 3
... return (x + y - z) * 2
...
>>> fun()
0
>>> fun(None,None,5)
-4
>>>
2)参数传递
参数传递的方式有两种:一种是按照声明函数时的参数的顺序进行传递,另一种是按照参数名传递。
fun(1,2,3) #合法
fun(z = 1, x = 2, y = 3) #合法
fun(1, z = 3, y = 2) #合法
fun(z = 3, y = 2, 1) #不合法,按顺序传递的参数不能位于按参数名传递的参数之后
3)可变长参数:
声明一个可变长参数的函数只需以*开头定义一个参数即可。
>>> def mylist(*list):
... l = []
... for i in list:
... l.extend(i) #将所有参数中的列表合并到一起
... return l
...
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [7,8,9]
>>> mylist(a,b)
[1, 2, 3, 4, 5, 6]
>>> mylist(b,c,a)
[4, 5, 6, 7, 8, 9, 1, 2, 3]
>>>
4)参数的引用:
在C语言函数中有传值和传址两种方式,传址能够改变参数的值,传值并不能改变参数的值。
在python中,则通过列表的方式改变参数的值。
>>> def funXX(x):
... x = x ** 2
...
>>> def funYY(x):
... x[0] = x[0] ** 2
...
>>> a = 2
>>> funXX(2)
>>> a
2
>>> b = [2]
>>> funYY(b)
>>> b
[4]
>>>
三)参数的作用域
全局变量的定义:
>>> def fun(x):
... global a #定义全局变量
... return a + x
...
>>> a = 5
>>> fun(3)
8
>>> a = 2
>>> fun(3)
5
>>>
四)lambda表达式:
lambda表达式用来声明一个匿名的函数,使用lambda声明的函数返回一个值,在调用函数的使用直接使用lambda表达式返回值。
格式: lambda 参数列表 : 表达式
>>> def show():
... print 'hello'
...
>>> f = lambda:show() #调用无参数函数
>>> f()
hello
>>> def shown(n):
... print 'hello! ' * n
...
>>> fn = lambda x : shown(x)
>>> fn(2)
hello! hello!
>>> def usereturn(x):
... return x * 2
...
>>> fr = lambda x : usereturn(x) * x
>>> fr(3)
18
>>> fun lambda x: print x #不能在lambda中使用print语句
File "<stdin>", line 1
fun lambda x: print x #不能在lambda中使用print语句
^
SyntaxError: invalid syntax
>>>