python zip、*、**理解
zip函数
zip()一般传入可迭代对象(不止一个),将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象(python2返回元组),需要手动使用tuple、list等序列转换成可使用的对象。
打包
# 传入一个可迭代对象
data = [i for i in range(3)]
print(list(zip(data)))
# 传入多个可迭代对象,元素个数相对应
data = [i for i in range(3)]
data2 = [j for j in range(3)]
print(list(zip(data, data2)))
# 传入多个可迭代对象,元素个数不对应,会选取元素最少的可迭代对象作为对应
data = [i for i in range(3)]
data2 = [j for j in range(4)]
print(list(zip(data, data2)))

以最后一个为例,流程为
[0, 1, 2]
[0, 1, 2]
一一对应,转变为
[(0, 0), (1, 1), (2, 2)]
解包
只需要在打包的对象前面添加*即可
data = [i for i in range(3)]
data2 = [j for j in range(4)]
ret = list(zip(data, data2))
print(ret)
print(*ret)
# 恢复成原来的两个可迭代对象,不过是以列表格式
print(list(zip(*ret)))

*在不同场景下的区别
1.在非函数或方法中的参数中,类似于在zip中的,就是解包操作,将元组解开为多个元组,也可以再进行zip还原成原来的可迭代对象
print( list(zip(*ret)))
2.在函数或方法的参数中的*
作为可变参数,传入时以元组形式呈现
def test(m, *args):
print(m, args)
test('sa', 'asd', 'qwe')

需要注意的是,目前发现当必选参数添加形参名称时,后面的可变参数无法正常设置,如下所示
test(m='sa', 'asd', 'qwe')
** 的使用场景
一般出现在函数或方法的可变关键字参数,以字典形式呈现
def test(m, **kwargs):
print(m, kwargs)
test(1, a=1,b=2)

python zip、*、**理解的更多相关文章
- python zip文件密码爆破
#!/usr/bin/env # coding=UTF-8 import zipfile import threading import os import sys class CrackZip: d ...
- python zip函数(11)
一.zip函数描述和使用 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,返回的结果可以直接强转为list列表,这样做的好处是节约了不少的 ...
- python zip()函数
描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符 ...
- Python zip Python zip函数
zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的li ...
- 【转】Python zip() 函数
转自:http://www.runoob.com/python/python-func-zip.html 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回 ...
- python property理解
一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.sette ...
- Python ZIP 文件创建与读取
Automate the Boring Stuff 学习笔记 02 Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 Zip ...
- python zip()
>>> help(zip) Help on built-in function zip in module __builtin__: zip(...) zip(seq1 [, seq ...
- python 深入理解 赋值、引用、拷贝、作用域
在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...
随机推荐
- js运算符、 流程控制 、函数、内置对象、BOM与DOM操作
运算符 # 1.算术运算符 var x=10; var res1=x++; '先赋值后自增1' var res2=++x; '先自增1后赋值' # 2.比较运算符 弱等于:自动转换类型 '5' == ...
- k8s系列--node(k8s节点介绍,新增节点,移除节点)
一.简介 Node是Pod真正运行的主机,可以是物理机也可以是虚拟机. Node本质上不是Kubernetes来创建的, Kubernetes只是管理Node上的资源. 为了管理Pod,每个Node节 ...
- 用了Scrum越来越累?这三点帮你走出困境
摘要:你有没有一种感觉,团队用了Scrum之后,工作任务越来越多,加班越来越严重?有?好兄弟,这篇文章正好能帮你~ 本文分享自华为云社区<用了Scrum越来越累?这三点帮你走出困境>,作者 ...
- 『忘了再学』Shell基础 — 15、环境变量(三)
目录 1.LANG语系变量介绍 2.如何查看Linux中支持的语系 3.查看当前系统的语系 4.总结 提示: 在Linux系统中,环境变量分为两种.一种是用户自定义的环境变量,另一种是系统自带的环境变 ...
- Git标签用法
我们通常会在项目开发到一定阶段时给代码打上标签. 1.Git查看所有标签及其描述信息 git tag -l -n 2.Git创建标签 创建标签并添加描述信息 git tag -a v1.0.0 -m ...
- CentOS切换用户命令su or su+username
1.打开终端,提示符为"$",表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为"#". 注意, ...
- 入坑KeePass(三)安全设置完后后留存
1.文件> 数据库设置 > 安全 迭代次数改成500000 2.工具 > 选项 2.1.安全 2.2.策略 2.3.集成 2.4高级
- centos 修改PHP默认版本
命令行输入export PATH=/usr/local/php/bin:$PATH 然后回车.
- 28.MysQL的日志管理及备份与恢复
MySQL 索引.事务与存储引擎 目录 MySQL 索引.事务与存储引擎 MySQL 索引 索引的概念 索引的作用及副作用 索引的作用 索引的副作用 创建索引的原则依据 索引的分类和创建 普通索引 唯 ...
- Vscode标题栏出现【不受支持】提示的完美解决方案
安装Fix VSCode Checksums code --install-extension lehni.vscode-fix-checksums 打开命令面板,快捷键 Ctrl + Shift + ...