Python函数、参数及参数解构
函数
- 数学定义: y=f(x),y是x的函数,x是自变量。y=f(x0,x1,…,xn)
python 函数
- 由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元
- 完成一定的功能
函数的作用
- 结构化编程对代码的最基本的封装,一般按照功能组织一段代码
- 封装的目的是为了复用,减少冗余代码
- 代码更加简洁美观、易读易懂
函数的分类
- 内建函数,如max()、reversed()等
- 库函数,如math.ceil()等 #函数定义、调用
- def 语句定义函数
'''
函数名就是标识符,命令要求一样
语句块必须缩进,约定4个空格
python的函数没有return语句,隐式会返回一个None值
定义中的参数列表成为形式参数,只是一种符号表达,简称形参
'''
def add(x, y):
result = x + y
return result
out = add(3,5)
print(out)
- 调用
- 函数定义,只是声明了一个函数,它不会被执行,需要调用 调用的方式,就是函数名加上小括号,括号内写上参数 调用时写的参数是实际参数,是实实在在传入的值,简称实参
函数参数
- 参数调用时传入的参数要和定义的个数相匹配(可变参数例外)
- 位置参数
- def f(x,y,z) 调用使用f(1,3,5)
- 按照参数定义顺序传入实参
- 关键字参数
- def f(x,y,z) 调用使用f(x=1,y=3,z=5) 使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同
- 传参
- f(z=None,y=9,x=[2]) f((1,),z=6,y=4.3) f(y=5,z=6,2) 要求位置参数必须在关键参数之前传入
函数参数默认值
def login(host='127.0.0.1',port='8080',username='ops-xiaoniu',password='ops-passwrod'):
print('{}:{}@{}/{}'.format(host,port,username,password))
login()
login('127.0.0.1',80,'alwin','alwin')
login('localhost',username='root')
可变参数
- 位置参数的可变参数
'''
在形参前使用*表示该形参是可变参数,可以接收多个实参
收集多个实参数为一个tuple
'''
def add(*nums):
sum = 0
for x in nums:
sum += x
print(sum)
add(3,6,9,12) #调用
- 关键字参数的可变参数
'''
形参前使用**符号,表示可以接收多个关键字参数
收集的实参名称和值组成一个字典
'''
def showconfig(**kwargs):
for k,v kwargs.items():
print('{}={}'.format(k,v))
showconfig(host='127.0.0.1',port='8080',username='ops-xiaoniu',password='ops-xiaoniu')
keyword-only 参数
- 如果在一个星号参数后,或者一个位置可变参数后出现的普通参数,实际上已经不是普通参数了,而是keyword-only参数
def fn(*args,x):
print(x)
print(args)
fn(3,5)
fn(3,5,7)
fn(3,5,x=7)
#args可以看做已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参
参数解构
- 参数解构
- 给函数提供实参的时候,可以在集合类型前使用或者**,把集合类型的结构解开,提取出所有元素作为函数的实参 非字典类型使用解构成位置参数 字典类型使用**解构成关键字参数 提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配
def add(x, y):
return x+y
add(*(4,5))
add(*[4,5])
add(*{4,6})
d = {'x': 5, 'y': 6}
add(**d)
add(**{'a': 5, 'b': 6})
add(*{'a': 5, 'b': 6})
本文链接:https://www.dzdvip.com/30642.html
版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。