python 星号(*)的多种用途
作者:Sight Tech. 时间:2021-08-13 06:16:27
结论
概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。
单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集。
双**号,将被修饰的变量按键值对进行拆分, 对修饰的形式参数进行参数聚集。
修饰实例变量时
作用: 讲被修饰的实例变量或者可迭代对象进行拆分
def func3(a, b, c):
print("param a is {}, param b is {}, param c is {}".format(a, b, c))
if __name__ == '__main__':
arr1 = [1, 2, 3]
print(arr1, sep='\t') # [1, 2, 3]\t 正常输出
print(*arr1, sep='\t') # 1\t2\t3 每个数字中间以\t分割
arr2 = [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
print(list(zip(*arr2))) # [(1, 3, 5), (2, 4, 6), (3, 5, 7)] 二维数组的行转列
dictionary = {'a': 1, 'b': 2, 'c': 3}
print(dictionary, sep='\t') # {'a': 1, 'b': 2, 'c': 3}\t 正常输出
print(*dictionary, sep='\t') # a\tb\tc\t 每个字母中间以\t分割
print(func3(**dictionary)) # param a is 1, param b is 2, param c is 3
比较使用和不使用*号后产生的结果就可以发现,单*号将可迭代对象进行了拆分,按单个元素方式依次将数据传进方法。
配合其他方法使用可以优雅的完成矩阵的行转列操作。
双**号的使用,是将变量对象拆分成键值对的形式,所以只有dict类型可以使用。
注意上面的func3,他需要三个形参,但是我们只传入**dict_obj, 就完成了功能。
可迭代对象有:list, dict, tuple, generator, iterator
出现在方法的形式参数位置
作用: 放在参数列表的末尾, 作为不定长的参数列表的形参接受对象。 (可以类比Java的可变参数列表)
def func1(*args):
print("type", type(args)) # type <class 'tuple'>
print("all arguments: ", args) # all arguments: (1, 2, 3)
print("second argument: ", args[1]) # second argument: 2
def func2(**kw):
print("type", type(kw)) # type <class 'dict'>
print("all arguments: ", kw) # all arguments: {'a': 1, 'b': 2, 'c': 3}
print("second argument: ", kw['a']) # second argument: 1
if __name__ == '__main__':
a, b, c = 1, 2, 3
func1(a, b, c)
func2(a=a, b=b, c=c)
尽管函数func1的形参只有一个,但被传递三个参数,程序还是可以正常运行。
因为*args将三个参数以tuple形式存储,作为一个整体传递给方法func1。
同理,func2的**kw形参将传入的三个参数压成一个dict进行使用。
具体实验代码可以通过Github获得。
来源:https://www.cnblogs.com/sight-tech/p/13024882.html
标签:python,星号,
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python 执行shell命令并将结果保存的实例
2023-07-27 20:34:52
python使用py2neo创建neo4j的节点和关系
2021-09-25 01:03:28
![](https://img.aspxhome.com/file/2023/1/71391_0s.png)
python推导式的使用方法实例
2021-03-13 09:38:25
![](https://img.aspxhome.com/file/2023/9/78679_0s.png)
python OpenCV 实现高斯滤波详解
2022-11-22 16:40:34
![](https://img.aspxhome.com/file/2023/4/70084_0s.png)
再谈javascript图片预加载技术
2011-03-11 19:57:00
WAP2.0网页设计中的交互细节
2010-08-12 20:50:00
![](https://img.aspxhome.com/file/UploadPic/20108/12/01-47s.jpg)
kafka-python批量发送数据的实例
2023-04-24 04:40:23
Python计算斗牛游戏概率算法实例分析
2021-08-08 09:52:21
python中Flask Web 表单的使用方法介绍
2023-08-26 15:13:24
![](https://img.aspxhome.com/file/2023/8/90748_0s.webp)
MSSQL中递归SQL查询语句实例说明-
2011-09-30 11:42:43
line-height 属性的继承问题
2008-07-26 12:27:00
python 实现汉诺塔游戏
2021-06-28 10:47:51
![](https://img.aspxhome.com/file/2023/0/95770_0s.png)
python图形界面tkinter的使用技巧
2022-04-24 01:34:22
![](https://img.aspxhome.com/file/2023/5/85195_0s.png)
python对象转字典的两种实现方式示例
2023-12-06 15:47:05
使用python搭建Django应用程序步骤及版本冲突问题解决
2023-01-29 07:36:34
![](https://img.aspxhome.com/file/2023/1/63891_0s.jpg)
python学习数据结构实例代码
2023-09-20 22:56:32
Go语言实现文件上传
2023-07-08 18:26:38
python中__call__内置函数用法实例
2022-06-04 11:46:32
python的import 机制是怎么实现的
2021-02-22 14:39:11
Python使用JSON库解析JSON数据的方法
2021-09-24 13:35:10
![](https://img.aspxhome.com/file/2023/2/71492_0s.jpg)