Python中复制语法有6种

Basic Form

>>>spam = 'spam'

Tuple assignment

>>>spam, ham = 'spam', 'ham'

List assignmen

>>>[spam, ham] = ['spam', 'ham']

Sequence assignment

>>>a, b,c,d = 'spam'

Extended sequence unpacking(Python 3.X)

>>>a, *b = 'spam'
>>>a
's' >>>b # b赋值的结果是一个list
['p', 'a', 'm'] >>>a, *b, c = 'spam'
>>>a
's' >>>b
['p', 'a'] >>>c
'm'

对于这种复制方式,需要注意五点:

1 对于有*号变量的赋值结果,总是一个list,即使只包含一个元素

2 如果没有剩余的值赋给有*号的变量,那就是一个空list

>>>>a, b, c, *e, d = 'spam'
>>>a
's' >>>b
'p' >>>c
'a' >>>d
'm' >>>e # 与*变量的位置无关
[]

3 如果一条赋值语句中出现2个或者2个以上的*变量,会报错

4 变量个数和值的个数不匹配,也会报错

>>>a, b, c, d,e = 'spam'    # 值个数太少
ValueError: not enough values to unpack (expected 5, got 4) >>>a, b = 'spam' # 变量个数太少
ValueError: too many values to unpack(expected 2)

5 带*号变量不在一个sequence中,也会报错

>>>*a = 'spam'
SyntaxError: starred assignment target must be in a list or tuple >>>*a, = 'spam' # 这样OK
>>>a
['s', 'p', 'a', 'm']

Augmented assignment

>>>spams = 42
>>>spams += 42
>>>spams
84

Augmented assignment有3个优势:

1 简洁,可以少打字,哈哈

2 对于X += Y的形式,如果X是一个很复杂的对象,那么Augmented assignment对X只运行一次代码,而如果写成X = X + Y的形式,对于X的代码会运行两次

3 在某些情形下,X+=Y是一种优化

>>>L = [1, 2]
>>>L = L + [3, 4] # 这种形式的+会创建一个临时的,新的list,然后将L和要连接的数组copy进去,最后再把这个临时的,新的list赋值给L,效率低
>>>L
[1, 2, 3, 4] >>>L = [1, 2]
>>>L += [3, 4] # 这种形式直接改变L,不创建新对象,也不拷贝,效率高
>>>L
[1, 2, 3, 4]

Python中的赋值语法的更多相关文章

  1. 【转】Python中的赋值、浅拷贝、深拷贝介绍

    这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下   和很多语言一样,Python中 ...

  2. python中的赋值操作和复制操作

    之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...

  3. python中的赋值操作

    参考:https://www.cnblogs.com/andywenzhi/p/7453374.html?tdsourcetag=s_pcqq_aiomsg(写的蛮好) python中的赋值操作“=” ...

  4. Python中的赋值和拷贝

    赋值 在python中,赋值就是建立一个对象的引用,而不是将对象存储为另一个副本.比如: >>> a=[1,2,3] >>> b=a >>> c= ...

  5. Python中的赋值、深拷贝与浅拷贝(内存地址)

    Python中的赋值.深拷贝与浅拷贝(内存地址) 1.python中的可变对象与不可变对象 (1) 可变对象:dict,list def dict_test(): a = {} b = a print ...

  6. 全面了解Python中的特殊语法:filter、map、reduce、lambda。

    这篇文章主要介绍了Python中的特殊语法:filter.map.reduce.lambda介绍,本文分别对这个特殊语法给出了代码实例,需要的朋友可以参考下filter(function, seque ...

  7. python中的“赋值与深浅拷贝”

    Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...

  8. Python中的基本语法

    #Python的基本语法: #1.了解缩进 #Python中没有{}来表示一个代码块,但是Python使用缩进来完成区别代码框架 #那么在Python中一个缩进一般等于4个空格,当然你也可以使用TAB ...

  9. python中的赋值和深浅拷贝

    python中,A object  = B object  是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个对象在内存中的位置 . 此时当B对象里面的内容发生更改的时候,A对象也自然而然的 ...

随机推荐

  1. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  2. 免安装版MySQL8数据库的安装

    [环境准备] PC版本:Windows10企业版.64位操作系统 数据库:MySQL8.0.12-win64.zip免安装版 [彻底卸载已安装的MySQL数据库] 由于系统中MySQL数据库的卸载不彻 ...

  3. sql 优化的几种方法

    .对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. .应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而 ...

  4. SQL Server 2012 - 开窗函数

    -- 开窗函数:在结果集的基础上进一步处理(聚合操作) -- Over函数,添加一个字段显示最大年龄 SELECT * , MAX(StuAge) OVER ( ) MaxStuAge FROM db ...

  5. ElasticSearch 集群安装,简单使用

    http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html https://gith ...

  6. python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/

    Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...

  7. Python语言发展的关键时间节点

    1989年:Python想法的产生 1991年:发布最早的Python可用版本 2000年:发布Python2.0 2010年:发布Python2.x系列的最后一个版本,主版本号为2.7 2008年: ...

  8. java-执行流程控制语句

    就像有知觉的生物一样,程序必须在执行的过程中控制它的世界,并做出选择.java使用执行流程控制语句做出选择. 1.选择语句 if if(布尔表达式){ 业务逻辑1; }else{ 业务逻辑2: } s ...

  9. 自定义view实现圆角图片

    前两天想实现一个圆角图片的效果,通过网络搜索后找到一些答案.这里自己再记录一下,加深一下自己的认识和知识理解. 实现圆角图片的思路是自定义一个ImageView,然后通过Ondraw()重绘的功能,将 ...

  10. SpaceVim 语言模块 dart

    原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模块 语法检查及代码格式化 安装 dart-repl 快捷键 ...