-
2018-07-02 18:12:07
最近在做一个web项目的过程中,需要查看一些Python开发文档,会发现自己学的Python基础知识有些生疏了,这里讲解一些*和**的作用,以便再次巩固复习,同时也将这个小知识分享给更多的Python爱好者。
Python中的*与**操作符使用最多的就是两种用法。
1.用做运算符,即*表示乘号,**表示次方。
2.用于指定函数传入参数的类型的。*用于参数前面,表示传入的多个参数将按照元组的形式存储,是一个元组;
**用于参数前则表示传入的(多个)参数将按照字典的形式存储,是一个字典。*args必须要在**kwargs,否则将会提示语法错误"SyntaxError: non-keyword arg after keyword arg."
下面将展示示例代码:
def func(*args): print(type(args)) for index, item in enumerate(args): ''' enumerate()是python的内置函数 对于一个可迭代的(iterable)/可遍历的对象(list, str,tuple),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 >>> list1 = ['life', 'is', 'too', 'short', 'you', 'need', 'python.'] >>> for index, item in enumerate(list1): ... print(index, item) ... 0 life 1 is 2 too 3 short 4 you 5 need 6 python. ''' print("{}:{}".format(index, item)) def function(**kwarg): print(type(kwarg)) for key, value in kwarg.items(): print("{}:{}".format(key, value)) def main(): func("python", "golang") function(a = "python", b = "golang") if __name__ == '__main__': main() ''' 结果: <class 'tuple'> 0:python 1:golang <class 'dict'> a:python b:golang [Finished in 0.5s] '''
更多相关内容 -
python中的*args和**args详解
2021-03-24 14:32:49python中很有趣的两个小东西,先介绍: 1、*args保存多余变量,保存方式为元组。 2、**args保存带有变量名的多余变量,保存方式为字典。 上代码… #args的使用 def fun(x, y, *args): print("x=", x) print("y=",...python中很有趣的两个小东西,先介绍:
1、*args保存多余变量,保存方式为元组。
2、**args保存带有变量名的多余变量,保存方式为字典。上代码…
#args的使用 def fun(x, y, *args): print("x=", x) print("y=", y) print("args=", args) fun(1, 2, 3, 4, 5, 6, 7)
输出为:
x= 1 y= 2 args= (3, 4, 5, 6, 7)
# **args的使用 def fun(x, y, **args): print("x=", x) print("y=", y) print("args=", args) fun(1, 2, c=3, d=4, e=5, f=6, g=7)
输出为:
x= 1 y= 2 args= {'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7}
# 共同使用 def fun(x, y, *args, **kwargs): print("x=", x) print("y=", y) print("args=", args) print("kwargs=", kwargs) fun(1, 2, 3, 4, e=5, f=6, g=7)
输出为:
x= 1 y= 2 args= (3, 4) kwargs= {'e': 5, 'f': 6, 'g': 7}
可以看出 *args和 **args都具有储存多余变量的功能,区别在于 *args储存没有变量名的值,存储方式为元组;而 **args存储带有变量名的值,存储方式为字典。
-
Python中的*(星号)和**(双星号)完全详解
2019-03-19 22:45:42Python和C++不同,并没有指针,因此python中的*号作用和C++中不同。网上对于这方面的教程写的啰啰嗦嗦,一点不简明扼要。看的让人找不到重点。我这里快速的讲解一下。 1.最简单的不用细说,是一个乘法运算符号 a=...Python和C++不同,并没有指针,因此python中的*号作用和C++中不同。网上对于这方面的教程写的啰啰嗦嗦,一点不简明扼要。看的让人找不到重点。我这里快速的讲解一下。
1.最简单的不用细说,是一个乘法运算符号
a=1 b=2 c=a*b
输出c当然是1×2=2。相信这并非是大家关心的重点。
2.收集列表中多余的值
这样无需确保值与变量的个数相同。举例来说:
a,b,*c=[1,2,3,4]
c前面的*号主要是为了收集参数。这样输出a,是1;输出b,是2,输出c,是[3,4]。注意这里收集的是列表。
3.涉及到函数了,*号的作用在于收集参数或者分配参数。
具体用途,是看用*号的场合是在函数定义时还是函数调用时。(这句话至关重要!)
3.1 如果在定义函数时,*代表收集参数,**代表收集关键字参数。
3.1.1定义函数时,一个*的情况:
def myprint(*params): print(params)
这时候如果以如下方式调用myprint
>>> myprint(1,2,3)
则会输出:
(1,2,3)
因此作用是将调用时提供的所有值,放在一个元组里。
跟上面2里的有所区别,2里是收集列表中多余的参数,而这里是收集好参数,一起放进元组里面。
这种情况下,在函数定义时的形参里的*params后面,就最好不要再加入别的形参了,比如你定义成 def myprint(*params,x) ,调用的时候myprint(1,2,3),就会报错。因为这样python分不清哪个数据是给params的。如果你非要这么定义也行,不过在调用的时候,必须显示的指出哪个值是给x的。比如myprint(1,2,x=3),通过这种方式调用才不会出错。
3.1.2 定义函数时,两个**的情况:
对于之前参数是*params的情况,myprint并不能传入关键字参数。啥意思呢,就是仍然采取这种方式定义时:
def myprint1(*params): print(params)
这样是错误的:
>>> myprint1(x=1,y=2,z=3) #会报错
因为*号并不会收集关键字参数。所以需要如下方式修改,采用两个星号:
def myprint2(**params): print(params)
这样调用myprint2就不会有问题:
>>> myprint2(x=1,y=2,z=3)
会输出如下结果:
{'z':3,'x':1,'y':2}
得到一个字典。字典中元素的先后顺序取决于你的环境。
3.2 如果在调用函数时,*和**都是分配参数用的
3.2.1 调用函数时,一个*的情况:
例如,还是刚刚那个print函数
def myprint(x,y): print(x) print(y)
这下形参有两个了,但是我能不能只传入一个形参?
对,“调用函数时分配参数”跟“定义函数时收集参数”,反过来了!
假设你还有一个元组:
params=(1,2)
可以通过如下方式调用myprint函数:
>>> myprint(*params)
就可以输出:
1 2
3.2.2 调用函数时,两个**的情况:
和上面3.1.2很像,是分配字典的。
这回params是一个字典了:
params={'x':1,'y':2}
可以通过如下方式调用myprint函数:
>>> myprint(**params)
就可以输出:
1 2
3.3 如果在定义和调用函数时,都使用*号呢?
这样将值传递元组或字典,没有实际意义,不发挥收集参数或者分配参数的意义,不如不用。
-
Python3 * 和 ** 运算符
2018-06-05 10:54:37在 Python 中,* 和 ** 具有语法多义性,具体来说是有三类用法。1. 算数运算* 代表乘法** 代表乘方>>> 2 * 5 10 >>> 2 ** 5 322. 函数参数*args 和 **kwargs 主要用于...在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
1. 算数运算
* 代表乘法
** 代表乘方
>>> 2 * 5 10 >>> 2 ** 5 32
2. 函数形参
*args 和 **kwargs 主要用于函数定义。
你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可以写成 *ar 和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
python函数传递参数的方式有两种:
- 位置参数(positional argument)
- 关键词参数(keyword argument)
*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
- *args 表示任何多个无名参数,它本质是一个 tuple
- **kwargs 表示关键字参数,它本质上是一个 dict
如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。
>>> def fun(*args, **kwargs): ... print('args=', args) ... print('kwargs=', kwargs) ... >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d') args= (1, 2, 3, 4) kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
使用 *args
>>> def fun(name, *args): ... print('你好:', name) ... for i in args: ... print("你的宠物有:", i) ... >>> fun("Geek", "dog", "cat") 你好: Geek 你的宠物有: dog 你的宠物有: cat
使用 **kwargs
>>> def fun(**kwargs): ... for key, value in kwargs.items(): ... print("{0} 喜欢 {1}".format(key, value)) ... >>> fun(Geek="cat", cat="box") Geek 喜欢 cat cat 喜欢 box
3. 函数实参
如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:
>>> def fun(data1, data2, data3): ... print("data1: ", data1) ... print("data2: ", data2) ... print("data3: ", data3) ... >>> args = ("one", 2, 3) >>> fun(*args) data1: one data2: 2 data3: 3 >>> kwargs = {"data3": "one", "data2": 2, "data1": 3} >>> fun(**kwargs) data1: 3 data2: 2 data3: one
4. 序列解包
序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
>>> a, b, *c = 0, 1, 2, 3 >>> a 0 >>> b 1 >>> c [2, 3]
-
Python中 *args,**args的详细用法
2021-05-10 16:14:09*args 和 **kwargs主要用于函数定义,你可以将不定数量的参数传递给某个函数。 *args *args 不定参数(不定的意思是指,预先并不知道,函数使用者会传递多少个... print("formal arg:", farg) for arg in args: pr -
Python中的*args和**kwargs(python基础学习)
2018-06-11 15:09:00print("{} == {}".format(key, value)) def test_all(*args,**kwargs): print(args) print(kwargs) ∗把函数test_args()接受到的多个参数 'name','age','address','sex' ,打包成了元组 ('name','age','... -
Python中.*和.*?的区别
2019-05-20 15:00:48([1-9]\\d*|[一两二三四五六七八九十]{1,3})(百|千|)米.*") string="附近5100米" all_data_1=pattern_1.findall(string) all_data_2=pattern_2.findall(string) for data in all_data_1: print(data) for data in ... -
python print用法是什么
2020-12-09 05:19:46python print是用于打印输出的一个常见的函数,其使用语法是“print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)”。Python print() 函数描述print() 方法用于打印输出,最常见的一个函数。在 ... -
python *args 和**kwargs的用法
2017-11-16 17:52:59python *args 和**kwargs -
Python函数中参数前带*和**是什么意思?
2021-11-30 20:23:39前几天看了些python的代码,发现有些函数的参数前带有()号,有的甚至有两个()号,它们代表什么意思的? 解释 查阅资料后发现,参数前面加上* 号 ,意味着参数的个数不止一个,另外带一个星号*参数的函数传入的... -
Python中 * 的用途
2019-08-19 22:47:29在Python中, * 不仅仅代表乘法和列表复制,还常常用于函数的实参传递,和形参接收中。 作为实参传递 def div(a,b): print(a/b) div(*(1,2)) 这里, *号的作用是将可迭代序列拆开,作为函数的实参。 另外,... -
Python中*args、**args到底是什么、有啥区别、怎么用
2019-07-29 09:36:10相信学Python的小伙伴肯定有这样的尴尬局面,给一个函数不会用,原因是:不知道参数列表中的类型是什么意思, 比如初学者都会疑问的:*args和**args到底是怎么用。当你知道这个时,我猜你肯定能会用好多函数了! #*... -
python中关于幂运算符的运算顺序(3**2**3)
2019-05-25 16:16:49首先先提出问题,在python3中直接print(3**2**3)会输出什么呢? print(3**2**3) 输出结果为: 6561 你自己计算的答案是不是729呢? 如果是从左往右算的话 print(3**2) print(9**3) 也就是先算3的平方是9... -
python中*args,**args的区别
2019-04-13 15:36:47@TOC 先看示例1: def test(a,b,c=3,*args): print(a) print(b) print(c) print(args) ...也就是说args中保存的是没有利用的所有多余参数,保存方式为元组 再看示例2: def test(a,b,c=3,*ar... -
详解python中*号的用法!(含实例:零基础也看能懂)
2019-10-21 22:41:03今天为大家带来的内容是python中号的用法,文中通过代码给大家介绍了双星号(*)的用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下。 1、表示乘号 2、表示倍数,例如: def T(msg,time=1): print((msg+... -
Python中函数的参数 * 与 **
2019-07-08 10:08:12# Python中,形式参数加上 "*" 与 "**",成为动态参数。 # -1- "*"表示,函数可以接受多个参数,全部放入一个元祖中。 # 例子: def F(*args): print(args) # 输入 F(123, '456') # 输出 (123, '456') # -... -
python一个*和两个**代表什么意思???
2020-02-12 15:06:31有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。 一个星号*的变量args会存放所有未命名的变量参数,args为元组;...print(“a =”,a) print(“b =”,b) # *arg... -
Python输出函数print()总结(python print())
2018-07-22 16:34:42python版本:python3.5.1 ; IDE:pycharm2017.2 目录 一、print()函数概述 二、变量的输出 三、数据的格式化输出 ...print() 方法用于打印输出,是python中最常见的一个函数。 该函数的语法如下:... -
python中x[::]什么意思
2020-12-06 05:27:07切片 即list取值的一种方式, 取值是顾头不顾尾,注:切片的步长默认为1,不可为0例如:(推荐学习:Python视频教程)num2 = [1, 2, 3, 4, 5, ["a", "b", "c", ["d", "e"]]]print(num2[3:6]) # 这个切片表示获取从第三... -
python中print的使用方法
2021-02-09 19:10:24python中print的使用方法发布时间:2020-07-02 11:36:31来源:亿速云阅读:105作者:Leah这篇文章将为大家详细讲解有关python中print的使用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇... -
python中运算符*和**的作用-参数传递
2019-10-23 10:06:40**和*常常用于参数传递中的打包和解包,对函数传递的参数进行打包(打包成元组tuple或字典dictionary)和拆解(分解成单个元素),其中元组tuple的打包和解包使用单星号,字典dictionary的打包和拆解使用双星号 ... -
python 中*args和**kw详解
2016-03-22 21:16:35*args是非关键字参数,用于元组,**kw是关键字参数,用于字典 1.*args ... print('arg 1:%s ' % arg1) print('arg 2:%s ' % arg2) for eachArgNum in range(len(arg3) -
python *号的含义
2019-11-24 22:11:16python中*代表的含义 1、表示乘号 2、表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3、单个 *(1)、如:*parameter是用来接受任意多个... -
python参数*params、**params使用
2020-03-05 12:46:55目录 收集其余的位置参数:*params(输出元组) 收集关键字参数:**params(输出字典) 收集其余的位置参数:*params(输出元组) ...def print_params2(x,*params):#位置参数+收集位置参数... -
python中print输出格式有哪些
2020-12-02 05:03:22python中print输出格式有:1、可用加号连接【print("I " + "love " + "you")】;2、逗号连接会自动在连接串之间加上空格【print("I","love","you")】;3、也可直接连接。python中print输出格式有:Python中 ""与''是... -
Python中print的用法
2020-10-12 19:28:201.Python中print()函数的概述 print()方法用于打印输出,是python中最常见的一个函数。(python2中不是函数) 该函数的语法如下: print(*objects, sep=' ', end='\n', file=sys.stdout) 参数的具体含义如下: ... -
Python 列表前加 *号
2020-09-13 22:49:49列表前面加星号作用是将列表解开成两个独立的参数...print add(*data) >>> 7 #equals to print add(4, 3) data = {'a' : 4, 'b' : 3} print add(**data) >>> 7 #equals to print add(4, 3) Ref p -
Python中 *args 和 **kwargs 的区别
2016-10-13 14:34:26先来看个例子:def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------'if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c -
Python打印“*”的三角形
2020-05-11 21:09:22打印如下形状的三角形 def PrintTriangle(num): z = 1 for x in range(num): for y in range(num-1-x... print(" ",end = "") for m in range(z): print("*",end = "") z+=2 print("\n") PrintTriangle(int(i