引言
python小程序之交换两个变量的值以及不定长参数如何传参
文章目录
一、交换两个变量的值
1.1 题目
交换两个变量
1.2 代码
1.2.1 引入第三个变量
a = 10
b = 20
# 第三个变量
c = a
a = b
b = c
print(a, b)
输出结果:
1.2.2 数学方法
a = 10
b = 20
# 数学方法,a+b=30
a = a + b
b = a - b
a = a - b
print(a, b)
输出结果:
1.2.3 python特有优雅方法
# python专有
print(a, b)
a, b = b, a
print(a, b)
输出结果:
1.3 代码解释
1.3.1 引入第三个变量
- 引入c作为中间变量进行变量交换
1.3.2 数学方法
- 将变量的和、差等进行计算从而进行变量交换
1.3.3 python特有优雅写法
在python中,
a, b = b, a
是一种非常优雅且常见的交换两个变量值的方法
b, a
这个表达式首先被计算,但是它的值不会立即赋给a
和b
- python创建了一个元组
(b, a)
,这个元组包含了b
和a
当前的值 - 然后,这个元组被解包,第一个元素(原
b
的值)被赋值给a
,第二个元素(原a
的值)被赋值给b
这个过程是在一个单独的操作中完成的,保证了在赋值过程中不会丢失任何一个变量的值
二、不定长参数如何传参
2.1 题目
如何输入不定长参数
2.2 代码
def func(*args,
**kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
print('-' * 30)
func()
func(1, 2, 3) # 位置传参, 数据都给 args
func(a=1, b=2, c=3) # 关键字传参, 数据都给 kwargs
func(1, 2, 3, a=4, b=5, c=6)
输出结果:
2.3 代码解释
这段python代码定义了一个名为
func
的函数,它接受任意数量的位置参数(通过*args
)和任意数量的关键字参数(通过**kwargs
)
def func(*args, **kwargs):
def
关键字用于定义一个函数*args
是一个特殊语法,它允许函数接收任意数量的位置参数,并将它们作为一个元组(tuple)存储在变量args
中**kwargs
是另一个特殊语法,它允许函数接收任意数量的关键字参数,并将它们作为一个字典(dictionary)存储在变量kwargs
中
- 在函数体内部:
print(type(args), args)
打印出args
的类型和值print(type(kwargs), kwargs)
打印出kwargs
的类型和值print('-' * 30)
打印一个由30个减号组成的分隔线
- 函数调用:
func()
不传递任何参数,因此args
和kwargs
都将为空func(1, 2, 3)
传递了三个位置参数,它们将存储在args
中作为一个元组,而kwargs
将为空func(a=1, b=2, c=3)
传递了三个关键字参数,它们将存储在kwargs
中作为一个字典,而args
将为空func(1, 2, 3, a=4, b=5, c=6)
同时传递了位置参数和关键字参数,位置参数存储在args
中,关键字参数存储在kwargs
中
这显示了函数如何根据传递给它的参数类型来存储这些参数。位置参数存储在
args
中,而关键字参数存储在kwargs
中
三、思考
3.1 交换两个变量的值
- 引入第三个变量的方法的本质是引入中间变量
- 数学方法的本质也是引入中间量(和、差等)
- python特有写法是创建了一个元组,然后解包赋值进行变量交换
3.2 不定长参数如何传参
- 参数传参的方式:
- 位置传参:在函数调⽤的时候, 按照形参的顺序, 将实参值传递给形参
- 关键字传参:在函数调⽤的时候, 指定数据值给到那个形参
- 混合使用:关键字传参必须写在位置传参的后⾯;不要给⼀个形参传递多个数据值
- 传参完整顺序:def 函数名(普通函数, *args, 缺省参数, **kwargs)