深度解析Python关键字:掌握核心语法的基石(新版本35+4)

目录

关键字 keyword

关键字列表

kwlist

softkwlist 

关键字分类 

数据类型

True、False

None

运算类型

and、or、not

in

is

模块导入

import

辅助关键字

from、as

上下文管理

with

占位语句

pass

流程控制

if、elif、else

for

while

break、continue

类和函数

class

def

lambda

return

yeild

变量相关

global

nonlocal

del

异常处理

try、except、finally

raise

assert

异步函数

async、await

软关键字

match、case、_

type

总结


关键字 keyword

Python关键字keyword,也被称为“保留字”,是有特殊功能的标识符,不允许开发者自定义。

本文将带你一起探索Python中的各类关键字及其应用场景,在python执行函数help("keywords")就能得到所有关键字的列表:

>>> help("keywords")
Here is a list of the Python keywords.  Enter any keyword to get more help.

False               class               from                or
None                continue            global              pass
True                def                 if                  raise
and                 del                 import              return
as                  elif                in                  try
assert              else                is                  while
async               except              lambda              with
await               finally             nonlocal            yield

当前python最新版本号为3.12,目前有35个关键字,比旧版本多了2个与异步编程相关的关键字;另外还多了四个所谓的“softkeyword”,导入keyword库,除了有kwlist还多了一个softkwlist。

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> keyword.softkwlist
['_', 'case', 'match', 'type']
>>> len(keyword.kwlist)
35
>>> len(keyword.softkwlist)
4

keyword库还有两个判断函数,用法如下:

>>> keyword.iskeyword('async')
True
>>> keyword.iskeyword('match')
False
>>> keyword.issoftkeyword('_')
True
>>> keyword.issoftkeyword('await')
False

想获取所有关键字的英文帮助,可用以下代码实现:

import sys, keywordout = sys.stdout #保存标准输出流for i, kw in enumerate(keyword.kwlist+keyword.softkwlist, 1):fn = ("%02d" % i) + "." + kw + ".txt"with open(fn, 'w') as f:sys.stdout = fhelp(kw)sys.stdout = out #恢复标准输出流print("end")

关键字列表

kwlist

序号关键字功能
1True布尔类型,表示“真”,与 False 相反
2False布尔类型,表示“假”,与 True 相反
3None数据类型 - None Type,表示“无”,“空”
4and逻辑运算,与操作
5or逻辑运算,或操作
6not逻辑运算,非操作
7in成员运算
8is比较运算
9import模块导入,可以与 fromas 结合使用
10from可以与 import 结合使用;也可以与 yield 结合使用
11as可以与 import 结合使用;也可以与 with 结合使用
12with语句块,可以与 as 结合使用
13pass占位语句
14if条件语句,与 else、elif 结合使用
15elif与 if、else 结合使用
16else与 if、elif 结合使用;也可以用于异常或循环语句
17forfor 循环语句
18whilewhile 循环语句
19break中断循环语句的执行
20continue跳出本次循环,继续执行下一次循环
21class声明定义类
22def声明定义函数或方法
23return从函数返回计算结果
24yield从函数一次返回值,可以与 from 结合使用
25lambda定义匿名函数
26global定义全局变量
27nonlocal用于表示外部作用域的变量
28del删除变量或序列的值
29try捕获异常语句,与 except、finally、else 结合使用
30except捕获异常后的操作代码块,与 try、finally 结合使用
31finally异常语句中始终要执行 finally 包含的代码块
32assert断言,用于判断变量或者表示式的值是否为真
33raise异常抛出操作
34async声明异步函数
35await挂起异步函数

softkwlist 

序号关键字功能
36match匹配语句,与 case 结合使用,相于其它语言的switch语句
37case匹配语句,与 match 结合使用
38_下划线,与 case 结合使用,相当于其它语言的default语句
39type类型判断

关键字分类 

数据类型

True、False

布尔类型数据

>>> int(True)
1
>>> int(False)
0
>>> isinstance(True, type(False))
True

None

None类型数据

>>> isinstance(None, type(None))
True
>>> type(None)
<class 'NoneType'>

运算类型

and、or、not

逻辑运算符:与、或、非

in

成员运算符,用于判断对象是否包含于序列类型(如列表、元组、字符串)或其他可迭代对象(如集合、字典的键)中。

is

比较运算符,用于检查两个对象是否引用同一个内存地址,即判断它们是否是同一个对象实例。

A is B 相当于 id(A) == id(B)

模块导入

import

用于导入模块,import 模块名

也可以与from或as结合使用

from 模块名 import 具体模块方法、函数、属性等

import 模块名 as 模块别名

也可以使用 from ... import ... as ...

辅助关键字

from、as

这2个只能配合其他关键字一起使用,没有单独的功能,除了import语句中使用它俩外,还有:

with ... as ... 、 yield from ...

上下文管理

with

with语句块,实现上下文管理协议,确保在执行代码块前后自动调用初始化和清理操作。比如,在处理文件时,可以安全地打开和关闭文件,即使发生异常也能保证资源被释放,语句块结束会自动关闭已打开的文件对象。

with open('example.txt', 'r') as file:  content = file.read()  # 在这里处理文件内容  # 文件已关闭

除了文件操作,还能在网络请求、 数据库连接、线程锁等场景中使用:

import socket  with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:  s.connect(("www.example.com", 80))  s.sendall(b"GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n")  response = s.recv(4096)  # 连接已关闭
print(response)
import sqlite3with sqlite3.connect('example.db') as conn:cursor = conn.cursor()# 执行 SQL 语句pass# 数据库已关闭

with语句块还能嵌套使用:

   with A() as a:
       with B() as b:
             pass

也能写成等效的语句: with A() as a, B() as b: pass

占位语句

pass

什么都不做,临时占个位置,比如用在空类、空函数、空语句块等等。

流程控制

if、elif、else

条件语句,if 可以单独使用,还可以搭配elif和else使用,如 if-else, if-elif-else, if-elif-elif-else

else还能和循环语句或异常捕获语句一起使用,如 for-else, while-else, try-except-else

if和else还能用在类似三元操作符的结构中,如:

>>> x = 100
>>> 1 if x>0 else 0
1

for

for 循环语句

能通与 in 搭配使用 for ... in iterable:,也能与 else 结合使用。

while

while 循环语句

也能与 else 结合使用,while-else 和 for-else 一样在非break中断时循环结束后,继续执行else后的语句。

break、continue

循环中断和继续,区别是终止整个循环和退出单次循环。

注:if 和 for 搭配使用中列表、字典等的推导式中,如:

>>> [i for i in 'abcdef' if 'a'<i<'e']
['b', 'c', 'd']

类和函数

class

定义类

def

定义函数

lambda

定义匿名函数

return

函数终止并返回值。

yeild

函数终止并返回一个生成器

还可以与from连用,yeild from iterable 表示引用一个可迭代对像的值并返回生成器。

变量相关

global

声明全部变量

# 全局变量定义
global_var = 0def update_global():# 在函数内部声明 global_var 是全局变量global global_var# 修改全局变量的值global_var += 1print(f"Inside function: {global_var}")# 调用函数前查看全局变量的值
print("Before function call:", global_var)# 调用函数
update_global()# 函数调用后再次查看全局变量的值,会发现它已被修改
print("After function call:", global_var)
nonlocal

用于定义在嵌套函数中引用外部函数的变量。

def outer_function():outer_var = 5def inner_function():nonlocal outer_varouter_var = 15print("内部函数访问外部变量:", outer_var)inner_function()print("外部函数访问内部变量:", outer_var)outer_function()

 输出结果:

内部函数访问外部变量: 15
外部函数访问内部变量: 15

上述的代码如果注释掉nonlocal outer_var这一行,输出结果变为:

内部函数访问外部变量: 15
外部函数访问内部变量: 5

del

用于删除变量、列表元素、字典元素或其他可变对象的引用。

x = 10
print(x)  # 输出:10del xtry:print(x)# 此时尝试访问 x 将引发 NameError,因为 x 已被删除
except NameError as e:print(e)

输出:

10
name 'x' is not defined

异常处理

try、except、finally

捕获异常语句,也能与 else 一起使用,常用的结构有:

try-except;try-except-else;try-except-finally;try-except-else-finally

具体使用方法见以下实例中的注释:

x = 0try:  # 尝试执行的代码  y = 1 / x  # 这里会引发一个ZeroDivisionError  
except ZeroDivisionError as e:  # 当发生ZeroDivisionError异常时执行的代码  print("发生了除以零的错误,错误信息为:", e)  
else:  # 如果try代码块中的代码没有引发任何异常,则执行此代码块  print("try代码块中的代码成功执行")  
finally:  # 不论是否发生异常,都会执行的代码  print("finally代码块中的代码总是会执行")

执行结果:

发生了除以零的错误,错误信息为: division by zero
finally代码块中的代码总是会执行

# 上述代码第一行改为 x = 1,则输出:
# try代码块中的代码成功执行
# finally代码块中的代码总是会执行

raise

异常抛出语句,可用于代码测试,但出错就会中断代码运行。

def validate_email(email):  if "@" not in email:  raise ValueError("无效的电子邮件地址!")  else:  print("电子邮件地址有效")  validate_email("test@example")  # 输出: 电子邮件地址有效  
validate_email("test")  # 抛出ValueError: 无效的电子邮件地址!

也可以通过参数传递抛出系统定义的异常,以扩展异常捕获语句。

def handle_exception(e):# 对异常进行一些处理后,选择再次引发它print("Handling the exception...")raise e  # 再次引发原来的异常try:x = 1/0
except ZeroDivisionError as e:handle_exception(e)
assert

断言语句,用于判断变量或者表示式的值是否为真;通常用于代码测试,且不会中断代码运行。

class Stack:def __init__(self):self.items = []def push(self, item):self.items.append(item)def pop(self):assert len(self.items) > 0, "Cannot pop from an empty stack."return self.items.pop()stack = Stack()
stack.push('item1')# 正常情况下的弹出操作
popped_item = stack.pop()# 尝试从空栈中弹出元素,将触发AssertionError
try:popped_item_empty = stack.pop()
except AssertionError as e:print(f"Assertion error: {e}")print("End")

输出:

Assertion error: Cannot pop from an empty stack.
End 

异步函数

async、await

python3.5新增的关键字,用于异步函数的定义声明和挂起执行。

import asynciodef fib(n):if n<600:n1 = n2 = 1for _ in range(2,n):n1,n2 = n1+n2,n1return n1t = n//2if n%2:return fib(t+1)**2 + fib(t)**2else:return fib(t+1)**2 - fib(t-1)**2def Fib(n):return fib(n)async def asyncFib(n):res = Fib(n)print(res)async def main():await asyncio.gather(*tasks)if __name__ == "__main__":parms = [500, 2000, 10000]tasks = [asyncFib(p) for p in parms]loop = asyncio.run(main())

软关键字

match、case、_

python3.10新增的关键字,用于匹配语句,相当于其它语言中的分支结构switch-case。

之前的python版本中,一直由if...elif...[elif...]else来代替。

def process_data(data):match data:case 1:return "数据为1"case 2:return "数据为2"case 3:return "数据为3"case _:return "未知数据"print(process_data(1))  # 输出:数据为1
print(process_data(2))  # 输出:数据为2
print(process_data(3))  # 输出:数据为3
print(process_data(4))  # 输出:未知数据
type

判断数据类型

>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>
>>> type(1.5)
<class 'float'>
>>> type(1+1j)
<class 'complex'>


总结

Python关键字是一些预定义的标识符,是编程语言内建的具有特殊含义的保留字,它们在语法结构、逻辑控制、错误处理等方面执行特定的操作。作为构成python语言语法结构的核心元素,不可用作变量名、类名或函数名等。理解并熟练运用这些关键字对于编写高质量、易于理解和维护的代码至关重要。Python3.12中共有35+4个关键字,其分类如下:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十回 朱贵水亭施号箭 林冲雪夜上梁山-FreeBSD/Linux 控制台基础操作

林冲被众庄客捉住&#xff0c;吊在门楼下&#xff0c;正被打时&#xff0c;柴进来了&#xff0c;赶快把林冲救下来。原来这是柴进打猎用的小庄子&#xff0c; 林冲就把火烧草料场一事跟柴进详细的说了。柴进说兄弟真是命运多磨难啊。林冲住了几日&#xff0c;恐怕连累柴进&…

Laykefu客服系统 任意文件上传漏洞复现

0x01 产品简介 Laykefu 是一款基于workerman+gatawayworker+thinkphp5搭建的全功能webim客服系统,旨在帮助企业有效管理和提供优质的客户服务。 0x02 漏洞概述 Laykefu客服系统/admin/users/upavatar.html接口处存在文件上传漏洞,而且当请求中Cookie中的”user_name“不为…

[学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs

RNN存在信息瓶颈的问题。 注意力机制的核心就是在decoder的每一步&#xff0c;都把encoder的所有向量提供给decoder模型。 具体的例子 先获得encoder隐向量的一个注意力分数。 注意力机制的各种变体 一&#xff1a;直接点积 二&#xff1a;中间乘以一个矩阵 三&#xff1a;…

找不到vcruntime140_1.dll无法继续执行怎么办?全面分析修复方法

当系统提示vcruntime140_1.dll文件出现错误时&#xff0c;可能会引发一系列影响计算机正常运行的问题。这个特定的动态链接库文件&#xff08;DLL&#xff09;是Microsoft Visual C Redistributable的一部分&#xff0c;对于许多基于Windows的应用程序来说至关重要。一旦vcrunt…

回归预测 | Python基于ALO-BiGRU蚁狮优化算法优化双向BiGRU多变量回归预测+适应度曲线+多个评价指标

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 ALO算法是Mirjalili于2015提出的一种新型元启发式群智能算法。由于引入了随机游走、轮盘赌策略及精英策略&#xff0c;使得 ALO 算法成为一种种群多样、寻优性能强、调节参数少、易于实现的搜索技术 python代码 优化参…

线段树详解

什么是线段树&#xff1f; 1、线段树是一棵二叉搜索树&#xff0c;它储存的是一个区间的信息。 2、每个节点以结构体的方式存储&#xff0c;结构体包含以下几个信息&#xff1a; 区间左端点、右端点&#xff1b;&#xff08;这两者必有&#xff09; 这个区间要维护的信息&…

【leetcode】移除元素

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.暴力求解法二.使用额外数组三.原地修改数组 点击查看题目 一.暴力求解法 若我们不考虑时间复杂度…

【题目】2023年国赛信息安全管理与评估正式赛任务书-模块3 CTF

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块三 网络安全渗透、理论技能与职业素养 竞赛相关资源资料可在文末关注公众号获得 比赛时间及注意事项 本阶段比赛时长为180分钟&#xff0c;时间为9:00-12:00。 【注意事项】 &#xff08;1&#xf…

算法优化:LeetCode第122场双周赛解题策略与技巧

接下来会以刷常规题为主 &#xff0c;周赛的难题想要独立做出来还是有一定难度的&#xff0c;需要消耗大量时间 比赛地址 3011. 判断一个数组是否可以变为有序 public class Solution {public int minimumCost(int[] nums) {if (nums.length < 3) {// 数组长度小于3时&a…

UG制图-创建图纸的多种方法

1、2D&#xff1a;创建独立2D图纸&#xff0c;不引用任何3D模型 在UG软件中选择新建&#xff0c;或者快捷键ctrl N&#xff0c;进入新建命令&#xff0c;然后点击图纸&#xff0c;在关系中选择独立的部件&#xff0c;就创建了一个独立的图纸&#xff0c;我们可以在装配中添加…

项目管理该考哪个证书❓NPDP还是软考❓

有小伙伴在纠结是要考NPDP认证呢还是考软考呢❓ 今天小编要给大家好好说说NPDP认证❗️ &#x1f4a1;NPDP全称New Product Development Professional&#xff0c;也就是产品经理国际资格认证。 &#x1f525;NPDP是国际公认的为一的新产品开发专业认证&#xff0c;是集理论、方…

「环境配置」使用Windows自带工具清理C盘空间

​ Windows电脑操作系统一般是安装在磁盘驱动器的C盘中&#xff0c;一旦运行&#xff0c;便会产生许多垃圾文件&#xff0c;C盘空间在一定程度上都会越来越小。伴随着电脑工作的时间越久&#xff0c;C盘常常会提示显示其内存已不足。本文记录笔者清理机器的步骤。 一、使用Win…

在Qt中通过控制按钮实现登录界面密码与明码的转换

创建控件&#xff1a; 首先&#xff0c;在Qt设计师界面界面上创建QLineEdit类文本框&#xff0c;用于输入密码&#xff0c;并且实现密码与明码相互转化。 设置初始状态&#xff1a; 默认情况下&#xff0c;输入密码的文本框应该是可见的并允许用户输入。 添加切换按钮&…

【Oracle】收集Oracle数据库内存相关的信息

文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …

【Elasticsearch】索引恢复(recovery)流程梳理之副本分片数据恢复

replica shard重启具体流程 replica shard node &#xff08;generic threadpool&#xff09; 也是因为应用新的集群状态触发recovery&#xff0c;进入index阶段进入translog 阶段。先尝试重放本地的translog到global checkpoint向primary shard发起start recovery的请求&…

algotithm -- 排序算法

排序算法总结表&#xff1a; 1. In-place 和 Out-place 含义 参考链接 in-place 占用常数内存&#xff0c;不占用额外内存 假如问题规模是n&#xff0c;在解决问题过程中&#xff0c;只开辟了常数量的空间&#xff0c;与n无关&#xff0c;这是原址操作&#xff0c;就是In-…

HarmonyOS开源软件Notice收集策略说明

开源软件Notice是与项目开源相关的文件&#xff0c;收集这些文件的目的是为了符合开源的规范。 收集目标 只收集打包到镜像里面的模块对应的License&#xff1b;不打包的都不收集&#xff0c;比如构建过程使用的工具&#xff08;如clang、python、ninja等&#xff09;都是不收…

【C语言基础考研向】08判断语句与循环语句

1.关系表达式与逻辑表达式 算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运算符从左至右进行结合等&#xff0c;那么表达式5>3&&8<4-!0的最终值是多少?其计算过程如下图所示。 2.if-else语句 引入:在你打开衣…

[小程序]使用代码渲染页面

一、条件渲染 1.单个控制 使用wx:if"{{条件}}"来判断是否需要渲染这段代码&#xff0c;同时可以结合wx:elif和wx:else来判断 <view wx:if"{{type0}}">0</view> <view wx:elif"{{type1}}">1</view> <view wx:else>…

MySQL UNION 操作符

昨天介绍了 MySQL 数据库使用 LIKE 子句来进行筛选查询&#xff0c;今天主要讲解下 MySQL UNION 操作符。 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合&#xff0c;并去除重复的行。UNION 操作符必须由两个或多个 SELECT 语句组成&#xff0c;每…