前言
你一定听说过Python。这门诞生于1991年的编程语言,如今已经是全球最受欢迎的编程语言之一。从网页后台到人工智能,从数据分析到自动化运维,从大学教授到硅谷工程师,Python的身影无处不在。
但你可能不知道的是,Python最初只是一门 "让编程变得快乐" 的语言。它的发明者Guido van Rossum不满意当时主流语言的复杂性,设计了这门简洁、易读、优雅的语言。没想到,三十多年后,Python成了这个时代最具影响力的编程语言。
这篇文章,我们从零开始,一步一步搭建Python环境,运行第一个程序,并系统学习变量与数据类型。为后续的编程之路,打下最坚实的基础。
1、Python是什么?为什么学习Python?
1.1、一门 "会放电" 的语言
Python的Logo是一条蓝色的大蟒蛇,但Python这个名字,其实来源于Guido喜爱的一部英国电视喜剧《Monty Python's Flying Circus》(蒙提·派森的飞行马戏团)。蟒蛇只是Logo,不是名字的来源------Python的真正含义,是那部喜剧带来的幽默精神。
1991年,Guido在荷兰阿姆斯特丹写下了Python的第一行代码。他的目标很简单:让编程变得更简单、更愉快。
三十多年过去了,Python已经成为:
- 全球最受欢迎的编程语言之一(Stack Overflow开发者调查多年位居榜首)
- AI和机器学习领域的事实标准(TensorFlow、PyTorch、Hugging Face全部基于Python)
- 数据科学领域的首选语言(pandas、NumPy、Jupyter生态)
- 自动化运维领域的主流脚本语言(Ansible、Scrapy)
- Web开发领域的重要力量(Django、Flask、FastAPI)
- 教育领域的最佳编程入门语言(全球无数大学用它教编程)
1.2、Python能做什么?
这个问题值得好好回答,因为了解Python的 "能耐",能让你对未来学习方向有更清晰的规划。
1.2.1、数据分析与科学计算
如果你想转行数据分析师,或者做量化交易,Python几乎是必学的语言。pandas库让数据清洗和分析变得前所未有的简单;NumPy提供了高效的数值计算能力;Matplotlib和Seaborn能画出出版级的图表;Jupyter Notebook提供了交互式的编程环境,让数据分析过程一目了然。
python
# 一个简单的数据分析示例:计算班级平均分
scores = [85, 92, 78, 96, 88, 74, 91, 83]
average = sum(scores) / len(scores)
print(f"班级平均分:{average:.2f}")
1.2.2、人工智能与机器学习
TensorFlow 和 PyTorch 是深度学习领域最重要的两个框架,全部以 Python 为主要接口。Hugging Face 的 Transformers 库让自然语言处理(NLP)变得触手可及。OpenCV 让计算视觉应用开发不再困难。
python
# 几行代码就能调用强大的AI模型
from transformers import pipeline
# 加载一个预训练的情感分析模型
classifier = pipeline("sentiment-analysis")
result = classifier("Python is an amazing programming language!")
print(result)
1.2.3、Web开发
Django 是 Python 最成熟的全功能 Web 框架,Instagram、Pinterest、YouTube 等巨头都在使用它。Flask 则是轻量级框架的代表,适合快速开发 API 和小规模应用。FastAPI 是新生代框架,性能极高,自带 API 文档。
python
# 用Flask创建一个最简单的Web服务
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
# app.run() # 运行后访问 http://127.0.0.1:5000 即可看到页面
1.2.4、自动化运维与脚本
Python 是运维工程师的瑞士军刀。Ansible 这个流行的自动化工具本身就是用 Python 写的。Paramiko 让你用 Python 连接 SSH 服务器;Scrapy 可以爬取整个网站的数据;Selenium 能模拟浏览器操作,实现 Web 自动化测试。
python
# 用Python自动备份服务器日志文件
import os
import shutil
from datetime import datetime
backup_dir = f"/tmp/backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
os.makedirs(backup_dir)
shutil.copy("/var/log/syslog", backup_dir)
print(f"备份完成,目录:{backup_dir}")
1.3、Python的设计哲学:import this
Python有一句名言:"batteries included"------电池内置。意思是 Python 标准库已经非常丰富,不需要额外安装就能做很多事。但 Python 更精髓的设计哲学,藏在一条特殊的命令里:
python
import this
当你在 Python 解释器中运行这条命令,会看到这样一段话------这被称为 "Python之禅" (The Zen of Python):
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 than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
翻译过来,核心思想是:
优美胜于丑陋。代码是给人看的,要写得赏心悦目。
显式胜于隐式。让代码的意图一目了然,不要用奇怪的技巧让人看不懂。
简单胜于复杂。能用一行解决的问题,不要写十行。
可读性很重要。代码是给程序员读的,机器只是执行。
应该有一种------而且最好只有一种------显而易见的方式。Python 倾向于提供 "最明显" 的方式来做事情,减少选择困难。
记住这些原则。它们将贯穿你整个Python学习生涯。
1.4、Python 2 vs Python 3:只学Python 3
这是一个必须明确回答的问题:应该学Python 2还是Python 3?
只学Python 3。 这是毫无疑问的。
Python 2 发布于 2000 年,Python 3 发布于 2008 年。两者在语法上存在一些不兼容的地方,比如print语句、/除法的默认行为、字符串编码等。Python 官方在 2020 年 1 月 1 日正式停止了对 Python 2 的支持。现在,所有主流的第三方库、框架、工具、教程都只支持 Python 3。
python
# Python 2 的写法(旧式,不要学):
print "Hello, World!" # print后面不加括号
print "Value is %d" % x # 字符串格式化
# Python 3 的写法(当前标准):
print("Hello, World!") # print是函数,加括号
print(f"Value is {x}") # f-string格式化(更优雅)
本书所有代码均基于 Python 3.10及以上版本,后续不再说明。
2、Python是如何工作的?
2.1、编译型、解释型、字节码型:三种代码执行方式
在开始写代码之前,我们需要理解一个关键问题:代码是如何被计算机执行的?
我们写的代码是人类可以阅读的文本(源代码),但计算机的CPU只能理解二进制指令(机器码)。所以任何编程语言都需要一个 "翻译" 过程,把源代码转换成 CPU 能执行的指令。这个翻译的方式,决定了一门语言的 "类型"。
编译型语言的代表是 C 和 C++。程序员的源代码经过编译器一次性全部翻译成机器码,生成一个独立的可执行文件(比如 Windows 上的 .exe 文件)。之后运行时,不需要源代码,也不需要编译器,直接运行编译好的机器码即可。
源代码(.c文件)
↓ [编译:一次性]
可执行文件(.exe)
↓ [运行:直接执行]
机器码被CPU执行
编译型语言的优点是 "一次编译,多次运行",执行效率高。但缺点是:修改代码后必须重新编译,跨平台(Windows/Linux/Mac)需要分别为每个平台编译。
解释型语言的代表是 JavaScript 和 PHP。解释器逐行读取源代码,逐行翻译成机器码并立即执行。没有单独的编译步骤,修改代码后直接运行即可生效。
源代码(.js文件)
↓ [解释器:逐行翻译执行]
机器码被CPU执行(边翻译边执行)
解释型语言的优点是修改后立即运行,跨平台只需要安装对应平台的解释器。但缺点是每次运行都需要翻译,执行效率通常不如编译型语言。
字节码型语言是上述两种方式的折中,代表是 Python 和 Java。源代码先被编译成一种中间代码(字节码),字节码不是机器码,但也不是源代码,而是一种平台无关的中间表示。然后,一个虚拟机(Virtual Machine)负责执行这些字节码。
源代码(hello.py)
↓ [编译器:内置的py_compiler]
字节码(hello.pyc,跨平台)
↓ [Python虚拟机(PVM):逐行执行字节码]
机器码被CPU执行
Python 属于字节码型,但通常被归类为 "解释型",因为在用户看来,Python程序的运行过程和解释型语言非常相似------ "运行源代码" 即可,无需显式的编译步骤。
Python 的字节码文件(.pyc)保存在__pycache__/目录下:
python
# 第一次运行 hello.py,Python会:
# 1. 调用内置编译器,将 hello.py 编译成 hello.cpython-311.pyc
# 2. 调用Python虚拟机(PVM),执行字节码
# 3. 下次运行时,如果 hello.py 没有变化,直接使用缓存的 .pyc
# 你可以在文件系统中找到字节码文件:
# __pycache__/hello.cpython-311.pyc
2.2、Python的多种实现
当你听说 "Python是一门解释型语言",这里的 "Python" 实际上指的是 CPython ------ 用 C 语言实现的 Python,也是最官方、最广泛使用的 Python 实现。
但 Python 语言本身是一套规范(语法规则、关键字、内置行为),可以有多种实现方式:
| 实现 | 用什么语言写 | 关键特点 | 适用场景 |
|---|---|---|---|
| CPython | C 语言 | 最官方,版本最新,生态最全 | 通用场景,99%的情况用它 |
| Jython | Java | 运行在JVM上,可与 Java 互操作 | Java 项目中嵌入 Python |
| IronPython | C# | 运行在 .NET 上,可与 C# 互操作 | .NET 项目中嵌入 Python |
| PyPy | Python(RPython) | JIT 即时编译,执行速度快 | 对性能要求高的场景 |
初学者不需要关心这些区别,直接使用 CPython 即可。所有第三方库首先支持的也是 CPython。
2.3、验证 Python 安装
在终端(Linux/Mac)中,运行以下命令验证 Python 是否已正确安装:
bash
# 查看Python版本
python3 --version
# 期望输出:Python 3.10.x 或更高版本
# 进入交互式解释器(逐行执行Python代码)
python3
进入交互式解释器后,你会看到类似这样的输出:
Python 3.11.7 (main, Oct 4 2024, 14:00:00)
[GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> 是Python的提示符,表示它正在等待你输入代码:
python
>>> 1 + 1
2
>>> print("Hello, Python!")
Hello, Python!
>>> "hello".upper()
'HELLO'
>>> exit() # 退出交互式解释器