[Python3]星号*的打开方式
python中,* 号除了用来做数量乘法,还有其他的用处。
结论
- 概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。
- 单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集。
- 双**号,将被修饰的变量按键值对进行拆分, 对修饰的形式参数进行参数聚集。
修饰实例变量时
- 作用: 讲被修饰的实例变量或者可迭代对象进行拆分
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获得。
[Python3]星号*的打开方式的更多相关文章
- Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)
Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...
- windows中LNK文件打开方式恢复(每日一修(1))
相信有些用户曾试过错误地把LNK文件的打开方式更改其他文件,导致系统所有的快捷方式都失效.在vista与Windows7系统还不普遍使用的时候,相信大家会有点惊慌失措,不要紧,下面只要大家进行如下操作 ...
- iOS开发小技巧--相机相册的正确打开方式
iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...
- 解决Win10图片打开方式没有“Windows照片查看器”问题
1.打开注册表编辑器(Win+R,Regedit),定位至(建议修改前备份注册表): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewe ...
- Java循环删除集合多个元素的正确打开方式
首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 ArrayList<String> list = new ArrayList<String>(Ar ...
- 【转】无法将notepad++添加到打开方式列表中的解决办法
问题:想要设置notepad++为默认打开方式,却发现在点击browse找到notepad++.exe点击打开后没有在打开方式列表中找到notepad++. 原因:更新程序版本后程序的路径发生了变动. ...
- Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能. 如图: 代码: public class GridViewFile ...
- windows文件关联、打开方式列表之修改注册表攻略
这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文 ...
- 20160303 - 升级 Windows 10 版本 1511 后,文件夹默认打开方式为 cmd 的修复
问题描述:升级 Windows 10 版本 1511 (OS 内部版本 10586.122)后,文件夹的默认打开方式变成了cmd.双击任何一个文件夹,显示相关的提示错误信息如下: [Window Ti ...
随机推荐
- Java 创建并应用PPT幻灯片母版
幻灯片母版,可在幻灯片中预先存储设计模板信息,包括字形.占位符大小或位置.背景设计和配色方案等:对设定好的母版可应用于所有幻灯片,也可设计多个不同母版应用于不同幻灯片.下面通过Java代码示例介绍如何 ...
- Java笔记(day20-22)
IO流: 输入流.输出流 字节流.字符流:为了处理文字数据方便而出现的对象. (其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据,只不过,通过字节流读取了相对应的字节数,没有对这些字节直接 ...
- [hdu5348]图上找环,删环
http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给一个无向图,现在要将其变成有向图,使得每一个顶点的|出度-入度|<=1 思路:分为两步,(1 ...
- 手机app传统邀请码安装与免邀请码安装区别,如何选择呢?
App 邀请机制是每个产品几乎必做的功能点,它一般以两种形式存在:一是作为常置功能用于推荐,二是作为裂变活动用于邀请. 无论以哪种形式出现,都可以归为社交分享的一种表现方式.相较于营销推广,邀请好友机 ...
- 04JAVA基础数组
概念 存储同一种数据类型的多种元素的容器 数组初始化 动态初始化 设定数组长度,系统自动分配默认值 int[] arr = new int[3]; 静态初始化 给定数组默认值,系统自动分配长度 int ...
- 🏃♀️点亮你的Vue技术栈,万字Nuxt.js实践笔记来了~
前言 作为一位 Vuer(vue开发者),如果还不会这个框架,那么你的 Vue 技术栈还没被点亮. Nuxt.js 是什么 Nuxt.js 官方介绍: Nuxt.js 是一个基于 Vue.js 的通用 ...
- android progressbar 自定义图片匀速旋转
项目中需要使用圆形进度条进行数据加载的显示,所以需要两个步骤 1:自定义progressbar滚动图片 2:匀速旋转图片 步骤一:自定义progressbar图片 <ProgressBar an ...
- 黑马程序员_毕向东_Java基础视频教程——进制转换之负数二进制(随笔)
进制转换之负数二进制 负数的二进制表现形式 6 = 110 -6 : 其实就是 6 的二进制取反再 + 1 一个整数在内存中是占 4 个字节 **取反:将二进制里的 1 变成 0,0 变成 1. 以6 ...
- 浅谈产品模型(Profile)在程序设计中的作用
引言:物联网平台的一个重要功能就是资产管理,产品或者设备都可以看成是资产中组成部分,所以有时候说物联网平台可以进行产品管理和设备管理.通常应用物联网平台开发一套具有产品或者设备管理功能的系统的时候,必 ...
- Spring初学笔记(一):Spring IOC的理解
关于依赖注入.控制反转 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的 ...