第十一章、Python函数
在前面章节中我们也学习使用了部分函数,如input()、add()、print()、range()等。Python中有许多的内置函数,方便直接使用。还可以自定义函数,方便以后直接使用同样的程序代码。
1、函数的定义
1)定义函数格式:
def 函数名(参数1,参数2, ... ):
函数功能代码块
[return [返回值]]
解析:
- 函数名需要具有一定的意义,一般用小写字母和单下划线、数字等组合
- def是定义函数的关键词,声明一个函数
- 函数名后面是圆括号,括号里面,可以有参数,也可以没有参数
- 括号后面的冒号必须写
- 代码块要按照python缩进规则,缩进四个空格
>>> def my_max(x,y): ... if x >= y: ... return x ... else: ... return y ... >>> my_max(1,2) 2 >>> my_max(3,2) 3
2、函数的调用
对于Python中的内置函数,可以直接使用
格式: [返回值] = 函数名([形参值])
- 函数名:要调用的函数的名称;
- 形参值:当初创建函数时要求传入的各个形参的值。
- 如果该函数有返回值,我们可以通过一个变量来接收该值,不需要接收该值,可以不需要
>>> a=abs(-3) >>> a 3 >>> print(a) 3
3、参数
形参:形式参数,定义函数时使用的未知变量,如abs(x)中的 x
实参:实际参数,调用函数时使用的值,如abs(13)中的13
1)位置参数
又叫必备参数,在调用函数时,参数的顺序和数量要和定义函数时一样,否则会报错。
>>> abs() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: abs() takes exactly one argument (0 given) >>> abs(-3) 3
2)关键字参数
利用形参的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。
>>> def str_n(str1,str2): ... print("str1:",str1) ... print("str2:",str2) ... >>> str_n("as","12") ('str1:', 'as') ('str2:', '12') >>> str_n(str2="as","12") File "<stdin>", line 1 SyntaxError: non-keyword arg after keyword arg >>> str_n(str2="as",str1="12") ('str1:', '12') ('str2:', 'as')
简单理解就是,在赋实参时,直接指定实参赋给谁
增加**kw的双星号参数时,从此处开始直至结束的所有关键字参数都将被收集并汇集成一个名为 kw 的字典(Dictionary)。
3)默认参数
在定义函数时,直接给形式参数指定默认值。调用函数时没有给拥有默认值的形参传递参数,该函数也能执行。
格式:def 函数名(形参1,形参2=默认值, ...):
函数功能代码块
>>> def str_n(str1,str2="qw"): ... print("str1:",str1) ... print("str2:",str2) ... >>> str_n("as") ('str1:', 'as') ('str2:', 'qw') >>> str_n("as","12") ('str1:', 'as') ('str2:', '12')
注:当调用函数时,若给拥有默认值的形参传递新参数,该形参的值改变为新参数。
默认参数必须指向不变对象,否则每次调用函数,函数值都会改变,函数也就失去了意义。
4)可变参数
可变参数就是传入的实际参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
定义函数的时候,在参数前面加上星号 * ,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇集成一个元组(Tuple)。
调用一个list或者tuple,在列表名或元组名前面加上一个*号,把list或tuple的元素变成可变参数传进去
>>> def ab(*x): ... sum = 0 ... for i in x: ... sum = sum + i * i ... return sum ... >>> ab(1) 1 >>> ab(1,2) 5 >>> ab([1,2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in ab TypeError: can't multiply sequence by non-int of type 'list' >>> a=[1,2] >>> ab(*a) 5
5)None(空值)
常量 None(N 必须大写)是空值,表示没有值。和 False 不同,它不表示 0,也不表示空字符串。
>>> type(None) <type 'NoneType'>

浙公网安备 33010602011771号