简单语句

简单语句由一个单独的逻辑行构成。多条简单语句可以存在于同一行内并以分号分隔。

表达式语句

表达式本身可以为语句。这在表达式为函数调用或文档字符串时特别有用。

表达式语句用于计算和写入值(大多是在交互模式下),或者调用一个过程。 表达式本身可以为语句。这在表达式为函数调用或文档字符串时特别有用。

>>> "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 "<stdin>", line 1, in <module>
AssertionError

>>> assert 1 == 2, 'one does not equal two'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
RuntimeError: No active exception to reraise

>>> raise IndexError
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError

>>> raise IndexError('Index out of bounds')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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