本地环境搭建 打开终端窗口输入 python 查看是否已安装及版本。 Python 可在多种平台运行: Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX 等) Win 9x/NT/2000 Macintosh (Intel, PPC, 68K) OS/2, DOS, PalmOS, Nokia 手机, Windows CE, Acorn/RISC OS, BeOS, Amiga, VMS/OpenVMS, QNX, VxWorks, Psion 也已移植到 Java 和 .NET 虚拟机
Python 简介 Python 是一种高级、解释型、交互式和面向对象的脚本语言。Python 设计为高度可读。它经常使用英语关键字,而其他语言使用标点符号,且比其他语言具有更少的语法结构。 Python 是解释型语言:Python 由解释器在运行时处理。执行前无需编译程序。这类似于 PERL 和 PHP。 Python 是交互式语言:你可以坐在 Python 提示符前,直接与解释器交互编写程序。 Python 是面向对象语言:Python 支持将代码封装在对象中的面向对象风格或技术。 Python 是初学者语言:Python 适合初级程序员,支持从简单文本处
如果你错过了消息:Python 2 于 2020 年 1 月 1 日正式停止支持。如果你仍在使用 Python 2.7,请立即升级。不确定当前版本?请检查你的 Python 版本。 许多包维护者已迁移到 Python 3。部分仍支持 Python 2,但其他已放弃支持。如果你需要从 Python 2 代码库迁移,请阅读我们的 Python 2 到 Python 3 迁移指南。
你可以在代码中检查 Python 版本,确保用户不会使用不兼容的版本运行脚本。使用以下简单检查: = (3, 5): # 友好提示用户升级,因为你使用了 3.5 的特性
IPython 是一个增强版的 Python REPL,也是 Jupyter Notebook 的核心。简而言之,Jupyter 是一个开源 Web 应用,允许你创建和共享包含实时代码、公式、可视化和叙述性文本的文档。如果你经常使用交互式 Shell 却不了解 IPython,真的应该去了解一下! IPython 特性 IPython Shell 提供的主要特性包括: 全面的对象自省。 跨会话持久的输入历史。 会话期间输出结果的缓存,自动生成引用。 Tab 补全,支持 Python 变量、关键字、文件名和函数补全。 用于控制环境和执行多种任务的魔法命令。 会话日志记录和重载。 集成 pdb
使用 sys.getsizeof() 可以查看对象的内存占用: import sys mylist = range(0, 10000) print(sys.getsizeof(mylist)) # 48 哇……等等……为什么这个巨大的列表只有 48 字节? 因为 range 函数返回的是一个可迭代对象,它表现得像一个数字列表,但内部仅记录最后一次迭代的数字。range 比实际的数字列表节省更多内存。 你可以通过列表推导式从同一个 range 创建一个真实的 Python 列表来验证这一点: import sys myreallist = [x for x in range(0, 10000
Python 原生支持一次返回多个值。多数函数返回单值,但你也可以返回多值,且无需字典、列表或数据类。 目录 用元组返回多值 Python 返回多值的替代方案 持续学习 用元组返回多值 return 后用逗号列出值即可。示例:返回多值并一次性解包赋给多变量: def get_user(id): # fetch user from database # .... return name, birthdate name, birthdate = get_user(4) 本质上返回的是元组。写成 return (name, birthdate) 效果同。返回 2 个以上
Python 数据类是加了 @dataclass 装饰器的普通类,专为存数据而生。Python 3.7+ 通过内置 dataclasses 模块提供。相较普通类有多项优势,本文逐一拆解并附示例与常用操作。 目录 数据类优势 数据类示例 默认值 数据类转 JSON 持续学习 数据类优势 极简代码量 @dataclass 装饰器零可见代码注入大量功能:自动生成 __init__、__repr__、__eq__ 等。只需声明字段,无需手写任何方法。 开箱即用的比较 两数据类实例可直接用 == 比较,因自动实现 __eq__。凡实现此魔术方法的对象均可同类型比较。 友好打印 自动实现 __rep
巧用元组解包,一行代码交换两变量,零临时变量: a = 1 b = 2 a, b = b, a print(a) # 2 print(b) # 1 第 3 行即完成交换,Python 原生支持,简洁高效。
用这招快速将 Python 字符串转标题大小写。引用维基百科: 标题大小写广泛用于线上线下印刷。本站所有文章标题均用 Title Case。细观大多数网站、报纸、杂志皆采用此式。 Python 内置 title() 一键转换: >>> title = string in title case >>> title.title() String In Title Case 但缺陷明显: 含撇号时错误:Theyre 变 TheyRe 小词(in、no 等)本不应大写却被大写 更健壮的正则版本: import re def titlecase(s):
Python 生态包罗万象,pip 一键装。自然有处理 emoji 的包。 安装: $ pip3 install emoji 包支持 Unicode emoji 与短代码互转: import emoji result = emoji.emojize(Python is :thumbs_up:) print(result) # Python is 👍 # 反向转换: result = emoji.demojize(Python is 👍) print(result) # Python is :thumbs_up: 典型场景:社交媒体分析需统一处理表情;不想在数据库存 emoji,可先转文本
Pillow(Python Imaging Library 续作)专为图像处理设计,典型用于归档与批处理,当然也可随心所欲用于其他场景。功能包括: 生成缩略图 格式转换 打印图像 获取直方图(自动对比度增强利器) 旋转图像 应用滤镜(如模糊) 目录 安装图像处理包 处理图像 显示图像 延伸阅读 安装图像处理包 安装 Pillow(原 PIL 分支延续版): pip3 install Pillow 处理图像 导入 ImageFilter 解锁多种滤镜。模糊示例: from PIL import Image, ImageFilter im = Image.open(kittens.jpg
最早的 Python PEP 之一是 PEP-20,列出 19 条 Python 编程箴言,名为“Python 之禅”。规则源自 2004 年,基于 PEP-8。 Python 内置彩蛋可直接打印这 19 条: import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better
Python REPL 中用下划线 _ 即可获取上一条表达式结果: _ + 3 12 IPython Shell 同样支持。额外提供 Out[n] 访问 In[n] 的值。例:Out[1] 即下例中的 9: In [1]: 3 * 3 Out[1]: 9 In [2]: Out[1] + 3 Out[2]: 12 In [3]: _ + 3 Out[3]: 15
attrs 包让你用简洁注解创建高级数据类。Python 原生 dataclass 固然好用,但 attrs 提供额外进阶特性。 目录 安装 attrs attrs vs 原生数据类 基础 attrs 示例 attrs 验证器示例 attrs 转换器示例 attrs 结合 slots 持续学习 安装 attrs attrs 非标准库,需 pip install attrs 或 pipenv install attrs。建议虚拟环境隔离。 $ pip install attrs # or with pipenv: $ pipenv install attrs attrs vs 原生数据类
Python 类 __slots__ 是鲜为人知的特性。定义 __slots__ 显式声明类允许拥有的字段,带来三大优势: 实例内存占用略降 属性访问更快 禁止随意给实例动态添加新属性 定义示例: qh = Card(queen, hearts) 对我最大价值:防止拼写错误静默创建新属性。给 slotted 类实例赋值拼写错会直接抛错,而非悄悄加新属性。 简单类(无复杂继承)用 slots 优势明显。大量实例化时,内存节省与访问加速效果可观。 最后补充:dataclass 亦可结合 slots 使用!
我见太多人异常处理用错。或许你也中招。以下场景耳熟吗? 写代码时知道调用库可能抛异常,但记不清具体哪个。此时极易用“捕获一切”块图省事继续写业务逻辑。 目录 最坏写法 稍好但仍不推荐的全捕获 更坑人的情况 只捕获你能处理的 结论 最坏写法 最糟是裸 except: 捕获一切: try: ... except: pass 危害: 1. 完全不知还可能抛出何种异常。 2. 用 pass 静默吞掉异常,等于埋雷。 更甚者,裸 except 等同 except BaseException,连 KeyboardInterrupt (Ctrl+C)、SystemExit、NameEr
对许多人而言,Python 调试等于到处加 print 语句,再根据输出猜代码逻辑。这非最佳,但不知为何大家就是不愿碰 Python 调试器。 目录 用 print 调试 设置 Python 调试器断点 使用 Python 调试器 Python 调试器命令 持续学习 用 print 调试 若你也是用 print 调试派,我不评判。学 Python 难,编程难,生活难。若已举步维艰,再学新工具确嫌累。塞个 print……就是省事。坦白说:我现在也常这么干,没那么糟糕。 但我要教个小窍门:同样省事,却给你无限调试超能力,想征服世界随时可用。 设置 Python 调试器断点 无需 IDE 也能
什么是 Python 模块? 模块是单个 Python 文件,可包含变量、函数、类。文件名为 guru99.py 时,模块名为 guru99。模块将大程序拆分为逻辑片段,保持代码组织有序、可复用。 为什么要导入模块? 使用其他文件定义的代码必须导入。导入获得模块函数、类、变量访问权,类似 JavaScript、Java、Ruby 的 import 关键字。 创建与导入模块 通过简单示例演示。 文件夹结构: modtest/ test.py display.py 1. 创建 test.py: def display_message(): return Welcome to Gur
Python 提供多进程和多线程加速工作负载。本指南带你创建健壮的线程应用,深入理解全局解释器锁 (GIL),并规避死锁、竞态条件等常见陷阱。 什么是线程? 线程是单进程内的轻量执行单元。线程共享进程内存空间,实现高效数据交换,操作系统将其调度在单个或多个 CPU 核心上并发运行。 什么是进程? 进程是独立程序实例。启动应用(如浏览器、文本编辑器)时,OS 创建独立进程,拥有自己的代码、数据和内存映射。 Python 多线程基础 Python threading 模块提供高级 API 管理线程,遗留 _thread 模块已弃用仅保留兼容性。线程适合 I/O 密集型任务,CPU 密集型工作应用
Python