python函数的5种参数详解(Python函数、参数及参数解构)

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,一经查实,本站将立刻删除。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月25日 09:20
下一篇 2022年3月26日 09:48

相关推荐

发表评论

您的电子邮箱地址不会被公开。