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

Python有哪些独有的关键词?

[复制链接]

3

主题

3

回帖

237

积分

中级程序员

积分
237
发表于 7-13-2025 21:45:11 | 显示全部楼层 |阅读模式
本帖最后由 BZR 于 7-16-2025 15:46 编辑

Python独有的关键词
Python的独特之处在于它有其他主流编程语言中没有的关键词。
(当然,也可能更在于它像不同于所有其他语言、伪代码一样的编写方式:
  1. Java:
  2. for (String item : list) {
  3.   System.out.println(item);
  4. }
复制代码
  1. C++:
  2. for (auto& item : list) {
  3.   std::cout << item << std::endl;
  4. }
复制代码
  1. C#:
  2. foreach (var item in list)
  3. {
  4.   Console.WriteLine(item);
  5. }:
复制代码
  1. Python:
  2. for item in list:
  3.   print(item)
复制代码
  1. Pseudocode:
  2. for each item in list:
  3.   print item
复制代码
不能说是差不多,只能说是像得不能再像了)
回归正题,以下是一些Python特有的关键词:
1. as
- 用作别名绑定
- 允许为模块或者上下文管理器赋予一个更短或更据描述性的名称
- 在大型项目中避免命名冲突
通常与import一起使用(import ... as ...):
  1. import numpy as np # 给numpy模块起名,方便后续调用
复制代码
也可以与with一起使用(with ... as ...)(详见下文):
  1. with open('file.txt', 'r') as f: # 给file.txt文件起名,方便读取
  2.   content = f.read()
复制代码
2. with
- 用于上下文管理协议(Context Management Protocol),确保资源正确地获取和释放
还在这样做?
  1. f = open('World Cup 2022.txt', 'r') # 中A
  2. txt = f.read()
  3. f.close()
  4. print(txt)
复制代码
可以试试用with ... as ...
  1. with open('World Cup 2022.txt', 'r') as f:
  2.   txt = f.read()
复制代码
用了with之后,打开的文件会在代码结束后自动关闭,不需要再手动 f.close() 了

3. yield

- 用于生成器函数(Generator),暂停函数执行并返回一个值,下次调用时从暂停处继续
- 普通函数使用return返回结果,函数执行完毕后立即终止;而使用yield返回数据时,函数可以暂停,并在下次调用时从暂停处继续执行
例如:
  1. def count_up_to(n):
  2.   i = 1
  3.   while i <= n:
  4.     yield i # 每次yield返回i,并暂停
  5.     i += 1

  6. generator = count_up_to(3)
  7. for i in range(3):
复制代码
以上代码的输出就是:
1
2
3

当我们调用count_up_to(3)时,函数不会立即执行,而是返回一个生成器对象。每次调用next(generator),函数执行到yield处暂停,并返回当前值。下次调用next()时,函数从yield之后继续执行,直到再次遇到yield或者函数结束。
当然,用yield语法时,也可以直接用for循环遍历生成器:
  1. def count_up_to(n):
  2.   i = 1
  3.   while i <= n:
  4.     yield i
  5.     i += 1

  6. for num in count_up_to(3):
  7.   print(num)
复制代码
以上代码的输出和前面一个也是一样的。那么为什么需要yield呢?假设你要处理一个超大文件,如果一次性读取所有行,内存可能会爆炸。所以使用yield逐行读取,这样即使文件很大,内存也只会占用当前处理的行,而不是全部加载出来。
注:JavaScript有 function* 和 yield,但Python的生成器更早出现。

4. pass
- 空操作占位符,表示啥都不做
- 这样避免语法错误,因为Python不允许空代码块
  1. class AbstractClass:
  2.   def something(self):
  3.     pass
复制代码

5. del
- 删除变量引用或容器中的元素
  1. x = 1
  2. del x # x 不再存在
复制代码
  1. nList = [1, 2, 3]
  2. del nList[0] # nList -> [2, 3]
复制代码
注:JavaScript使用delete删除对象属性。

6. global
- 在函数内声明变量为全局变量
  1. str1 = 'Hello world!'
  2. def set_str():
  3.   global str1
  4.   str1 = 'Bye'
复制代码

7. elif
想不到吧,这个简单的else if缩写也是Python独有的(当然,C/Java用else if)。这个关键词可以简化多条件分支。
  1. if x > 0:
  2.   print('positive')
  3. elif x < 0:
  4.   print('negative')
  5. else:
  6.   print('zero')
复制代码

8. nonlocal
- 在嵌套函数中修改闭包(Closure)中的变量(即非局部也非全局)
- 用英文的角度理解:non(不) + local(本地的) = 把一个东西变得不局部,差不多就是这意思
  1. def outer():
  2.   x = 1
  3.   def inner():
  4.     nonlocal x
  5.     x += 1
复制代码
以上代码x就会被inner函数修改为2。
和global区分一下:
- global用于修改全局变量
- nonlocal用于修改闭包变量
注:JavaScript直接支持闭包变量修改,不需要nonlocal


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

6

主题

36

回帖

366

积分

版主

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

7

主题

19

回帖

451

积分

高级程序员

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

0

主题

2

回帖

61

积分

提示词程序员

积分
61
发表于 前天 23:37 | 显示全部楼层
加一个wulrus operator,边赋值边等于
  1. if a := 3:
  2.     pass
  3. print(a)
复制代码

会输出3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 7-24-2025 03:56 , Processed in 0.061770 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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