python的函数参数

目录

简介

位置参数

默认参数

可变参数

关键字参数

 命名关键字参数

组合参数

参考资料:


简介

python 中函数有5种参数类型,位置参数,默认参数,可变参数,命名关键字参数和关键字参数,

在函数参数列表中,参数的优先顺序是 

位置参数 >默认参数>可变蚕食>命名关键字参数>关键字参数

位置参数

  • 给函数的位置参数传参时,参数位置与函数变量的位置一一对应。例如:
# 位置参数

def power(x,n):
    sum = 1
    while(n>0):
        n=n-1
        sum = sum * x
    print( sum)
    return sum

# 调用示例:
 power(2,0)

给位置参数传参时,也可以通过列表或元组的方式进行

#传入的参数值是通过一个元组方式,如
    tuple1 = (3,2)
    power(*tuple1)
# 注 此时元组数据的个数必须与函数变量的个数一致

默认参数

我理解的是默认参数是位置参数的特殊类型,在定义函数的同时,给函数参数设置了默认值。

在调用函数时,默认参数可以被初始化,也可以不传入任何值

默认参数必须指向一个不可变对象。如果默认参数是一个可变参数时,当调用函数 默认参数被修改时,它的值就发生了变化。

示例:

# 默认参数
def add_end(L=None):
    if L is None:
        L = []
    L.append("END!")
    print(L)
    return L

# 调用示例
add_end([1,2,3])

可变参数

定义可变参数时 在参数前面加一个*号, 表示该参数是可变参数了,

可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。 

可以接受列表或元组类型的参数

可变参数函数应该如何调用

1  将参数值罗列在参数中

2. 当可变参数的值是列表或者是元组时,调用时,在变量前面添加 * 号

3. 可变参数在函数调用时自动组装为一个tuple

示例:

# 可变参数 可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

def caculate(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n
    print(sum)
    return sum

# 调用示例
    # 多个参数值依次传入
    caculate(1,2,3,4,5)
    caculate(1,2,3)
    #
    # 列表类型的可变参数
    # para = [1,2,3,4,5]
    # caculate(*para)

关键字参数


1. 定义关键字参数时,在参数前面添加两个星号 **
2. 允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
3. 关键字参数是,是函数调用数据的一个拷贝,函数内部修改关键字参数,不会影响传入的关键字参数的值 (即:传入的字典变量的值不会被更改)
示例:

# 关键字参数
def person(name,age,**kw):
    print('name:', name, 'age:', age, 'other:', kw)

# 调用示例 1:
person("Jack", '13')
person("Jack",'13',city ='BeiJing',job='HeBei')

输出:
name: Jack age: 13 other: {}
name: Jack age: 13 other: {'city': 'BeiJing', 'job': 'HeBei'}

关键字参数也可以通过字典变量的方式调用,调用时在变量前面添加两个星号 **

示例:

# 通过字典变量给关键字参数传参
dicts = {'city':'BeiJing','job':'Engineer'}
person("Jack", '13',**dicts)

 命名关键字参数

1. 限制关键字参数的名字(函数参数中将参数的关键字定义好)

2. 当函数参数中没有定义可变参数时,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数

当函数参数列表中包含了可变参数,则不需要这个特殊的分割符号了。

示例:

# 函数定义中已没有一个可变参数,需要一个特殊的分割符号'*'
def person(name, age, *, city, job):
    print(name, age, city, job)

# 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
def person(name, age, *args, city, job):
    print(name, age, args, city, job)

# 调用示例:
person("Jack",'13',city ='BeiJing',job='Engineer')

组合参数

 Python函数中,可以用位置参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

但是,不要同时使用太多的组合,否则函数接口的可理解性很差

思考:

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

 

参考资料:

https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888

 

 

 

 

 

 

 

 

 

 

 

 
 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值