参考:大佬的链接
在学习python中遇到运用**
调用dict(字典)的情况,
当时没懂dict与tuple(元组)的区别,自己测试直接调用函数或者是用*调用都不可实现,
于是查了许多大佬的解释,
得出下面关于*
与**
的区别。
1.算法运算
*
表示乘号
**
表示乘方
a=2*3
print(a)
run: 6
a=2**3
print(a)
run: 8
2. *arg
和 *kwargs
主要用于函数定义。
其中的两个关键字。其实并不是必须写成 *arg
和 *kwargs
。 *
才是必须的. 你也可以写成*a
和 *k
。
而写成 *arg
和 *kwargs
只是一种通俗命名约定。
2.1函数实参
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们必须有确定的值,以便把这些值传送给形参。
当函数的形参是固定长度时候,可以用*arg
或者是**kwargs
调用函数,类似对元组和字典的解引用。
kwargs ={"data0":"abcd","data1":1,"data2":2}
fun(**kwargs)
def fun(data0,data1,data2):
print(data0)
print(data1)
print(data2)
Run: abcd
1
2
args =("abcd",1,2)
fun(*arg)
def fun(data0,data1,data2):
print(data0)
print(data1)
print(data2)
Run: abcd
1
2
2.2函数形参
形式参数是指函数名后括号中的变量。
因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
*arg
和 *kwargs
的区别,两者都是 python 中的可变参数:
*arg
表示任何且多个无名参数,它本质是一个 tuple(元组)
*kwargs
表示关键字参数,它本质上是一个 dict(字典)
def fun(*args, **kwargs):
print('args=', args)
print('kwargs=', kwargs)
fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
Run :
args= (1, 2, 3, 4)https://blog.csdn.net/yilovexing/article/details/80576788
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
3.序列解包(python3后才有的语法糖)
其中只有用到*
,没有用到** 这有些跑题了
如果想进一步学习的
可以阅读另外一篇大佬文章
Python3 序列解包
ps:蹲家一直爽,一直蹲就不爽了。希望疫情快点过吧。