暑期Python学习(三)
函数
函数定义
在Python中定义函数为,def 函数名(参数):
然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
空函数
1 | def nop(): |
在这里pass
作为占位符,表示跳过,也可以用在if
的缩进块。
参数限制
1 | if not isinstance(x, (int, float)): |
实际上参数限制就是定义一个报错,isinstance()
判断数据类型,如果不是就提出一个错误。
作为一个弱类型语言,定义这一步是很有必要的,有助于读懂代码。
返回值
Python允许返回多个值,其返回的实际上是一个tuple元组,但是也可以用两个变量接收。
参数定义
在Python中函数参数的定义也比较灵活,提供位置参数、默认参数、可变参数、关键字(key)参数等
位置参数
位置参数指的是参数在传入时,实参和形参有着严格的位置对应关系,为常用参数形式。
默认参数
默认参数是指在位置参数的基础上为其添加默认值,有默认值的参数为默认参数,没有默认值的参数为必选参数
基本定义形式如下:
1 | def my_def(a,b=1): |
需要注意的是:
- 默认参数必须在必选参数后边,否则会无法辨认是否输入必选参数,从而报错。
- 默认参数的默认值一定是不变对象,由于Python中的变量定义为指针指向,会导致可变对象值发生变化
不可变对象有:数值类型、字符串、tuple元组、None等
可变参数
可变参数指的是参数的数目不固定,定义形式:
1 | def my_function(*v): |
在可变参数中传入的所有参数将作为一个tuple被接收,该tuple的变量名为函数在定义时的形参名,
定义时的需要在参数名前加一个*
。
关键字(key)参数
此处的关键字和c语言中的关键字并不是一个意义,而是在dict中的key的意义。即在传递参数时
,同时传递键(key)和值(value),Python会自动封装为一个dict。
1 | def my_function(**v): |
命名关键字参数
在关键字参数上,进一步限制传入的key的命名,就有了命名关键词参数:
1 | def person(name, age, *, city, job): |
这里需要一个*
区分位置参数与命名关键字参数,如果在这之前有可变参数,那么就不需要加*
。
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:
1 | 'Jack', 24, 'Beijing', 'Engineer') person( |
参数组合
在一个函数中使用多个参数要保证其中的顺序,依次为:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
1 | def onefunction(a,b,c=0,*args,job,city,**kw): |
tips:
- 使用
*args
和**kw
是Python的习惯写法。 - 可变参数和关键字参数有一点层级的感觉,中间包裹的是命名关键字参数这个比较尴尬的参数。
递归函数
写法与Java相同。