
1. 先说清楚这份速查表到底怎么用前两天有个朋友学Python翻着一本厚教程问我明明看了几十页真到自己写的时候还是脑子空白是不是自己不适合学编程我说不是问题出在你看教程的方式上。新手最大的误区是把教程当小说从头翻到尾合上之后啥也不记得。学编程的正确姿势其实很简单——先跑起来再把规则查回来。你需要一份能随时翻的速查表而不是一本需要通读的说明书。这篇就是给零基础读者准备的Python基础语法速查。它不等同于教程不会跟你讲什么是变量什么是函数这种哲学层面的东西而是直接告诉你语法长什么样、怎么用、用的时候会踩什么坑。适合三类人刚装好Python准备入门的萌新、学过一点但总记不住语法细节的人、以及写代码时需要快速确认某个写法的人。我尽量用最直白的说法把知识点讲透每个语法块都配了可直接复制的示例。你不需要一口气读完把它放在手边写代码时遇到哪个查哪个查几次自然就记住了。2. 环境战线解释器、pip和编辑器的最小配置2.1 装Python时最容易忽略的两个选项去python官网下载安装包这件事网上教程一大把我不重复细节只提醒两个安装时必选、很多人却跳过的选项Add Python to PATH把Python加入环境变量这个选项不勾后面你在命令行敲python就会提示python was not found; run without arguments to install from the microsoft store这是Windows上最常见的新手报错。安装时勾上它省去之后手动配环境变量的麻烦。Install pippip是Python的包管理工具装第三方库全靠它。新版安装包默认自带但老教程会让你手动装别照抄。装完之后在任何目录打开终端Windows按WinR输入cmdmacOS用Terminal输入下面命令验证python --version如果显示类似Python 3.12.x之类的版本号环境就通了。顺便验证一下pippip --version一个细节Mac和Linux上有些系统自带的是Python 2命令行可能需要敲python3和pip3。不确定就两个都试哪个能跑出版本号用哪个。2.2 用vscode搭一个够用的Python环境编辑器这块我推荐Visual Studio Code免费、轻量、插件生态好。装完之后做三件事装官方Python扩展就是微软出的那个名字叫Python打开扩展面板CtrlShiftX搜索安装。用CtrlShiftP打开命令面板输入Python: Select Interpreter选择你刚装的Python解释器。打开一个.py文件按F5运行或者直接点右上角的三角形运行按钮。跑起来之后控制台会输出你的print结果。这套配置对新手来说完全够用不用再折腾别的。2.3 第一个验证脚本环境搭好了先跑一个最小脚本确认一切正常。新建hello.pyprint(hello, python) message 我从零开始学Python print(message)能把两行都打出来说明解释器、文件、输出链路都是通的。后面所有语法速查都可以用这套环境直接试。3. 变量与类型动态类型不是随便写3.1 变量本质上是标签不是盒子Python里写a 1意思不是把1放进a这个盒子里而是创建整数对象1把名字a贴上去。这个区别理解到位很多坑能提前避开。a 1 b a a 2 print(b) # 输出1b仍然指向整数1因为整数是不可变对象操作不会改原对象只会重新贴标签。而列表这种可变对象就完全不一样后面我会专门讲。Python是动态类型语言变量不用声明类型同一个名字可以先存数字再存字符串x 42 x 现在变成了字符串这在灵活的同时也带来麻烦新手很容易忘记x之前存过什么导致类型不匹配的报错。建议一个变量尽量只存一种类型的数据保持洁癖。3.2 五个基本类型速查# 整型 int age 25 # 浮点型 float pi 3.14159 # 字符串 str单双引号都行 name 张三 name2 李四 # 布尔型 bool首字母大写 # True / False 是唯二的两个取值 is_ok True # 空值 NoneType表示没值 nothing None判断类型用type()函数print(type(age)) # class int print(type(name)) # class str数值类型要点整数除法用/得到浮点数//才是整除%取余数**做幂运算。print(7 / 2) # 3.5 print(7 // 2) # 3 print(7 % 2) # 1 print(2 ** 3) # 8abs()函数取绝对值传负数返回正数print(abs(-8)) # 83.3 类型转换新手最容易翻车的三个地方想转成函数例子结果整型int()int(42)42浮点float()float(3.14)3.14字符串str()str(100)100布尔bool()bool(1)/bool(0)True/False翻车点一int(3.14)会报错。int()对纯数字字符串能转但对带小数点的字符串直接拒绝。先转float(3.14)得到3.14再int(3.14)得到3。翻车点二bool(False)的结果是True。任何非空字符串转布尔都是True空字符串才是False。bool(0)、bool([])、bool(None)都是False其余基本都是True。翻车点三字符串拼接时必须保证两边都是字符串数字要先用str()包一层age 25 # print(我今年 age 岁) # 报错str 和 int 不能直接相加 print(我今年 str(age) 岁) # 正确 print(f我今年{age}岁) # f-string写法后面细说3.4is和不是一回事这个坑几乎每个人都会踩。a [1, 2, 3] b [1, 2, 3] print(a b) # True内容相等 print(a is b) # False不是同一个对象比较的是值is比较的是身份是不是同一个对象。记住这个原则判断值相等用判断是不是同一个对象才用is比如x is None。4. 容器三兄弟列表、元组、字典外加集合这个亲戚4.1 列表Python里最常用的容器列表用方括号可以混装不同类型的数据fruits [苹果, 香蕉, 橙子] mixed [1, hello, 3.14, True, None] nums list(range(5)) # [0, 1, 2, 3, 4]增删改查速查表fruits [苹果, 香蕉, 橙子] fruits.append(葡萄) # 末尾追加 fruits.insert(1, 西瓜) # 在索引1的位置插入 fruits.remove(香蕉) # 删除指定值的元素只删第一个匹配 fruits.pop() # 删掉最后一个返回它 fruits.pop(0) # 删掉索引0的元素返回它 fruits[0] 草莓 # 修改索引0的元素 print(len(fruits)) # 列表长度索引规则第一个元素是[0]最后一个可以是[-1]倒数第二个是[-2]依次类推。这是Python非常方便的特性比其他语言少写很多长度减一的代码。4.2 切片Python最被人称道的语法之一切片就是从序列里切出一段子序列写法是[start:stop:step]规则是包含start不包含stopstep是步长。nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] nums[2:5] # [2, 3, 4]从索引2到索引4到5停了 nums[:4] # [0, 1, 2, 3]从头开始到3 nums[6:] # [6, 7, 8, 9]一直到末尾 nums[:] # 复制整个列表 nums[::2] # [0, 2, 4, 6, 8]每隔一个取一个 nums[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]整个列表反转 nums[-3:] # [7, 8, 9]最后三个理解不含stop这一点很重要。切片[2:5]取的是2、3、4三个元素不是2到5一共四个元素。记法[start:stop]里的stop是切到它之前为止。切出的新列表和原列表互不影响nums [0, 1, 2, 3, 4] sub nums[1:3] # [1, 2] sub[0] 99 print(nums) # [0, 1, 2, 3, 4] 原列表没变字符串同样支持切片这对提取文本子串非常方便。4.3 字典靠名字找值不是靠位置找值字典存的是键值对用花括号创建user { name: 小明, age: 18, city: 北京 }增删改查速查表user[hobby] 篮球 # 新增键值对 user[age] 19 # 修改已有键的值 print(user[name]) # 读取键不存在会报KeyError print(user.get(name)) # 推荐键不存在返回None不报错 print(user.get(score, 0)) # 键不存在返回默认值0 del user[city] # 删除键值对 print(user.keys()) # 所有键 print(user.values()) # 所有值 print(user.items()) # 所有键值对新手做查值操作时优先用get()而不是[]。[]遇到键不存在直接抛异常中断程序get()返回None流程还能继续。遍历字典的标准写法for key, value in user.items(): print(key, value)4.4 元组、集合和解包赋值元组用圆括号创建后不可修改适合存不该变的数据。point (3, 5) x, y point # 解包同时给两个变量赋值 print(x, y) # 3 5集合用花括号自动去重支持快速判断成员是否在集合里ids [1, 2, 2, 3, 3, 3] unique_ids set(ids) # {1, 2, 3} print(2 in unique_ids) # True集合判断成员极快解包赋值其实不只是元组能用列表字符串都能用a, b 1, 2 a, b b, a # 交换两个变量的值Python一行搞定 first, *rest [1, 2, 3, 4] print(first) # 1 print(rest) # [2, 3, 4]4.5 推导式三行变一行列表推导式是Python里很优雅的写法新手可以先把它当作语法糖了解# 生成0到9的平方列表普通写法 squares [] for i in range(10): squares.append(i * i) # 推导式写法 squares [i * i for i in range(10)] # 加条件筛选 even_squares [i * i for i in range(10) if i % 2 0]同样有字典推导式square_dict {i: i * i for i in range(5)}推导式不是必备技能但读别人的代码时一定会碰到先认识它不亏。5. 控制流与函数代码的骨架与组装单元5.1if条件判断注意冒号和缩进score 85 if score 90: print(优秀) elif score 60: print(及格) else: print(不及格)三个要点条件后面必须跟冒号忘写冒号是新手高频报错。下一行必须缩进Python用缩进表示代码块同一缩进层级属于同一块。建议统一用4个空格别混用Tab。条件判断支持and、or、not组合age 20 if age 18 and age 60: print(成年且未退休)判断值和None比较时用is not None而不是! None这个习惯可以尽早养成。5.2for循环与range函数# 遍历列表 for fruit in [苹果, 香蕉, 橙子]: print(fruit) # range生成整数序列 for i in range(5): # 0, 1, 2, 3, 4 print(i) for i in range(2, 6): # 2, 3, 4, 5 print(i) for i in range(0, 10, 2): # 0, 2, 4, 6, 8 print(i)遍历列表时同时要索引和值用enumerate()for index, fruit in enumerate([苹果, 香蕉]): print(index, fruit)5.3while循环与break、continuen 0 while n 5: print(n) n n 1 # break立即跳出整个循环 # continue跳过本次进入下一次循环 for i in range(10): if i 3: continue # i等于3的时候跳过不输出 if i 7: break # i等于7的时候整个循环结束 print(i) # 输出0 1 2 4 5 6while要特别注意循环条件必须能在循环体内朝结束变化否则会死循环。新手经常写while n 5但是在循环里忘记更新n程序卡死。这时候在编辑器里按CtrlC可以强制中断程序。5.4 函数定义把重复代码装进一个盒子def greet(name, greeting你好): 给指定的人打招呼 return f{greeting}{name} result greet(小红) print(result) # 你好小红 result2 greet(小明, 早上好) print(result2) # 早上好小明参数类型有几种类型写法说明位置参数def f(a, b)调用时按位置传默认参数def f(a, b10)不传b时用默认值关键字参数f(b2, a1)调用时指名道姓传任意数量参数def f(*args, **kwargs)*args收多余位置参数**kwargs收多余关键字参数默认值的坑千万别用可变对象做默认参数。看这个例子——def add_item(item, target[]): target.append(item) return target print(add_item(a)) # [a] print(add_item(b)) # [a, b]默认列表被污染了 print(add_item(c)) # [a, b, c]原因是默认参数只在函数定义时创建一次之后每次调用复用的是同一个列表。正确写法是默认用Nonedef add_item(item, targetNone): if target is None: target [] target.append(item) return target函数内创建的变量只在函数内有效函数外的变量在函数内可以读但不能直接改。想改全局变量需要global声明但新手阶段尽量别用容易造成混乱。5.5 一个小练习李白打酒用语法练个经典题。题目是李白街上走提壶去打酒遇店加一倍见花喝一斗三遇店和花喝光壶中酒。问原来壶里有多少酒用Python反推wine 0 # 最后喝光了 for _ in range(3): wine wine 1 # 见花前先喝掉的一斗倒推要加回来 wine wine / 2 # 遇店前酒翻倍倒推要除以2 print(wine) # 0.875斗不用理解太深入能跟着这个例子顺一遍循环和赋值逻辑就够了。等你把基础语法都过完用Python解这种题会非常顺手。6. 字符串与文本处理新手最常用的硬功夫6.1 拼接与格式化优先用f-string字符串拼接有三种方式name 小明 age 18 # 方式一 拼接 msg1 name 今年 str(age) 岁 # 方式二format方法老版本常用 msg2 {}今年{}岁.format(name, age) # 方式三f-stringPython 3.6推荐 msg3 f{name}今年{age}岁f-string最直观也最不容易错里面可以写表达式price 9.9 count 3 print(f总价{price * count:.2f}元) # 总价29.70元 print(f{100 细分:10}) # 右对齐宽度10写法我后面详解6.2 字符串方法速查表text hello, python world text.strip() # 去掉首尾空格 - hello, python world text.upper() # 全大写 - HELLO, PYTHON WORLD text.lower() # 全小写 text.replace(python, java) # 替换 - hello, java world text.split(,) # 按逗号拆分 - [ hello, python world ] text.split() # 按空白拆分 - [hello,, python, world] .join([a, b, c]) # 用 连接 - a b c text.startswith( hello) # True判断开头 text.endswith(world ) # True判断结尾 len(text) # 字符串长度 abc in text # False判断子串是否存在有个细节字符串方法大多返回一个新字符串原字符串不变。需要处理结果时记得重新赋值text text.strip().replace(python, Python)6.3 中文编码问题写Python处理中文时乱码问题基本都和编码有关。原则就一条Python 3的源代码文件默认UTF-8编码保存文件时用UTF-8就没问题。用vscode的话右下角能看到当前文件编码确保显示的是UTF-8。中文字符串操作非常方便它按字符计数而不是字节s Python编程 print(len(s)) # 7P-y-t-h-o-n-编-程 共7个字符 print(s[6:]) # 编程一个实用小技巧在做爬虫或者数据处理时如果print输出到控制台乱码先在文件开头加一行# -*- coding: utf-8 -*-虽然Python 3默认就是UTF-8但加上这行在某些老环境或者windows控制台下能让问题更少。7. 速查表之外的几个坑新手最容易翻车的地方7.1 引用 vs 复制两个变量指向了同一个列表这是所有Python新手必踩的坑。看代码a [1, 2, 3] b a # 这不是复制b和a指向同一个列表 b.append(4) print(a) # [1, 2, 3, 4]a也变了正确复制列表有三种方式b a[:] # 切片复制 b list(a) # list()复制 import copy b copy.deepcopy(a) # 深拷贝嵌套列表也安全记住直接赋值是贴标签不是复制。涉及到嵌套列表列表里套列表时请用deepcopy浅拷贝只复制了外层。7.2 缩进出错看起来对运行报错Python的缩进是硬语法不统一直接IndentationError。最常见的场景是一个文件里混了空格和Tab肉眼看不出来。复制粘贴代码时缩进全乱了。解决方式在vscode里打开显示空格和Tab的功能右下角或命令面板搜索Render Whitespace或者干脆全选代码ShiftTab把缩进全部回退后再重新缩进。实际项目中我强烈建议统一用空格4个空格一个层级。代码规范工具可以暂缓但缩进习惯一定要从第一天养好。7.3 死循环CtrlC解决但不治本i 0 while i 5: print(i) # 忘了写 i i 1程序会一直输出0直到你手动停止。运行中的Python程序在终端里用CtrlC强制中止在vscode里点红色方块停止。不治本的解决方案是循环体内修改循环变量的语句一定写在显眼位置最好跟while条件同一屏能看到。7.4 模块导入import和from的区别写代码超过10行基本就要开始import模块了import math # 导入整个模块 print(math.sqrt(16)) # 用 math.函数名 调用 from math import sqrt # 只导入sqrt函数 print(sqrt(16)) # 直接用函数名 import matplotlib.pyplot as plt # 给模块起别名非常常见初学阶段只要记住用import 模块名最稳妥用from 模块名 import 函数名可以把名字直接拿来用。装第三方库用pip装好之后就能import了pip install numpy pip install requests装哪个库之前先确认pip能正常用如果下载慢可以临时指定国内镜像源pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple7.5 文件路径里的坑Windows反斜杠读写文件时新手常遇到FileNotFoundError一个隐蔽原因是Windows路径里的反斜杠\在Python字符串里是转义符# 这样写会出错 # open(C:\Users\new\file.txt) # 正确方式用正斜杠Python在Windows下也认 open(C:/Users/new/file.txt) # 或者用原始字符串 r前缀 open(rC:\Users\new\file.txt)三种方式任选我习惯用正斜杠省心。8. 学了语法之后下一步可以这样推进语言基础这关过掉之后大多数人会陷入语法都会一写就废的状态这太正常了。我在带新手的时候通常建议按这个顺序往下走第一把上面每一段示例代码都亲手敲一遍不是复制粘贴是敲。敲的过程会强制你想清楚每行的作用暴露你以为会了但实际不会的知识点。第二用学到的语法去解决一个小问题比如写脚本统计一个文本文件里出现频率最高的词、用爬虫抓取一个简单网页的标题和链接、或者画一张数据图表。这个过程会逼着你查open()怎么读取文件、for怎么遍历、import怎么引用库在查—用—出错—再查里真正掌握语法。第三遇到报错时别慌。报错信息最后一行XXXError就是根本原因前面的部分告诉出错位置。把报错信息复制到搜索引擎里大概率有人已经遇到过同样的问题。在你成为熟练的Python开发者之前搜索报错就是日常。我个人练过一段时间的经验是语法速查表背不下来没关系理解底层逻辑才重要。变量怎么绑定对象、列表和字典的区别是否清楚、缩进为什么不能乱这三件事想通大部分语法规则都能串起来。后续如果再碰到什么想不起的写法回来翻翻这份速查就行多翻几次它就变成你自己的了。