导入
语句和标识符
了解我们尚未涵盖的各类语句,并初步认识 Python 中的标识符概念。
一些 Python 语句的说明
本节介绍之前未涵盖的 Python 语句,或具有更多选项的语句。让我们逐一了解:
1. import 语句:
import module会导入指定模块中的所有名称,但使用这些名称时必须以module.的形式前缀。这是为了避免从多个模块导入相同名称时产生冲突。from module import names会导入指定的名称,使用时无需前缀module.。如果names替换为通配符*,则表示导入模块中所有名称。import module as name会导入模块中的所有名称,但使用时必须以name.前缀。from module import name1 as name2导入name1,但将其重命名为name2。
1from math import sqrt # 导入 math 模块 2 3x = 16 # 给 x 赋值 4sqrt_num = sqrt(x) # 使用内置的 sqrt 函数 5print(sqrt_num) # 显示结果
2. assert expression1, expression2
- 如果
expression1为真,则不执行任何操作;如果为假,则抛出AssertionError异常。可选的expression2会被用作异常信息。 assert语句可视为“可执行文档”。它可用于函数开头声明参数要求,也可用于中间或末尾断言刚刚计算的结果。
1mystr = "Hello World" 2assert(mystr == "Hello Word") # 因两者不相等,会引发断言错误
3. var1, ..., varN = expr1, ..., exprN
- 上述语句称为 同时赋值。左侧的变量将被赋予右侧表达式的值。需要注意的是,变量数量必须与表达式数量 完全一致。
1mystr = "Hello" 2s1, s2, s3, s4, s5 = mystr # s1=H, s2=e, s3=l, s4=l, s5=o 3print(s1, s2, s3, s4, s5)
4. break
- 如果
break在while或for循环中执行,将导致循环立即退出。 - 如果在嵌套循环中执行
break,仅退出最内层包含break的循环。 - 若循环因
break退出,则后续的else子句不会被执行。(这在 Python 中较为特殊,因为循环可以带有else子句。)
1for x in range(1, 10): 2 if x == 3: 3 break # 将终止 for 循环 4 print(x)
5. continue
- 如果
continue在while或for循环中执行,循环体中剩余的语句将被跳过,控制权返回到循环顶部(while循环返回条件判断处,for循环则进入下一个迭代值)。
1for x in range(1, 10): 2 if x > 3 and x < 8: 3 continue # 将跳过当前循环索引 4 print(x)
6. del 变量
del语句会使变量不再存在(变为未定义状态)。
1mystr = "Hello World" 2print(mystr) # 输出 Hello World 3 4del mystr 5print(mystr) # 会报错:mystr 未定义
7. else
while和for循环后都可以跟else子句。当循环正常结束时,else块中的代码会被执行;但如果循环是由于break退出的,则else不会执行。这是一种不常见的结构,用途并不明确。
1for x in range(1, 5): 2 print(x) 3else: # 没有 break 语句,因此会执行 4 print("Final")
8. exec(arg)
exec(arg)用于执行一个字符串、字节串或代码对象arg。代码对象不在本课程范围内。exec实际上是一个函数,但其返回值为None,因此通常像语句一样使用。- 如果
arg可能包含恶意或有害代码,请勿使用exec。
1num = 10 2exec('print(5+num)') # 执行加法运算,输出 15
9. nonlocal 变量
- 函数可以在其他函数内部嵌套定义。默认情况下,内部函数可以访问外部函数的变量,但不能修改它们。如果内部函数声明某些变量为
nonlocal,则既可以访问也可以修改这些变量。 - 规则与局部变量和全局变量非常相似。
1def outer(): 2 temp = 5 3 4 def inner(): 5 nonlocal temp # 使用 nonlocal 关键字 6 temp = 10 # 修改 temp 的值 7 print("inner:", temp) 8 9 inner() 10 print("outer:", temp) 11 12outer()
10. pass
pass语句不执行任何操作。当语法要求存在语句但无具体操作时,偶尔会用到。- 三个点号(
...)与pass等价。
1for x in range(1, 5): 2 pass # 不做任何事,循环直接结束 3print("Done")
11. print(expr1, ..., exprN, sep=sepString, end=endString, file=outputFile)
print语句会计算并打印表达式,各表达式之间用sepString分隔,最后以endString结尾,并输出到outputFile。- 关键字参数
sep、end和file可省略,分别默认为' '(单个空格)、\n(换行符)和stdout。
1num = 50 2print(num, end='.00')
12. raise
raise Exception抛出指定的异常,该异常之后可能由try-except语句捕获处理。Python 提供了大量内置异常类型,也可以通过继承Exception类来自定义异常。raise Exception(expression)抛出指定异常,并将表达式的结果作为异常消息。- 在
except块中单独使用raise会重新抛出当前捕获的异常。
1for x in range(1, 5): 2 if x == 2: # 当 x 等于 2 时,抛出异常 3 raise Exception("抱歉,此数字不允许")
标识符简介
标识符 以字母或下划线开头,可包含字母、下划线和数字。大小写敏感,支持 Unicode 字符。
按惯例,类名以大写字母开头,其他名称则不以大写字母开头。
在类中,通常希望拥有 私有 实例变量,即只能在类内部访问或修改的字段。Python 中没有真正意义上的私有机制。因此,一些程序员采用约定:在希望设为私有的变量名前加一个下划线。若希望更严格地私有化,有时会使用两个下划线。语言定义的特殊名称通常以双下划线开头和结尾。