Python/cpython中的简单语句详解

Python/cpython中的简单语句详解

cpython cpython: 是Python编程语言的官方源代码仓库,包含Python解释器和标准库的实现。 cpython 项目地址: https://gitcode.com/gh_mirrors/cp/cpython

什么是简单语句

在Python编程语言中,简单语句(Simple statements)是指那些可以在一行内完整表达的语句。Python语法允许在一行中使用分号分隔多个简单语句。简单语句是Python语法中最基础的构建块之一,它们构成了程序的基本执行单元。

简单语句包含多种类型,每种类型都有其特定的语法和用途:

  • 表达式语句
  • 赋值语句
  • 增强赋值语句
  • 带注解的赋值语句
  • pass语句
  • del语句
  • return语句
  • yield语句
  • raise语句
  • break语句
  • continue语句
  • import语句
  • global语句
  • nonlocal语句
  • 类型语句

表达式语句

表达式语句是Python中最简单的语句形式,主要用于计算和输出值,或者调用函数(特别是那些不返回有意义结果的函数,在Python中这类函数返回None)。

表达式语句的语法非常简单:

expression_stmt: starred_expression

在交互模式下,如果表达式的值不是None,Python会使用内置的repr()函数将其转换为字符串并输出到标准输出。这使得交互式编程非常方便,可以立即看到表达式的结果。

赋值语句详解

赋值语句是Python中最常用的语句之一,用于将名称绑定到值,或者修改可变对象的属性或元素。

基本语法

赋值语句的基本语法如下:

target_list = expression

其中target_list可以是一个或多个目标,用逗号分隔。Python支持多种形式的赋值目标:

  1. 简单变量名(标识符)
  2. 元组或列表形式的多个目标(解包赋值)
  3. 属性引用(如obj.attr)
  4. 下标引用(如list[index])
  5. 切片(如list[start:end])
  6. 带星号的目标(用于扩展的可迭代对象解包)

赋值规则

Python的赋值操作遵循以下规则:

  1. 首先计算右边的表达式
  2. 然后按照从左到右的顺序将结果分配给目标列表
  3. 如果目标是可变对象的一部分(属性、下标或切片),则由该对象决定如何执行赋值

解包赋值

Python支持强大的解包赋值功能:

# 简单解包
a, b = 1, 2

# 带星号的解包
first, *middle, last = [1, 2, 3, 4, 5]

解包赋值时,右边的可迭代对象必须包含足够数量的元素来匹配左边的目标(考虑星号目标可以匹配零个或多个元素)。

变量绑定规则

当目标是一个简单名称时:

  1. 如果名称没有在global或nonlocal语句中声明:
    • 名称绑定到当前局部命名空间中的对象
  2. 如果名称在global或nonlocal语句中声明:
    • 名称绑定到全局或外层命名空间中的对象

属性赋值注意事项

当对类实例的属性进行赋值时,有一个重要的行为需要注意:

class MyClass:
    x = 10  # 类属性

obj = MyClass()
obj.x = obj.x + 1  # 这会创建一个实例属性x,值为11,类属性x保持不变

在这个例子中,右边的obj.x访问的是类属性(因为实例属性还不存在),而左边的obj.x则创建一个新的实例属性。

增强赋值语句

增强赋值语句(如+=、-=等)将二元操作和赋值组合在一个语句中:

augmented_assignment_stmt: augtarget augop (expression_list | yield_expression)

常见的增强赋值操作符包括:

+=  -=  *=  /=  //=  %=  **=
&=  |=  ^=  >>=  <<=

增强赋值与普通赋值的区别在于:

  1. 目标只被计算一次
  2. 操作可能就地修改对象(如果对象支持)
  3. 左边在右边之前被计算

例如,a[i] += f(x)会先查找a[i],然后计算f(x),执行加法,最后将结果写回a[i]。

带注解的赋值语句

Python支持在赋值时为变量添加类型注解:

annotated_assignment_stmt: augtarget ":" expression ["=" (starred_expression | yield_expression)]

注解赋值与普通赋值的区别在于:

  1. 只允许单个目标
  2. 可以包含类型注解
  3. 在类和模块作用域中,注解会被收集到特殊的注解作用域中

注解不会影响运行时的行为,主要用于静态类型检查和IDE支持。

assert语句

assert语句用于在程序中插入调试断言:

assert_stmt: "assert" expression ["," expression]

简单形式assert expr等价于:

if __debug__:
    if not expr: raise AssertionError

带消息的形式assert expr1, expr2等价于:

if __debug__:
    if not expr1: raise AssertionError(expr2)

在优化模式下(使用-O选项),assert语句不会生成任何代码。

pass语句

pass语句是一个空操作,当它被执行时什么也不发生。它通常用作语法上的占位符:

pass_stmt: "pass"

示例:

def empty_function():
    pass

class EmptyClass:
    pass

del语句

del语句用于删除名称或对象的元素:

del_stmt: "del" target_list

del可以删除:

  • 变量名(从命名空间中移除绑定)
  • 列表中的元素
  • 字典中的键
  • 对象的属性

删除名称时,如果名称未绑定,会引发NameError异常。

总结

Python的简单语句虽然语法简单,但功能强大且灵活。理解这些语句的工作原理对于编写高效、清晰的Python代码至关重要。从基本的表达式和赋值,到更高级的解包和增强赋值,这些构建块构成了Python编程的基础。

cpython cpython: 是Python编程语言的官方源代码仓库,包含Python解释器和标准库的实现。 cpython 项目地址: https://gitcode.com/gh_mirrors/cp/cpython

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羿晴汝Gillian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值