本帖最后由 BZR 于 7-16-2025 15:46 编辑
Python独有的关键词
Python的独特之处在于它有其他主流编程语言中没有的关键词。
(当然,也可能更在于它像不同于所有其他语言、伪代码一样的编写方式:Java:
for (String item : list) {
System.out.println(item);
}
C++:
for (auto& item : list) {
std::cout << item << std::endl;
}
C#:
foreach (var item in list)
{
Console.WriteLine(item);
}:
Python:
for item in list:
print(item)
Pseudocode:
for each item in list:
print item
不能说是差不多,只能说是像得不能再像了)
回归正题,以下是一些Python特有的关键词:
1. as
- 用作别名绑定
- 允许为模块或者上下文管理器赋予一个更短或更据描述性的名称
- 在大型项目中避免命名冲突
通常与import一起使用(import ... as ...):import numpy as np # 给numpy模块起名,方便后续调用
也可以与with一起使用(with ... as ...)(详见下文):with open('file.txt', 'r') as f: # 给file.txt文件起名,方便读取
content = f.read()
2. with
- 用于上下文管理协议(Context Management Protocol),确保资源正确地获取和释放
还在这样做?f = open('World Cup 2022.txt', 'r') # 中A
txt = f.read()
f.close()
print(txt)
可以试试用with ... as ...with open('World Cup 2022.txt', 'r') as f:
txt = f.read()
用了with之后,打开的文件会在代码结束后自动关闭,不需要再手动 f.close() 了
3. yield
- 用于生成器函数(Generator),暂停函数执行并返回一个值,下次调用时从暂停处继续
- 普通函数使用return返回结果,函数执行完毕后立即终止;而使用yield返回数据时,函数可以暂停,并在下次调用时从暂停处继续执行
例如:def count_up_to(n):
i = 1
while i <= n:
yield i # 每次yield返回i,并暂停
i += 1
generator = count_up_to(3)
for i in range(3):
以上代码的输出就是:
1
2
3
当我们调用count_up_to(3)时,函数不会立即执行,而是返回一个生成器对象。每次调用next(generator),函数执行到yield处暂停,并返回当前值。下次调用next()时,函数从yield之后继续执行,直到再次遇到yield或者函数结束。
当然,用yield语法时,也可以直接用for循环遍历生成器:def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
for num in count_up_to(3):
print(num)
以上代码的输出和前面一个也是一样的。那么为什么需要yield呢?假设你要处理一个超大文件,如果一次性读取所有行,内存可能会爆炸。所以使用yield逐行读取,这样即使文件很大,内存也只会占用当前处理的行,而不是全部加载出来。
注:JavaScript有 function* 和 yield,但Python的生成器更早出现。
4. pass
- 空操作占位符,表示啥都不做
- 这样避免语法错误,因为Python不允许空代码块class AbstractClass:
def something(self):
pass
5. del
- 删除变量引用或容器中的元素nList = [1, 2, 3]
del nList[0] # nList -> [2, 3]
注:JavaScript使用delete删除对象属性。
6. global
- 在函数内声明变量为全局变量str1 = 'Hello world!'
def set_str():
global str1
str1 = 'Bye'
7. elif
想不到吧,这个简单的else if缩写也是Python独有的(当然,C/Java用else if)。这个关键词可以简化多条件分支。if x > 0:
print('positive')
elif x < 0:
print('negative')
else:
print('zero')
8. nonlocal
- 在嵌套函数中修改闭包(Closure)中的变量(即非局部也非全局)
- 用英文的角度理解:non(不) + local(本地的) = 把一个东西变得不局部,差不多就是这意思def outer():
x = 1
def inner():
nonlocal x
x += 1
以上代码x就会被inner函数修改为2。
和global区分一下:
- global用于修改全局变量
- nonlocal用于修改闭包变量
注:JavaScript直接支持闭包变量修改,不需要nonlocal
(如有遗漏错误欢迎指出!)
|