简单语句 #################################### 简单语句由一个单独的逻辑行构成。多条简单语句可以存在于同一行内并以分号分隔。 表达式语句 ************************************ 表达式本身可以为语句。这在表达式为函数调用或文档字符串时特别有用。 表达式语句用于计算和写入值(大多是在交互模式下),或者调用一个过程。 表达式本身可以为语句。这在表达式为函数调用或文档字符串时特别有用。 .. highlight:: none :: >>> "This module contains SPAM-related functions." 赋值语句 ************************************ 赋值语句将变量与值关联起来。可通过序列解包同时给多个变量赋值,还可进行链式赋值。 :: # 简单赋值 >>> x = 42 # 链式赋值 x = y = z = 10 # 序列解包 >>> name, age = 'Gumby', 60 >>> a, *b, c = 0, 1, 2, 3 >>> a 0 >>> b [1, 2] >>> c 3 增强赋值语句 ==================================== 可使用运算符来增强赋值。在这种情况下,将对变量的当前值和指定的值执行运算符指定的运算,并将变量重新关联到结果。 :: >>> x = 2 # 将 x 的值翻倍 >>> x *= 2 >>> x 4 # 将 x 的值加 2 >>> x += 2 >>> x 6 assert 断言语句 ************************************ 断言语句用于判断一个表达式条件是否满足,如果不满足,则抛出 AssertionError 异常。 断言可以在条件不满足时直接返回错误,而不必等待程序运行后出现崩溃。例如代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。 :: import sys # 如果是 Linux 系统则运行下边的代码,否则报错 assert ('linux' in sys.platform) 设置错误信息: :: >>> assert 1 == 2 Traceback (most recent call last): File "", line 1, in AssertionError >>> assert 1 == 2, 'one does not equal two' Traceback (most recent call last): File "", line 1, in AssertionError: one does not equal two pass 语句 ************************************ pass 语句不执行任何操作,可用作占位符。在代码块中,如果不想执行任何操作,可让它只包含pass 语句。 :: def f(arg): pass del 语句 ************************************ del 语句用于解除变量和属性与值的关联,以及将数据结构(映射或序列)的一部分(如位置、切片)删除。不能直接使用 del 来删除值,因为值只能通过垃圾收集来删除。 注意:删除是递归定义的,与赋值的定义方式非常类似。 :: # 删除变量,实际上只是解除变量与值的关联 >>> del x # 删除序列中的一个元素 >>> del seq[42] # 删除序列中的一个切片 >>> del seq[42:] # 删除映射中的一项 >>> del map['foo'] return 语句 ************************************ return 语句会结束函数的执行并返回一个值。如果没有指定值,将返回 None。 :: def abc(nu): if nu > 0: return # 从当前函数返回 None else: return True # 从当前函数返回 True yield 语句 ************************************ yield 语句在语义上等同于 yield 表达式。 yield 语句暂停执行生成器,并返回一个值。生成器是一种迭代器,可用于 for 循环中。 :: yield 42 # 从当前函数返回42 raise 语句 ************************************ raise 语句引发异常。 如果不带表达式,raise 会重新引发当前作用域内最后一个激活的异常。 如果当前作用域内没有激活的异常,将会引发 RuntimeError 来提示错误。 :: >>> raise Traceback (most recent call last): File "", line 1, in RuntimeError: No active exception to reraise >>> raise IndexError Traceback (most recent call last): File "", line 1, in IndexError >>> raise IndexError('Index out of bounds') Traceback (most recent call last): File "", line 1, in IndexError: Index out of bounds break 语句 ************************************ break 语句用于跳出所属的循环(for 或 while),并继续执行循环后面的语句。 :: while True: line = file.readline() if not line: break print(line) continue 语句 ************************************ continue 语句类似于 break 语句,但只会跳出所属循环的当前迭代而不是整个循环,即跳到下一次迭代开头继续执行。 :: while True: line = file.readline() if line.isspace(): continue print(line) import 语句 ************************************ import 语句用于从外部模块导入名称(与函数、类或其他值相关联的变量)。这也包括 ``from __future__ import`` 语句,它们用于导入在未来的 Python 版本中将包含在标准中的功能。 基本的 import 语句(不带 from 子句)会分两步执行: 1. 查找一个模块,如果有必要还会加载并初始化模块。 2. 在局部命名空间中为 import 语句发生位置所处的作用域定义一个或多个名称。 :: import math from math import sqrt from math import sqrt as squareroot from math import * global 语句 ************************************ global 语句用于将变量标记为全局变量。在函数中,可使用它给全局变量重新赋值。使用 global 语句通常被视为糟糕的编程风格,因此应尽可能避免。 :: >>> def f(): ... global count ... count = 1 ... >>> f() >>> count += 1 >>> count 2 nonlocal 语句 ************************************ 类似于 global 语句,但引用内部函数(闭包)的外部作用域。换言之,如果你在一个函数内定义了另一个函数并返回它,这个函数就可引用并修改外部函数中的变量,条件是使用 nonlocal 来标记它。 :: def makeinc(): count = 1 def inc(): nonlocal count count += 1 return inc