一、函数的使用
-
定义
def 函数名(param1、param2……): """ :param1:参数1 :param2:参数2 :return:返回值 """ code 1 code 2 code 3 ... return 返回值
函数在定义阶段只检测语法,不会报错
-
调用
函数名(param1, param2)
二、定义函数的三种形式
-
无参函数
def func(): print('hello byx') func() # hello byx
-
有参函数
def sum_self(x, y): """求和""" res = x+y print(res) sum_self(1,2) # 3
-
空函数
def func(): pass
三、函数的返回值的特点
- return是一个函数结束的标志,函数内可以由多个return,只要执行到return,函数就会结束。
- return的返回值可以返回任意数据类型
- return的返回值无个数限制,即可以使用逗号隔开返回多个值
- 0个:返回None
- 1个:返回值是该值本身
- 多个:返回值是元祖
四、函数的参数
-
形参和实参
-
形参
# 在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质就是变量名。 def func(x, y): print(x) print(y)
-
实参
# 在函数调用阶段括号内传入的参数,称之为实际参数,简称实参,本质就是变量的值。 func(1, 2)
-
-
位置参数
-
位置形参
- 定义:在函数定义阶段,按照从左到右的顺序依次定义的形参
- 特点:按照位置定义的形参,都必须被传值,且不能多不能少
def func(x, y): print(x) print(y)
-
位置实参
- 定义:在函数调用阶段,按照从左到右的顺序依次定义的实参,称之为位置实参。
- 特点:按照位置为对应的形参依次传值。
func(1, 2)
-
-
关键字实参
-
定义:在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参。
-
特点:可以打破位置的限制,但仍能为指定的形参赋值。
-
注意
- 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
- 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。
func(x, y=2) func(y=2, x) # SyntaxError: positional argument follows keyword argument func(x, x=1) # NameError: name 'x' is not defined
-
-
默认形参
-
定义:在定义阶段,就已经被赋值
-
特点:调用时可以不用为其赋值
-
注意:
- 位置形参必须放在默认形参的左边。
- 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
def func(x, y=10): print(x) print(y) func(2)
-
五、可变长参数
-
可变长形参之*
# 形参中的*会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。 def sum_self(*args): res = 0 for num in args: res += num return res res = sum_self(1, 2, 3, 4) print(res)
10
-
可变长实参之*
# * 实参中的*,*会将*后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。 def func(x, y, z, *args): print(x, y, z, args) func(1, *(1, 2), 3, 4)
1 1 2 (3, 4)
-
可变长形参之**
# 形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs。 def func(**kwargw): print(kwargw) func(a=5)
{'a': 5}
-
可变长实参之**
# 实参中的**,**会将**后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带**的,它就是关键字实参,应该马上打散成关键字实参去看。 def func(x, y, z, **kwargs): print(x, y, z, kwargs) func(1, 3, 4, **{'a': 1, 'b': 2})
1, 3, 4, {'a': 1, 'b': 2}
-
命名关键字形参
- 定义:在函数定义阶段,*后面的参数都是命名关键字参数。
- 特点:在传值时,必须按照key=value的方式传值,并且key必须命名关键字参数的指定的参数名。
def register(x, y, **kwargs): if 'name' not in kwargs or 'age' not in kwargs: print('用户名和年龄必须使用关键字的形式传值') return print(kwargs['name']) print(kwargs['age']) register(1, 2, name='nick', age=19)