找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 2033|回复: 3

Python有哪些独有的关键词?

[复制链接]

5

主题

8

回帖

534

积分

资深程序员

积分
534
发表于 7-13-2025 21:45:11 | 显示全部楼层 |阅读模式
本帖最后由 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
- 删除变量引用或容器中的元素
x = 1
del x # x 不再存在
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


(如有遗漏错误欢迎指出!)

10

主题

57

回帖

638

积分

版主

积分
638
发表于 7-13-2025 23:14:01 | 显示全部楼层
补充一个lambda,生成匿名函数
square = lambda x: x * x
print(square(5))

24

主题

58

回帖

1527

积分

版主

积分
1527
发表于 7-15-2025 23:07:58 | 显示全部楼层
不知道有没有人有同感,python的程序总让我觉得比其他语言“美丽”一点,就是有点像伪代码又没有伪代码的廉价感,感觉这些小关键字功不可没

2

主题

7

回帖

241

积分

中级程序员

积分
241
发表于 7-22-2025 23:37:31 | 显示全部楼层
加一个wulrus operator,边赋值边等于
if a := 3:
    pass
print(a)
会输出3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 4-3-2026 10:26 , Processed in 0.075555 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表