Python学习笔记(2):函数传参之位置参数、默认参数、不定长参数(*args)、关键词参数(**kwargs)、*单独出现、强制位置参数

在学习Python的过程中,不免要调用很多库中的函数,各种库中函数参数的“形参”有不同的定义形式,如果你和我一样困惑的话,希望下面这篇文章可以帮到你。

0. 前言

  • 形参(parameter):指函数定义中的参数
  • 实参(argument):指函数调用时人为传递的参数

1. 位置参数

(1) 简述

位置参数,也是我们自己定义和调用函数时用的最多的。

当我们定义函数的时候使用了位置参数的形式,那么在我们调用函数的时候输入实参的顺序和数量,必须和函数定义中的形参的顺序和数量一样。

(2) 举例说明
def myfunction(name, age):
    print(f"My name is {name}, I am {age} years old.")

# 位置参数形式调用
myfunction("Bob", 25)       
# 关键词参数形式调用,可不按照顺序      
myfunction(age=25, name="Alice")  

运行结果

My name is Bob, I am 25 years old.
My name is Alice, I am 25 years old.

2. 默认参数

(1) 简述

默认参数,顾名思义就是在函数定义的时候,我们就已经给形参指定了默认值(缺省值),在函数调用的时候可以不关心该参数(也可以重新赋值)。

在我们调用库中函数的时候,有时候一个函数有十几个形参,但是绝大多数形参都有默认值。当我们不是很了解这个函数的时候,可以只给没有默认值的形参传入数据,这大大提高了函数调用的效率。

(2) 举例说明
def myfunction(name="Bob", age=30):
    print(f"My name is {name}, I am {age} years old.")

# 不指定参数
myfunction()
# 指定部分参数
myfunction("Alice")

运行结果

My name is Bob, I am 30 years old.
My name is Alice, I am 30 years old.

3. 不定长参数(*args)

(1) 简述

在参数前面加上(*)号,那么给这个形参传递参数的时候,实际上传递过来的参数会保存在一个元组中。

注:对于不定长参数不能使用关键词参数的形式进行传参,否则报错;
最好也不要直接传递一个元组进去,否则传入的元组会被包裹为元组的第一个元素;
如果要传递一个元组进去,可以在前面加上一个(*)

(2) 举例说明
def myfunction(arg1, *args):
    print(arg1)
    print(args)

myfunction(1, 100, 200)      # 第一种
print("---------------")
tuple1 = (100, 200)
myfunction(1, tuple1)          # 第二种
print("---------------")
myfunction(1, *tuple1)         # 第三种,加上(*)和第一种相同

运行结果

1
(100, 200)
---------------
1
((100, 200),)
---------------
1
(100, 200)

4. 关键词参数(**kwargs)

(1) 简述

在参数前面加上(**)号,那么给这个形参传递参数的时候,我们需要使用关键词参数的形式进行传参,实际上传递过来的参数会保存在一个字典中。

注:使用关键词参数的形式进行传参;
直接传入字典的时候,需要加上(**)

(2) 举例说明
def myfunction(arg1, **kwargs):
    print(arg1)
    print(kwargs)

myfunction(1, a=100, b=200)
print("---------------")
c = "c"
d = "d"
dict1 = {c: 300, d: 400}
myfunction(1, **dict1)

运行结果

1
{'a': 100, 'b': 200}
---------------
1
{'c': 300, 'd': 400}

5. *单独出现

(1) 简述

一般的形式是 def myfunc(a, b, *, c) ,( * )号后的参数必须使用关键词参数的形式传入,( * )号前的参数可以直接传入也可以使用关键词参数形式传入

6. 强制位置参数

(1) 简述

Python3.8 新增了一个强制位置参数的语法,用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

一般形式是 def myfunc(a, b, /, c) ,(/)前的参数只能按照顺序传入,不能使用关键词参数的形式传入;(/)后的参数都可以。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值