Python基础手册17——简单语句

Python语句

Python的语法实际上是由语句和表达式组成的(语句使用关键字来组成,只执行某种操作,可以没有返回值;而表达式没有关键字,是使用数学运算符构成的算数表达式,是一个单纯的运算求值过程,总是返回值。表达式本身可以作为表达式语句,也能作为赋值语句的右值或if语句的条件等,所以表达式可以作为语句的组成部分,但不是必须成分)。表达式处理对象并嵌套在语句中,语句编码操作实现程序的逻辑关系。语句还是对象生成的地方。

简单语句

简单语句由一个逻辑行构成,在由分号分隔的单个物理行上可能存在几个简单语句。常见的简单语句有赋值语句、表达式语句、assert 语句、del 语句、break 语句、continue 语句等。这里我们只简单的介绍表达式语句、赋值语句和del 语句,其他语句会在后续对应的章节详细介绍。



一、赋值语句

赋值语句用于(重新)将对象绑定到变量,以及修改可变对象的属性或项目。

Python赋值语句会把对象的引用存储在变量名或数据结构的元素内。赋值语句总是建立对象的引用值,而不是复制对象。因此,Python的变量更像是指针(引用),而不是数据存储区域。

Python会在首次将值(即对象的引用)赋值给变量时创建其变量名。有些(并非全部)数据结构元素也会在赋值时创建。一旦赋值了,每当这个变量名出现在表达式中,就会被其所引用的值取代。变量名在引用前必须先赋值,使用尚未进行赋值的变量名是一种错误。

本节中,我们关心的是 = 语句,但是在Python中,赋值语句有一些隐性的操作。例如,模块导入、函数和类的定义、for循环变量以及函数参数全都是隐式赋值运算。因为赋值语句在任何出现的地方的工作原理都相同,所有这些方式都是在运行时把变量名和对象的引用绑定起来而已。

赋值语句的形式:


1、基本形式(将对象赋值到单个目标)

目标是变量名:

如果变量名没有出现在当前代码块的 global 或 nonlocal 语句中:变量名绑定到当前局部命名空间中的对象。否则:变量名绑定到当前全局命名空间的对象或由 nonlocal 决定的外部命名空间。

如果名称已绑定,则名称将使用新的对象重新被绑定。这可能导致先前绑定到名称的对象的引用计数达到零,导致对象被释放,并且它的析构函数(如果它有一个)被调用。


目标是属性引用(对象):

引用中的主表达式是计算。它产生的对象应该具有一个可以赋值的属性;如果情况不是这样,则抛出 TypeError 异常。然后要求该对象将被赋值的对象赋值给给定的属性;如果不能做此操作,它会抛出一个异常(通常是AttributeError,但不一定)。


2、多目标赋值

Python赋值对象的引用值(最右边的对象)给左边的所有目标。


3、序列赋值

在Python中 = 左侧可以接收编写在元组或列表中的变量, = 右侧可以接受使任何类型的序列,只要和左侧序列元素长度相等即可,不然会产生错误。Python会按照位置把右侧序列中的元素和左侧序列中的变量从左至右相匹配,然后每一次赋值一个值。

在赋值运算中,在语句执行时,Python会建立临时的元祖,来存储右侧变量原始的值,分解赋值语句也是一种交换变量的值,且不需要自行创建临时变量的方法:右侧的元组会自动记住先前的变量的值。

序列赋值甚至可以赋值嵌套序列,而Python会根据其情况分解其组成部分。在这个过程中,左侧对象的序列嵌套的形状必须符合右侧对象的形状。


扩展的序列赋值

序列赋值通常要求左侧变量数目与右侧主体的项数完全一致。如果长度不同的话,将会得到一个错误。但是一个带有星号的变量,可以在赋值目标中使用,以指定对于序列的一个更为通用的匹配 —— 将一个列表赋值给了带星号的名称,该列表收集了序列中没有赋值给其他变量的所有项。

带星号的变量可以出现在目标中的任何位置,包含该位置的每个未赋值的对象的一个列表都将赋值给它。当带星号的变量出现在中间,它收集其他列出的变量之间的所有内容。带星号的变量可能只匹配单个的项,但是,总是会向其赋值一个列表。如果没有剩下的内容可以匹配带星号的变量,它会被赋值一个空列表,不管该变量出现在哪里。

注意: 如果有多个带星号的名称,或者如果值少与没有带星号的名称,以及带星号的名称自身没有编写到一个列表或元祖中,都将引发错误。


4、增强赋值语句

增强赋值是在单个语句中组合运算符的赋值语句:

在Python中,每个二元表达式运算符都有对应的增强赋值形式:
X += Y, X -= Y, X *= Y, X /= Y, X //= Y, X %= Y,
X **= Y,X &= Y,X |= Y, X ^= Y, X <<= Y,X >>= Y


增强赋值语句有三个优点:

1、程序员输入减少。
2、左侧只需计算一次,因此增强赋值语句通常执行的更快(在完整形式 X = X + Y 中,X出现两次,必须执行两次)。

与正常赋值不同,增强的赋值在计算右侧之前计算左侧。例如,a[i] += f(x)首先查找a [i ],然后求值f(x)并执行加法,最后,将结果写回到a[i]。
3、优化技术会自动选择。

对于支持原处修改的对象而言,增强形式会自动执行原处的修改运算,而不是相比来说速度更慢的复制。

就增强赋值运算而言,在原处的运算可作为一种优化而应用在可变对象上。合并对于共享对象引用产生的副作用可能会更少,但是,通常会比对等的原处修改形式运行的更慢。合并操作必须创建一个新的对象,把左侧的赋值到列表中,然后再把右侧的赋值到列表中。想必而言,原处方法调用直接在一个内存块末尾添加项。


二、表达式语句

表达式语句用于计算和写入一个值,或者(通常)用来调用函数或方法。


在Python中,你可以只使用表达式作为语句(本身只占一行)。因为表达式结果不会存储,只有当表达式工作并作为附加的效果,这样才有意义。通常只有在交互模式提示符下打印值,或者调用函数或方法时,表达式才单独作为语句。


三、del 语句

删除是递归的,删除目标列表将递归删除列表中的每个对象,从左到右。


删除一个变量将从局部或全局命名空间中删除该变量的绑定,取决于变量是否出现在相同代码块的global 语句中。如果变量没有绑定,将抛出一个NameError 异常。

属性引用、下标和切片的删除将传递给原始的对象;切片的删除在一般情况下等同于赋予一个右边类型的空切片(但即使这点也是由切片的对象决定)。



《Python基础手册》系列:

Python基础手册 1 —— Python语言介绍
Python基础手册 2 —— Python 环境搭建(Linux)
Python基础手册 3 —— Python解释器
Python基础手册 4 —— 文本结构
Python基础手册 5 —— 标识符和关键字
Python基础手册 6 —— 操作符
Python基础手册 7 —— 内建函数
Python基础手册 8 —— Python对象
Python基础手册 9 —— 数字类型
Python基础手册10 —— 序列(字符串)
Python基础手册11 —— 序列(元组&列表)
Python基础手册12 —— 序列(类型操作)
Python基础手册13 —— 映射(字典)
Python基础手册14 —— 集合
Python基础手册15 —— 解析
Python基础手册16 —— 文件
Python基础手册17 —— 简单语句
Python基础手册18 —— 复合语句(流程控制语句)
Python基础手册19 —— 迭代器
Python基础手册20 —— 生成器
Python基础手册21 —— 函数的定义
Python基础手册22 —— 函数的参数
Python基础手册23 —— 函数的调用
Python基础手册24 —— 函数中变量的作用域
Python基础手册25 —— 装饰器
Python基础手册26 —— 错误 & 异常
Python基础手册27 —— 模块
Python基础手册28 —— 模块的高级概念
Python基础手册29 —— 包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容