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.先来看个 ...
随机推荐
- UDP协议、操作系统、同步与异步、阻塞与非阻塞
UDP协议 # 客户端 import socket server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8 ...
- Windows IDEA Community 报错
运行时报错 "CreateProcess error=206,文件名或扩展名太长" 解决方法:https://plugins.gradle.org/plugin/ua.eshepe ...
- 多线程05:unique_lock详解
unique_lock详解 一.unique_lock取代lock_guard unique_lock是个类模板,实际应用中,一般lock_guard(推荐使用):lock_guard取代了mutex ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- PostGIS 扩展创建失败原因调查
Issue 升级 PostgreSQL 9.1 的一个集群,由于该集群用到了 PostGIS,在升级 PostgreSQL 时也需要升级一下 PostGIS.PostGIS 相关软件安装好后,在 Po ...
- CF335E Counting Skyscrapers 题解
提供一种最劣解第一且巨大难写的做法( Bob 显然真正的楼量可以达到 \(314!\),是没办法直接做的,再加上唯一方案的样例,可以猜测有简单的结论. 考虑当楼高度为 \(k(k<h)\) 时, ...
- 人脸识别库 face_recognition
face_recognition Windows系统环境下安装 默认环境:anaconda的python3.7版本,win10环境 第一步:安装dlib 从网络上下载: http://dlib.net ...
- 数组——JavaSE基础
数组 数组初始化 public class ArrayDemo02 { public static void main(String[] args) { // 静态初始化 int[] a = {1, ...
- 前端工作中用到的openlayers相关的公共方法
/** * 获取地图上的图层对象 * @param map 地图对象 * @param layerName 实例化图层时的name * @return {null}*/ getLayerByLayer ...
- JS:比较运算符
比较运算符有如下: 1.== 等于: 值相等 var a = "0"; var b = 1; var c = 0; console.log(a==0); //true consol ...