|
本帖最后由 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
(如有遗漏错误欢迎指出!)
|
|