目录
*
– 前言
– 数值运算
– 序列(列表、元组)解包
– 函数声明的时候作为函数形参
– 函数调用的时候作为函数实参
前言
由于之前主要用的是C/C++,总把python中的,看成与指针相关,其实python中是没有指针的,如果看成指针那么程序一定看不懂。这里查阅了一些资料,对python中的 * 与 的用法做一个总结。总的来说,python中与 的作用一共有四个,分别是数值计算、序列解包、函数声明的时候作为函数形参、函数调用的时候作为函数实参。注意,数值运算与序列解包中没有 用法
数值运算
这个没啥可说的了,就是乘法:
a = 5
b = 6
c = a * b
序列(列表、元组)解包
先看一个例子吧:
list = [1,2,3,4,5]
a,b,*c =list
print('a=',a)
print('b=',b)
print('c=',c)
结果如下:
通过上面的代码,号的作用也就一目了然了,号让c能接收列表中剩下的所有的参数,这样在序列解包的时候我们的灵活度就大大提高了,比如我们用3个变量就能接受长度为5的序列中的所有的值。
函数声明的时候作为函数形参
大家应该会经常看到类似这样的函数:def function( * arg, kwargs): ,这里的* arg与kwarg都是为了接受不定长参数的。其中arg是位置参数,用于接受不定长的无名参数,本质是一个元组,kwargs是关键字参数,本质是一个字典。还有一点arg,kwargs就是一个变量名,换成 a,**b效果是一样的。接下来看代码:
def function(*args,**kwargs):
print(args)
print(kwargs)
print(args[0])
print(kwargs['b'])
my_list = [1,2,3,'a','b']
my_dict = {'a':1,'b':0,'c':2}
function(*my_list,**my_dict)
结果如下图所示:
函数调用的时候作为函数实参
如果函数的参数是固定长度的,我们可以通过arg或者*kwarg一次性传递,而不用分别给每个参数传递值。具体如下:
class test(object):
def __init__(self,arg,list,name='nihao'):
self.arg = arg
self.list = list
self.name = name
def print_p(self):
print(self.arg)
print(self.list)
print(self.name)
if __name__ == "__main__":
my_list = [44,55,'A']
my_dict = {'arg':77,'list':88,'name':'B'}
A = test(*my_list)
B = test(**my_dict)
A.print_p()
print("----------我是一条分割线---------")
B.print_p()
结果如下:
上面的代码中,我们通过了arg与 kwarg给test类的构造函数一次性传递了arg,list,name三个变量的值。这里还有一个东西需要注意一下,这种情况下如果使用 kwarg方式传值,那么*kwarg这个字典中的键值应该与函数的形参名字保持一致否者会报错,比如上面那个例子中,my_dict中的键值必须是arg,list,name,与test中的构造函数的形参值一样。
参考资料:
https://blog.csdn.net/zkk9527/article/details/88675129
https://blog.csdn.net/yilovexing/article/details/80577510
Original: https://blog.csdn.net/weixin_41271939/article/details/124521066
Author: 慢下去、静下来
Title: python中的与*用法详解
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/670216/
转载文章受原作者版权保护。转载请注明原作者出处!