Python中变量和变量赋值的几种形式

2022-12-29 0 581

书名镜像:两匹双龙 – 博客园

静态类别的词汇

python是静态类别的词汇,不需要新闻稿表达式的类别。

事实上,python中的表达式不管怎样用以留存两个统算数据第一类的门牌号。不论是什么统算数据第一类,在缓存中建立好统算数据对象后,都罢了把它的门牌号留存到表达式名中。因此表达式名是类别毫无关系的,但它对准的值是类别有关的,能是值、数组、条目、表达式、类、第一类之类。那些缓存第一类中都最少包涵3部分:第一类类别、第一类的提及算数(用以判断改第一类与否可被废弃物拆解器拆解)、第一类的值。

因此,a = 3中,表达式名a留存的是统算数据第一类3的门牌号,后能为其表达式两个数组a = “hello”,此时a留存的是”hello”数组的门牌号。在这个类别发生改变的过程中,a不管怎样修正了呵呵门牌号罢了。

表达式的重新命名艺术风格

python中的表达式重新命名时根本无法包涵位数、大小写字母、换行这四种类别的字符串,因此位数不能是首字符串。

除了许多有特定象征意义的表达式重新命名形式(目前那些内容介绍方可):前缀并前缀双换行的表达式,如__ name__,这种类别的表达式在python中有特定象征意义,归属于第一类的内建特性,以后学了类和第一类就知道了单换行前缀的表达式,如_x,此类表达式不会被from ModuleName import *的形式引入双换行前缀的表达式,如__x,此类表达式是类的邻近地区表达式或称作类的专有表达式,它会扩充成__classname_x

除此以外,除了同义词的重新命名形式:

自变量以全大写字符串表示一般表达式、表达式名、方式名都以小写字母结尾重新命名组件名、包名以全小写字母重新命名Pthreads以小写字母结尾

因为罢了同义词,因此没有强制性管制。

表达式表达式的四种形式技术细节

责任编辑说明python中表达式表达式的形式,并解释许多技术细节。前面除了一则该文说明python中按提及表达式的该文。

python中表达式表达式的四种形式。
Python中变量和变量赋值的几种形式

注意:python的值是不可变第一类,无法在原处修正统算数据,因此不支持自增、自减。

Python中变量和变量赋值的几种形式

其中(1)-(3)无需过多说明,唯一需要注意的是,当使用逗号的时候,python总会临时或永久地建立成tuple来留存元素,因此x, y = “long”, “shuai”在内部完全等价于(x, y) = (“long”, “shuai”)。

事实上,条目元素也能表达式给元组,或者元组表达式给条目,只要两边的序列元素个数能对应,无所谓左右两边的序列类别:

Python中变量和变量赋值的几种形式

对于(4)表达式形式,是序条目达式的行为,在python中,只要是序列,都能这样表达式。正如这里的表达式表达式情况等价于:

Python中变量和变量赋值的几种形式

如果换成其它的序列也一样。例如:

Python中变量和变量赋值的几种形式

但是表达式和序列中的元素必须一一对应。如果表达式名与元素个数不同,则会报错,除非只有两个表达式名,这表示将整个序条目达式给这个表达式。

如果想要将序列中的元素表达式给不等的表达式,能考虑先将序列进行切片。

Python中变量和变量赋值的几种形式

(5)的表达式形式则正好是让表达式名少于元素个数的形式。这种表达式形式称作序列解包(下文会专门说明这种表达式形式),多出来的元素会全部以条目的形式表达式给最后两个表达式名。正如这里等价于:

Python中变量和变量赋值的几种形式

下面两种表达式形式得到的结果是一样的,a是数组,b是条目,b都包涵3个元素:

Python中变量和变量赋值的几种形式

表达式的结果:

Python中变量和变量赋值的几种形式

(6)的表达式形式等价于:

Python中变量和变量赋值的几种形式

python表达式时,总是先计算”=“右边的结果,然后将结果按照表达式形式表达式给”=”左边的表达式。因此,这里的过程是先将”long”表达式给表达式b,再将b表达式给表达式a。

因为总是先计算右边,因此交换表达式非常的方便。

Python中变量和变量赋值的几种形式

(7)的表达式形式a += 3在结果上等价于a = a + 3,在其它词汇中这两种表达式形式是完全等价的,但在python中这种增强表达式的形式要比后者更高效率些,为什么效率要高许多,下文会稍作说明。在很大程度上来说,Python中只要是简化的形式,基本上都比更复杂的等价形式效率更高。

(8)的表达式形式((a, b), c) = (‘lo’, ‘ng’)是将序列进行嵌套序条目达式,将’lo’表达式给元组(a, b),ng’表达式给c,元组又进一步表达式a=‘l’, b=‘o’。这种表达式形式在python中很好用,特别是在表达式中表达式的时候,比如for循环和表达式参数:

Python中变量和变量赋值的几种形式

关于序列解包

在前面简单介绍了呵呵序列解包:

Python中变量和变量赋值的几种形式

当使用两个前缀表达式的时候,表示将序列中对应的元素全部收集到两个条目中(注意,总是两个条目),这个条目名为结尾的那个表达式名。*号能出现在任意位置处,只要表达式的时候能前后对应位置关系方可。

注意其中的几个关键字:序列、对应的元素、条目序列意味着可以是条目、元组、数组之类条目意味着只要收集不报错,表达式给解包表达式的一定是两个条目对应的元素意味着可能收集到0或任意个元素到条目。

不管如何,收集的结果总是条目,只不过可能是空条目或者只有两个元素的条目。

例如:
Python中变量和变量赋值的几种形式

两个注意事项:

因为序列解包是根据元素位置来进行表达式的,因此不能出现多个解包表达式如果将序列直接表达式给单个解包表达式时(即没有一般表达式),这个解包表达式必须放在条目或元组中
Python中变量和变量赋值的几种形式

之因此单个解包表达式时必须放在元组或表达式中,看下面两个等价的例子就很容易理解了:

Python中变量和变量赋值的几种形式

最后,序列解包是切片的便捷替代形式。能用序列解包的,都能用切片来实现,但切片要输入额外的各种字符串。例如:

Python中变量和变量赋值的几种形式

需要注意,解包返回的一定是条目,但序列切片返回的文本则取决于序列的类别。例如下面元组的切片返回的是元组,而不是条目:

Python中变量和变量赋值的几种形式

二元表达式表达式

python支持类似于a += 3这种二元表达式。比如:

Python中变量和变量赋值的几种形式

在python中的某些情况下,这种二元表达式表达式可能比一般的表达式形式效率更高些。原因有二:

二元表达式表达式中,a可能会是两个表达式,它只需计算评估一次,而a = a + 3中,a要计算两次。对于可变第一类,能直接在原处修正得到修正后的值,而一般的一元表达式表达式必须在缓存中新建立两个修正后的统算数据第一类,并表达式给表达式

第一点无需说明。关于第二点,看下面的例子:

Python中变量和变量赋值的几种形式

对于上面(1)和(4)的一元表达式表达式,先取得L,然后建立两个新的条目第一类,将L拷贝到新条目第一类中,并将4或5,6放进新条目第一类,最后表达式给L。这个过程中涉及到了几个步骤:新分配缓存、缓存中条目拷贝、放入新统算数据。

而(2)(3)是等价的,(5)(6)也是等价的,它们都是直接在缓存中的原始条目处修正,不会有拷贝操作,新建的统算数据第一类不管怎样两个元素。

按照理论上来说,确实二元表达式形式要效率高许多,但要注意的是,条目中留存的罢了各元素的提及,因此拷贝条目也不管怎样拷贝一点提及,这是微乎其微的开销。因此一元表达式和二元表达式的差距在这一点的性能上基本没差距,主要的差距还在于一元、二元表达式形式可能存在的表达式不同评估次数。

总的来说,使用二元表达式表达式通常能作为可变第一类表达式的一种优化手段。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务