Hello! 欢迎来到盒子萌!

18010020_python语法速查


avatar
dspirit 2026-03-05 21

[TOC]

命名规范(PEP8)
注释
变量和数据类型
运算符
字符串
列表、元组、字典、集合
控制流(条件、循环)
函数
类和对象
模块和包
异常处理
文件操作
常用内置函数

1.1 标识符:数字+字母+下划线(不能数字开头,大小写敏感)

以单下划线开头:_foo,代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import *
以双下划线开头:__foo,代表类的私有成员
以双下划线开头和结尾:__foo__,代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
1.1.1 保留字
类别 关键字 说明
逻辑值(内置常量) True .布尔真值
False .布尔假值
None .表示空值或无值
逻辑运算 and 逻辑与运算
or 逻辑或运算
not 逻辑非运算
条件控制 if 条件判断语句
elif 否则如果(else if 的缩写)
else 否则分支
循环控制 for 迭代循环
while 条件循环
break 跳出循环
continue 跳过当前循环的剩余部分,进入下一次迭代
异常处理 try 尝试执行代码块
except 捕获异常
finally 无论是否发生异常都会执行的代码块
raise 抛出异常
函数定义 def 定义函数
return 从函数返回值
lambda 创建匿名函数
类与对象 class 定义类
del 删除对象引用
模块导入 import 导入模块
from 从模块导入特定部分
as .为导入的模块或对象创建别名
作用域 global 声明全局变量
nonlocal .声明非局部变量(用于嵌套函数)
异步编程 async .声明异步函数
await .等待异步操作完成
其他 assert 断言,用于测试条件是否为真
in 检查成员关系
is 检查对象身份(是否是同一个对象)
pass 空语句,用于占位
with 上下文管理器,用于资源管理
yield 从生成器函数返回值
1.1.2 命名规范:常量、变量、函数&方法、类、私有成员、异常、前导后缀下划线
常量名:全大写+下划线,通常在模块顶部定义,如MAX_COONNECTIONS = 50,DEFAULT_TIMEOUT = 10.0

项目名/包名:全小写+下划线,短小、简洁、避免连字符,如my_project/data_utils

脚本名/模块名:全小写+下划线,短小、清晰、避免特殊字符,如main.py/data_loades.py

变量名:全小写+下划线,描述性明确,避免单字符(除临时变量),如user_name = "Alice",max_count = 100

函数名:全小写+下划线,使用动词或短语,如
def calculate_total():
  pass
def get_user_data():
  pass

方法名:全小写+下划线,同函数,如
class Rectangle:
  def calculate_area(self):
    pass

类命名:首字母大写式驼峰,不使用下划线,如
class UserProfile:
  pass
class NetworkHandler:
  pass


私有成员:单下划线开头(约定俗称的私有);双下划线开头(触发名称修饰,避免子类冲突),如
class MyClass:
  def __init__(self):
    self._internal_data = []    # 约定私有
    self.__secret_value = 42    # 名称修饰,实际变为_MyClass__secret_value


异常命名:首字母大写式驼峰+Error后缀,如
class ValidationError(Exception)
  pass


单前导下划线:约定为“保护”成员,表示该变量或方法仅供内部使用(模块内或类内),如 _variable
class MyClass:
  def __init__(self):
    self._internal_data = []    # 保护成员
  
  def _internal_method(self):    # 保护方法
    pass


单后缀下划线:避免与关键字冲突:当变量名与Python关键字(如 class, def, list)冲突时,在末尾加下划线,如 class_
class_ = “Physics”    # 避免使用 class 关键字
list_ = [1,2,3]    # 避免使用 list 关键字


双前导下划线:会触发名称修饰:用于避免子类中的命名冲突。Python会在变量名前加上`_类名`作为前缀,使其在类外访问时实际名称被改写
实际效果:__var 在类 MyClass 内部会被重命名为 _MyClass__var。
class MyClass:
  def __init__(self):
    self.__private = 42    # 实际存储为_MyClass__private
  
  obj = MyClass()
print(obj.__private)    # 报错AttributeError
print(obj._MyClass__private)    # 可访问(但不推荐)


双后缀下划线:无特殊含义,一般避免使用,除非用于避免与关键字冲突(如`class_`而非`class`)。但双后缀下划线本身不是Python的规范用法,如`var__`


双前导和双后缀下划线
特殊方法:这是Python保留的命名方式,用于定义类的特殊行为(如运算符重载、构造方法等);用户不要自定义此类名称,如 __init__
class MyClass:
  def __init__(self):    # 构造方法
    pass

  def __str__(self):    # 定义对象打印格式
    return "MyClass"


99%的场景使用`snake_case`(变量/函数)和`CamelCase`(类)
仅在需要避免命名冲突时使用`__private`
永远不要自定义`__anything__`格式的方法
使用`_internal`传达"仅供模块或类的内部使用"的意图
1.1.3 数据类型
1.1.3.1 可变类型:数字(整数、浮点、布尔、复数)、字符串、元组、字节串
数字:
整数int
浮点数float
布尔值bool
复数complex

字符串str:不可变的字符序列,如 "hello", 'Python'

元组tuple:不可变的有序序列,如 (1, "a", True)

字节串bytes:不可变的二进制数据,如 b'ABC'
1.1.3.2 可变类型(容器):列表、字典、集合、字节数组
列表list:可变的有序序列,如 [1, 2, "three"]

字典dict:键值对的集合(无序),键必须不可变,如 {"name": "Alice", "age": 30}

集合set:无序且元素唯一,如 {1, 2, 3}

字节数组bytearray:可变的二进制数据,如 bytearray(b"hello")
1.1.3.3 特殊类型:空值、范围、冻结集合、二进制序列视图
空值NoneType:表示“无”,唯一值 `None`

范围range:不可变的数字序列,用于循环,如 `range(5)` 生成 `0,1,2,3,4`

冻结集合frozenset:不可变的集合,可作字典的键,如 `frozenset({1, 2})`

二进制序列视图memoryview:直接操作内存的二进制数据(高级用途)
1.1.3.4 类型检查与转换:type、isinstance、强制类型转换
检查类型:用 `type()` 或 `isinstance()`
print(type(10))          # <class 'int'>
print(isinstance("abc", str))  # True

类型转换:
int("42")       # 字符串 → 整数 → 42
float(3)        # 整数 → 浮点数 → 3.0
str(True)       # 布尔 → 字符串 → "True"
list("abc")     # 字符串 → 列表 → ['a', 'b', 'c']
tuple([1, 2])   # 列表 → 元组 → (1, 2)
set([1,1,2])    # 列表 → 集合 → {1, 2}

1.2 运算符

1.2.1 算术运算符:加减乘除、取模、取整、幂
加:+
减:-
乘:*
除:/

取整//:向下取整除法
取模%:返回除法的余数
幂**:返回x的y次幂,a**b 为a的b次方,10**2 = 100

1.2.2 比较运算符:大于、小于、大于等于、小于等于、等于、不等于
大于:>
小于:<
大于等于:>=
小于等于:<=
等于:==
不等于:!=
1.2.3 赋值运算符:普通赋值、加赋、减赋、乘赋、除赋、取整赋、取模赋、幂赋、海象运算(优雅的语法糖:=)
普通赋值:=
加法赋值:+=
减法赋值:-=
乘法赋值:*=
除法赋值:/=
取整除赋值://=
取模赋值:%=
幂赋值:**=

海象运算符::=    # python3.8新增,同时进行赋值和返回赋值的值
if (n := len(a)) > 10:    # 计算列表a的长度,将计算结果赋值给变量n,整个表达式的结果就是 len(a) 的值,再`>10`条件判断
  print(f"List is too long ({n} elements, expected <= 10)")    # 列表a的长度大于10,则打印

等价于:
n = len(a)       # 先计算长度并赋值
if n > 10:       # 再检查条件
  print(f"List is too long ({n} elements, expected <= 10)")
1.2.3 位运算符:按位与、按位或、按位取反、按位异或、左移、右移
a = 60    # 0011 1100
b = 13    # 0000 1101

按位与&:a&b = 12    # 0000 1100,同1为1
按位或|:a|b = 61    # 0011 1101,有1为1
按位取反~:~a = -61  # 1100 0011,~x = -(x+1)
按位异或^:a^b = 49  # 0011 0001,不同为1

左移<<:a<<2 = 240  # 1111 0000,低位补0
右移>>:a>>2 = 15   # 0000 1111,高位补0

位运算运用
术语	     说明	               示例(IPv4)
IP地址	 32位整数(IPv4)	 192.168.1.10
子网掩码	定义网络/主机位的掩码	 255.255.255.0
网络地址	IP&掩码	          192.168.1.0
广播地址	IP|~掩码	          192.168.1.255
CIDR表示	 IP/前缀长度	      192.168.1.0/24

应用场景:计算网络地址、计算广播地址、判断IP是否同子网、CIDR转掩码(左移后补0)
位运算比字符串操作快100倍以上,是网络设备的硬件基础
1.2.4 逻辑运算符:逻辑与、逻辑或、逻辑非
and:   # 所有条件为真时返回真,返回第一个假值或最后一个真值
or:    # 任一条件为真时返回真,返回第一个真值或最后一个假值
not:   # 反转布尔值        ,总是返回布尔值(True/False)
1.2.5 成员运算符:in、not in
in:     在指定的序列中找到值返回True,否则返回False。
not in: 在指定的序列中没有找到值返回True,否则返回False。	
1.2.6 身份运算符:is、is not
is:     判断两个标识符是不是引用自一个对象
is not: 判断两个标识符是不是引用自不同对象

id() 函数用于获取对象内存地址,可以判断是不是同一对象
1.2.7 运算符优先级
运算符 描述(从最高到最低优先级)
(expressions...),[expressions...], {key: value...}, {expressions...} 圆括号的表达式
x[index], x[index:index], x(arguments...), x.attribute 读取,切片,调用,属性引用
await x await 表达式
** 乘方(指数)
+x, -x, ~x 正,负,按位非 NOT
*, @, /, //, % 乘,矩阵乘,除,整除,取余
+, - 加和减
<<, >> 移位
& 按位与 AND
^ 按位异或 XOR
` `
in,not in, is,is not, <, <=, >, >=, !=, == 比较运算,包括成员检测和标识号检测
not x 逻辑非 NOT
and 逻辑与 AND(and 拥有or更高优先级)
or 逻辑或 OR
if -- else 条件表达式
lambda lambda 表达式
:= 赋值表达式

1.3 语法

1.3.1 数据类型语法:数字、字符串、元组、列表、字典、集合
数字:
var1 = 1
var2 = 10

字符串:
var1 = "Hello World"
var2 = "Runoob"


元组:(元素不能修改,但可以组合,可以索引,元组实际由逗号定义)
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5)
tup3 = "a", "b", "c", "d"    # 不要括号也可以



列表:(不需要具有相同的类型)
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']


字典:(键值对,键必须是唯一的,重复赋值只会记后一个键值)
tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}


集合:(无序的不重复元素序列,可交、并、差集)
set1 = {1, 2, 3, 4}            # 直接使用大括号创建集合
set2 = set([4, 5, 6, 7])      # 使用 set() 函数从列表创建集合

创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
1.3.2 流程控制语法
1.3.2.1 if流程控制:多分支、if嵌套、match…case

多分支:

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

if嵌套:

if 表达式1:
    语句
    if 表达式2:
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句

match…case:(match 后的对象会依次与case后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切)

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>
1.3.2.2 while流程控制:while循环、while无限循环、while循环使用else、while简单语句组

while循环:

n = 100
 
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
 
print("1 到 %d 之和为: %d" % (n,sum))

while无限循环:

var = 1
while var == 1 :  # 表达式永远为 true
   num = int(input("输入一个数字  :"))
   print ("你输入的数字是: ", num)
 
print ("Good bye!")

while循环使用else:

count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

while简单语句组:(while 循环体中只有一条语句,可将该语句与while写在同一行中)

flag = 1
 
while (flag): print ('欢迎访问菜鸟教程!')
 
print ("Good bye!")
1.3.2.3 for流程控制:for循环语句、for循环打印字符串中的每个字符、for整数范围值配合 range() 、for…else

for循环语句:(可以遍历任何可迭代对象,如一个列表或者一个字符串)

sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    print(site)

for循环打印字符串中的每个字符:

word = 'runoob'
 
for letter in word:
    print(letter)

for整数范围值配合 range() :

for number in range(1, 6):
    print(number)

for…else:(用于在循环结束后执行一段代码)

for x in range(6):
  print(x)
else:
  print("Finally finished!")
1.3.2.4 reak 和 continue 语句及循环中的 else 子句,以及pass语句
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

while 中使用 break:

n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)
print('循环结束。')

while 中使用 continue:

n = 5
while n > 0:
    n -= 1
    if n == 2:
        continue
    print(n)
print('循环结束。')

循环字符串 Runoob,碰到字母 o 跳过输出:

for letter in 'Runoob':     # 第一个实例
   if letter == 'o':        # 字母为 o 时跳过输出
      continue
   print ('当前字母 :', letter)
 
var = 10                    # 第二个实例
while var > 0:              
   var = var -1
   if var == 5:             # 变量为 5 时跳过输出
      continue
   print ('当前变量值 :', var)
print ("Good bye!")

循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n//x)
            break
    else:
        # 循环中没有找到元素
        print(n, ' 是质数')

pass语句:

pass是空语句,是为了保持程序结构的完整性;pass 不做任何事情,一般用做占位语句