IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python中的*和**的作用和含义 -> 正文阅读

[Python知识库]Python中的*和**的作用和含义

Python中的 * 和 ** 的作用和含义

python中的*和**被称为打包和解包参数,主要作用是能够让函数支持任意数量的参数,但是在函数定义和调用中,有着不同的使用场景,具体看下面的例子

打包参数

作为打包参数时,一般在函数形参定义时使用

  • 的作用:在调用函数时,将传给函数的所有位置的实参收集到一个元组中,并将该元组作为一个整体赋值给函数形参
def func(*args):
	print(args)

>>>func(1,2,3,4)
(1,2,3,4)

**的作用:在调用函数时,将传给函数的所有位置的实参收集到一个字典中,并将该字典赋值给形参

def func(**kwargs):
	print(kwargs)

>>>func(a=1,b=2)
{'a':1,'b':2}

解包参数

作为解包参数时,一般在函数实参传入时使用
*的作用:在函数调用时,*能够将list或元组解包成不同的参数

def func(a,b,c,d):
	print(a,b,c,d)

>>> args = (1,2,3,4)
>>> func(*args)
1 2 3 4
>>> args = [1,2,3,4]
>>> func(*args)
1 2 3 4

**的作用:在函数调用中,**会将已经打包好的字典,解包成独立的key-value对,并将解包后的参数传给函数形参

def func(a,b,c,d):
	print(a,b,c,d)

>>> kwargs = {"a":1,"b":2,"c":3,"d":4}
>>>func(**kwargs)
1 2 3 4

经典问题:func(*argc,**kwargc)中 *argc与 **kwargc的作用是什么?

有个上面的铺垫,显然这里*argc是tuple的打包参数,**kwargc是dict的打包参数
举个例子

def foo(*args,**kwargs):
    print ('args=',args)
    print ('kwargs=',kwargs)
    print ('**********************') 

if __name__=='__main__':
    foo(1,2,3)
    foo(a=1,b=2,c=3)
    foo(1,2,3,a=1,b=2,c=3)
    foo(1,'b','c',a=1,b='b',c='c')
args= (1, 2, 3)
kwargs= {}
**********************
args= ()
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 2, 3)
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 'b', 'c')
kwargs= {'a': 1, 'b': 'b', 'c': 'c'}
**********************

增加难度的例子

def foo(*args,**kwargs):
    print ('args=',args)
    print ('kwargs=',kwargs)
    print ('**********************') 

v = (1,2,4)
d = {'a':1, 'b':12}
# 需要注意当打包参数的输入本身就是一个整体的tuple或者tuple时,传给形参后其实是会再将其打包一次
foo(v)
foo(d)
foo(v,d)

输出

args= ((1, 2, 4),)
kwargs= {}
**********************
args= ({'a': 1, 'b': 12},)
kwargs= {}
**********************
args= ((1, 2, 4), {'a': 1, 'b': 12})
kwargs= {}
**********************

再增加难度的例子
在函数定义时:*表示打包,在函数体内部时,*表示的其实是解包

def foo(*argc,**kwargc):
	# 未解包参数
	print(argc)
	# 在函数体内解包后的参数
	print(*argc)

v = (1,2,4)
d = {'a':1,'b':2}
foo(v,d)

输出

((1, 2, 4), {'a': 1, 'b': 12})
(1, 2, 4) {'a': 1, 'b': 12}

再再再增加难度的例子
打包和解包参数并不能脱离函数而存在

c = {"name":'zhang',"age":2}

>>> **c # 打包和解包参数不能单独使用
>>> "Name:{name},Age:{age}".format(**c)
'Name:zhang, Age:2'
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:11:29  更:2021-10-06 12:12:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:54:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码