【Python】11、函数-01
文章目录
- 1. 函数简介
- 1.1 函数创建
- 2. 函数参数
- 3. 参数传递方式
- 4. 不定长参数
- 5. 参数解包
1. 函数简介
函数也是一个对象,函数用来保存一些可执行的代码,并且可以在需要的时候对这些语句进行多次的调用。
1.1 函数创建
语法定义:
def 函数名 ([行参1 : type,行参2 : type,...,行参数n : type]) -> return_type :
代码块
# type表示参数类型,不具有强制性,仅作为提示信息
# return_type 表示返回值类型,不具有强制性,作为提示信息
# 定义函数
def fn (a : int,b : int) -> int :
print('这是一个函数!')
# 调用
fn()
# 结果:
这是一个函数!
***Repl Closed***
定义行参相当于在函数内部申明了变量,但是并不赋值
2. 函数参数
定义函数一般都是需要实现某种功能,定义函数时可以在函数的()中定义数量不等的行参,多个参数之间使用逗号分割
- 形参(形式参数): 定义形参相当于在函数内部申明了变量,但是并不赋值
- 实参(实际参数): 如果函数定义了形参,那么在调用函数时也必须传递实参,实参将会赋值给对应的形参。有几个形参就有多少个实参
# 定义函数
def fn(a, b) :
print(a+b)
# 调用
fn(4,82)
# 结果:
86
***Repl Closed***
3. 参数传递方式
定义形参是,可以为形参指定默认值,指定了默认值以后如果用户传递了默认值则默认值没有任何作用,如果用户没有传递,则默认值就会生效
# 定义函数
def fn(a, b,c = 20) :
print(a+b+c)
# 调用
fn(4,82)
# 结果:
106
***Repl Closed***
- 实参传递方式
- 位置参数:将对象位置的实参赋值给对应位置的形参
- 关键字参数:可以不按照形参的定义顺序去传递参数,而是直接根据参数名取传递参数
# 定义函数
def fn(a, b,c = 20) :
print(a+b+c)
# 调用
fn(c=4,a=82,b=2)
# 结果
88
***Repl Closed***
- 位置参数和关键字参数可以混合使用
混合使用时,必须将位置参数写到前面
# 定义函数
def fn(a, b,c = 20) :
print(a+b+c)
# 调用
fn(4,c=22,b=2)
# 结果:
28
***Repl Closed***
- 实参的类型
函数在调用的时候,解析器不会检查实参的类型,实参可以传递任意类型的对象。
4. 不定长参数
参数的个数是不定的,在定义函数时,可以在形参前加上*,这样这个形参会获取到的所有实参,会将所有的实参保存到一个元组中
# 定义函数
def fn(*a) :
print('a = ',a)
# 调用
fn(1,3,5,4)
# 结果:
a = (1, 3, 5, 4)
***Repl Closed***
- 带星号的参数只能有一个
- 带星号的参数可以和其他参数配合使用
# 定义函数
def fn(a,b,*c) :
print('a = ',a)
print('b = ',b)
print('c = ',c)
# 调用
fn(1,3,5,4)
# 结果:
a = 1
b = 3
c = (5, 4)
***Repl Closed***
- 可变参数不是必须写在最后,但是需要注意,带星号的参数后的所有参数,必须以关键字参数的形式传递
# 定义函数
def fn(a,*b,c) :
print('a = ',a)
print('b = ',b)
print('c = ',c)
# 调用
fn(1,3,5,c = 4)
# 结果:
a = 1
b = (3, 5)
c = 4
***Repl Closed***
- 如果在形参开头直接写一个*,则要求所有的参数必须以关键字参数的形式传递
# 定义函数
def fn(*,a,b,c) :
print('a = ',a)
print('b = ',b)
print('c = ',c)
# 调用
fn(a = 1,b = 3,c = 4)
# 结果
a = 1
b = 3
c = 4
***Repl Closed***
- *形参只能接受位置参数,而不能接受关键字参数
# 定义函数
def fn(*a) :
print('a = ',a)
# 调用
fn(a = 1) # 正确调用 fn(1)
# 结果
TypeError: fn() got an unexpected keyword argument 'a'
- ** 形参可以接受其它的关键字参数,它会将这些参数统一保存到一个字典中,字典的key就是参数名字,字典的value就是参数的值
** 形参只能有一个,必须写在所有参数的最后
# 定义函数
def fn(**a) :
print('a = ',a)
# 调用
fn(a = 1,b = 2,c = 3)
# 结果
a = {'a': 1, 'b': 2, 'c': 3}
***Repl Closed***
5. 参数解包
- 传递实参时,也可以在序列类型的参数前添加星号
这样会自动将序列中的元素依次作为参数传递,这里要求序列中元素的个数必须和形参的个数一致
# 定义函数
def fn(a,b,c) :
print('a = ',a)
print('b = ',b)
print('c = ',c)
t = (10,30,45)
# 调用
fn(*t)
#结果:
a = 10
b = 30
c = 45
***Repl Closed***
- 通过** 来对一个字典进行解包
# 定义函数
def fn(a,b,c) :
print('a = ',a)
print('b = ',b)
print('c = ',c)
d = {'a' : 10,'b' : 30,'c' : 45}
# 调用
fn(**d)
# 结果:
a = 10
b = 30
c = 45
***Repl Closed***