Python使用保留字def定义一个函数,形式如下:
def <函数名>(<参数列表>):
<函数体>
return <返回值>
函数的调用过程与C语言类似。
关于一中特殊的函数——匿名函数:使用lambda,
匿名函数是将函数名作为函数结果返回,语法格式如下:
<函数名>=lambda(<参数列表>)
等价于下面的形式:
def <函数名>(<参数列表>):
return <表达式>
通俗来讲,lambda适用于简单、能够用一行表示完的函数,具体实例如下:
>>>f=lambda x,y : x*y
>>>type(f)
>>>f(3,5)
22
一、可选参数和可变数量参数
1.可选参数:
有些函数在定义时,它的参数存在一个默认值,因此在调用时可以传入参数,也可以不传入参数,不传入参数时,使用它的默认值作为它的值,实例如下:
>>>def func(a,b=3):
print(a*b)
>>>func(5)
15
>>>func(5,4)
20
可见,第一次调用时,没有传入第二个参数,因此参数b默认为3,3*5=15
第二次调用传入了b为4,4*5=20
2.可变数量参数
通过在参数前加星号(*)来实现,且带星号的参数只能放在参数列表的最后。
在调用时,这些(0到多个)参数作为元组被传入函数,实例如下:
>>>def func(a,*b):
for n in b:
a+=n
return a
>>>func(1,2,3,4,5)
15
在这个例子中,输入的参数为1,2,3,4,5,其中,a为数字1,b为元组(2,3,4,5)(元组:可理解为一组元素)
3.参数的位置和名称传递
一般按照参数的位置传递,即函数定义中形参的位置和传入参数位置一一对应,例如,函数定义为:
def fun(a,b,c,d)中,调用函数时,fun(1,3,5,6),表示传入的参数a=1,b=3,c=5,d=6,
如果参数很多,这种方式的可读性就会变差,因此出现了第二种方式:按照形参名称输入参数,这种方式参数之间的顺序可以随意调整,仍以def fun(a,b,c,d)为例,其调用方式可以变成:
fun(b=3,c=5,a=1,d=6)达到相同的效果。
4.函数可以没有return,没有return时,没有返回值,return也可以返回多个值,使用元组保存。
5.在函数中定义的变量称为局部变量,仅在函数内部存在,函数结束后,局部变量将不存在。
全局变量是在函数外定义的变量,一般没有缩进,在程序执行过程中全过程有效。
在函数中,对于简单类型的变量如果不使用关键字global来声明一个全局变量,那么在函数中即使使用了与函数外一个全局变量名称相同的变量,也不会对全局变量造成影响。
而对于列表等类型的组合数据类型的全局变量,如果函数内部没有真实的创建同名变量,则该函数可以直接使用并修改全局变量的值,如果函数内部真实创建了一个同名变量,则对该变量的操作不会影响到全局变量。
函数调用自己本身的方式称为递归,最简单的递归实例就是计算一个数的阶乘。
该实例代码如下(计算n的阶乘):
def fact(n):
if n == 0:
return 1
else:
return n*fact(n-1)
这个函数中,很容易看出在第五行它对自身的调用,也是递归中比较容易理解的一个实例。
递归的两个关键特征,1是存在一个或多个基例,基例是确定的表达式,不需要再次递归;2是所有递归链都以基例结尾。
abs() | id() | round() | exec() | memoryview() |
all() | input() | set() | enumerate() | next() |
any() | int() | sorted() | filter() | object() |
asci() | len() | str() | format() | property() |
bin() | list() | tuple() | frozenset() | repr() |
bool() | max() | type() | getattr() | setattr() |
chr() | min() | zip() | globals() | slice() |
complex() | oct() | bytes() | hasattr() | staticmethod() |
dict() | open() | delattr() | help() | sum() |
divmod() | ord() | bytearray() | isinstance() | super() |
eval() | pow() | callable() | issubclass() | vars() |
float() | print() | classmethod() | iter() | __import()__ |
hash() | range() | compile() | locals() | |
hex() | reversed() | dir() | map() |