前言 Python 是目前最流行、最易学的编程语言之一。它以语法简洁、可读性强、生态丰富 著称,广泛应用于 Web 开发、数据分析、人工智能、自动化脚本等领域。
本文将从零开始,带你系统掌握 Python 的核心基础。
为什么选择 Python?
优势
说明
📖 语法简洁
接近自然语言,代码量通常是 Java/C++ 的 1/3~1/5
🚀 上手极快
无需编译,写完即运行
📦 生态丰富
PyPI 上超过 50 万个第三方包
🎯 应用广泛
Web、爬虫、AI、自动化测试、数据科学
👨👩👧👦 社区活跃
遇到问题容易找到答案
一、环境搭建 1.1 安装 Python 从 python.org 下载安装。安装时务必勾选 “Add Python to PATH” 。
Linux 安装:
1 sudo apt install python3 python3-pip
验证安装:
1 2 3 4 5 python3 --version pip3 --version
1.2 运行 Python 代码 1 2 3 4 5 python3 python3 hello.py
二、第一个 Python 程序 1 2 3 print ("Hello, 七月小站!" )print ("你好,世界!" )
运行:
三、变量与数据类型 3.1 变量 Python 是动态类型语言,变量无需声明类型:
1 2 3 4 5 6 7 8 9 10 11 12 name = "July" age = 25 height = 1.75 is_student = False a, b, c = 1 , 2 , 3 x = y = z = 100 print (type (name)) print (type (age))
3.2 数字类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 n1 = 100 n2 = -50 big = 12345678901234567890 pi = 3.14159 e = 2.71828 c = 3 + 4j print (10 + 3 ) print (10 - 3 ) print (10 * 3 ) print (10 / 3 ) print (10 // 3 ) print (10 % 3 ) print (10 ** 3 )
3.3 字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 s1 = '单引号' s2 = "双引号" s3 = """可以跨行的 三引号字符串""" name = "July" greeting = "你好, " + name repeat = "Ha" * 3 formatted = f"{name} ,欢迎来到博客!" print (formatted) s = " Hello, Python! " print (s.strip()) print (s.upper()) print (s.lower()) print (s.replace("Python" , "World" ))print (s.split("," )) print (len (s)) print ("Py" in s) print (s[3 :8 ])
3.4 格式化输出 1 2 3 4 5 6 7 8 9 10 11 12 name = "July" age = 25 score = 99.5 print (f"我是{name} ,今年{age} 岁,成绩{score} 分" )print ("我是{},今年{}岁,成绩{:.1f}分" .format (name, age, score))print ("我是%s,今年%d岁,成绩%.1f分" % (name, age, score))
四、常用数据结构 4.1 列表(list)— 有序可变序列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 fruits = ["苹果" , "香蕉" , "橘子" , "草莓" ] mixed = [1 , "hello" , 3.14 , True ] nested = [[1 , 2 ], [3 , 4 ]] empty = [] dup = [0 ] * 5 print (fruits[0 ]) print (fruits[-1 ]) print (fruits[1 :3 ]) fruits[0 ] = "芒果" fruits.append("葡萄" ) fruits.insert(1 , "西瓜" ) fruits.extend(["樱桃" , "榴莲" ]) fruits.remove("香蕉" ) popped = fruits.pop() popped = fruits.pop(0 ) del fruits[2 ] fruits.clear() for fruit in fruits: print (fruit, end=" " ) for i, fruit in enumerate (fruits): print (f"{i} : {fruit} " ) squares = [x**2 for x in range (10 )] evens = [x for x in range (20 ) if x % 2 == 0 ] pairs = [(x, y) for x in range (2 ) for y in range (2 )] print (len (fruits)) print ("苹果" in fruits) fruits.sort() fruits.sort(reverse=True ) sorted_list = sorted (fruits) fruits.reverse()
4.2 元组(tuple)— 有序不可变序列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 point = (3 , 4 ) rgb = (255 , 128 , 0 ) single = (42 ,) empty = () x, y = point a, b = b, a coords = [(1 , 2 ), (3 , 4 )] t = ([1 , 2 ], 3 ) t[0 ].append(3 )
4.3 字典(dict)— 键值对 ⭐ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 person = { "name" : "July" , "age" : 25 , "city" : "深圳" , "hobbies" : ["编程" , "阅读" , "摄影" ] } empty_dict = {} numbered = dict (a=1 , b=2 , c=3 ) person["email" ] = "july@example.com" person["age" ] = 26 del person["city" ] person.pop("email" ) name = person["name" ] name = person.get("name" , "匿名" ) data = {"user" : {"profile" : {"name" : "July" }}} print (data.get("user" , {}).get("profile" , {}).get("name" ))for key in person: print (f"{key} : {person[key]} " ) for key, value in person.items(): print (f"{key} : {value} " ) if "name" in person: print ("name 存在" ) squares_dict = {x: x**2 for x in range (5 )} a = {"x" : 1 , "y" : 2 } b = {"y" : 3 , "z" : 4 } merged = a | b
常用字典场景 — 统计词频:
1 2 3 4 5 6 text = "hello world hello python world world" words = text.split() freq = {} for word in words: freq[word] = freq.get(word, 0 ) + 1 print (freq)
4.4 集合(set)— 无序不重复集合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 s = {1 , 2 , 3 , 4 , 5 } empty_set = set () nums = [1 , 2 , 2 , 3 , 3 , 3 , 4 ] unique = list (set (nums)) a = {1 , 2 , 3 , 4 } b = {3 , 4 , 5 , 6 } print (a | b) print (a & b) print (a - b) print (a ^ b) s.add(6 ) s.remove(1 ) s.discard(10 )
五、流程控制 5.1 if / elif / else 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 score = 85 if score >= 90 : grade = "A" elif score >= 80 : grade = "B" elif score >= 60 : grade = "C" else : grade = "D" print (f"成绩等级: {grade} " )status = "成年" if age >= 18 else "未成年" x = 10 if 0 < x < 20 : print ("x 在 0 到 20 之间" )
5.2 for 循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 fruits = ["苹果" , "香蕉" , "橘子" ] for fruit in fruits: print (f"我喜欢{fruit} " ) for i in range (5 ): print (i) for i in range (2 , 8 ): print (i) for i in range (1 , 10 , 2 ): print (i) for i in range (10 , 0 , -1 ): print (i) for i in range (5 ): if i == 100 : break else : print ("循环正常结束,没有被中断" )
5.3 while 循环 1 2 3 4 5 6 7 8 9 10 11 count = 0 while count < 5 : print (count) count += 1 while True : user_input = input ("输入 q 退出: " ) if user_input == "q" : break print (f"你输入了: {user_input} " )
5.4 break / continue 1 2 3 4 5 6 7 8 9 10 11 for i in range (10 ): if i == 5 : break print (i) for i in range (5 ): if i == 2 : continue print (i)
六、函数 6.1 基本函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 def greet (name ): """向指定的人打招呼(文档字符串)""" return f"你好,{name} !" def add (a, b ): return a + b def power (x, n=2 ): return x ** n print (power(n=3 , x=2 )) def sum_all (*args ): return sum (args) print (sum_all(1 , 2 , 3 , 4 , 5 )) def info (**kwargs ): for key, value in kwargs.items(): print (f"{key} : {value} " ) info(name="July" , age=25 , city="深圳" ) def calculate (price: float , quantity: int ) -> float : return price * quantity
6.2 Lambda 表达式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 square = lambda x: x ** 2 print (square(5 )) nums = [1 , 2 , 3 , 4 , 5 ] doubled = list (map (lambda x: x * 2 , nums)) evens = list (filter (lambda x: x % 2 == 0 , nums)) students = [ {"name" : "张三" , "score" : 85 }, {"name" : "李四" , "score" : 92 }, {"name" : "王五" , "score" : 78 }, ] sorted_students = sorted (students, key=lambda s: s["score" ], reverse=True )
6.3 作用域规则 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x = "global" def outer (): x = "enclosing" def inner (): x = "local" print (x) inner() outer() print (x)
七、面向对象编程(OOP) 7.1 类与对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 class User : """用户类""" count = 0 def __init__ (self, username, email, age=18 ): self .username = username self .email = email self ._age = age self .__password = "123456" User.count += 1 def greet (self ): return f"你好,我是{self.username} " @property def age (self ): return self ._age @age.setter def age (self, value ): if value < 0 : raise ValueError("年龄不能为负" ) self ._age = value @classmethod def get_count (cls ): return cls.count @staticmethod def validate_email (email ): return "@" in email and "." in email def __str__ (self ): return f"User({self.username} )" def __repr__ (self ): return f"User(username='{self.username} ', email='{self.email} ')" user1 = User("july" , "july@example.com" , 25 ) user2 = User("zhangsan" , "zhangsan@example.com" ) print (user1.greet()) print (User.count) print (User.validate_email("test@x" )) print (user1.age) user1.age = 26
7.2 继承 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class Animal : def __init__ (self, name ): self .name = name def speak (self ): return "..." class Dog (Animal ): def __init__ (self, name, breed ): super ().__init__(name) self .breed = breed def speak (self ): return "汪汪汪!" class Cat (Animal ): def speak (self ): return "喵喵喵!" animals = [Dog("旺财" , "金毛" ), Cat("小花" )] for animal in animals: print (f"{animal.name} 说: {animal.speak()} " ) class Flyable : def fly (self ): return "飞起来了" class Swimmable : def swim (self ): return "游起来了" class Duck (Animal, Flyable, Swimmable): def speak (self ): return "嘎嘎嘎!" duck = Duck("唐老鸭" ) print (duck.fly()) print (duck.swim())
八、异常处理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 try : num = int (input ("请输入一个数字: " )) result = 10 / num print (f"10 / {num} = {result} " ) except ValueError: print ("请输入有效的数字!" ) except ZeroDivisionError: print ("除数不能为零!" ) except Exception as e: print (f"发生未知错误: {e} " ) else : print ("执行成功!" ) finally : print ("无论是否异常都会执行" ) class InvalidAgeError (Exception ): def __init__ (self, age ): self .age = age super ().__init__(f"无效的年龄: {age} " ) def set_age (age ): if age < 0 or age > 150 : raise InvalidAgeError(age) print (f"年龄设置为 {age} " ) with open ("data.txt" , "r" , encoding="utf-8" ) as f: content = f.read()
九、文件操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 with open ("data.txt" , "r" , encoding="utf-8" ) as f: content = f.read() with open ("data.txt" , "r" , encoding="utf-8" ) as f: for line in f: print (line.strip()) with open ("data.txt" , "r" , encoding="utf-8" ) as f: lines = f.readlines() with open ("output.txt" , "w" , encoding="utf-8" ) as f: f.write("Hello, World!\n" ) f.write("第二行内容\n" ) with open ("output.txt" , "a" , encoding="utf-8" ) as f: f.write("追加的一行\n" ) lines = ["第一行\n" , "第二行\n" , "第三行\n" ] with open ("output.txt" , "w" , encoding="utf-8" ) as f: f.writelines(lines)
JSON 操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import jsondata = { "name" : "July" , "age" : 25 , "hobbies" : ["编程" , "阅读" ] } with open ("data.json" , "w" , encoding="utf-8" ) as f: json.dump(data, f, ensure_ascii=False , indent=2 ) with open ("data.json" , "r" , encoding="utf-8" ) as f: data = json.load(f) print (data["name" ])json_str = json.dumps(data, ensure_ascii=False ) data_back = json.loads(json_str)
CSV 操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import csvwith open ("users.csv" , "w" , newline="" , encoding="utf-8" ) as f: writer = csv.writer(f) writer.writerow(["姓名" , "年龄" , "城市" ]) writer.writerow(["张三" , 25 , "北京" ]) writer.writerow(["李四" , 30 , "上海" ]) with open ("users.csv" , "r" , encoding="utf-8" ) as f: reader = csv.DictReader(f) for row in reader: print (f"{row['姓名' ]} , {row['年龄' ]} 岁" )
十、常用标准库 10.1 os — 操作系统接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import osprint (os.getcwd()) os.chdir("/tmp" ) os.listdir("." ) os.mkdir("new_folder" ) os.makedirs("a/b/c" ) os.remove("file.txt" ) os.rmdir("empty_folder" ) os.rename("old.txt" , "new.txt" ) path = os.path.join("dir" , "subdir" , "file.txt" ) print (os.path.exists(path)) print (os.path.isfile(path)) print (os.path.isdir(path)) dir_part, file_part = os.path.split(path) name, ext = os.path.splitext("data.txt" ) print (os.environ.get("HOME" ))os.environ["MY_VAR" ] = "hello"
10.2 sys — 系统相关 1 2 3 4 5 6 7 8 9 10 import sysprint (sys.version) print (sys.argv) print (sys.platform) if len (sys.argv) > 1 : print (f"参数: {sys.argv[1 :]} " )
10.3 datetime — 日期时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from datetime import datetime, date, timedeltanow = datetime.now() print (now) print (now.strftime("%Y-%m-%d %H:%M:%S" )) birthday = datetime.strptime("2000-01-01" , "%Y-%m-%d" ) tomorrow = now + timedelta(days=1 ) yesterday = now - timedelta(days=1 ) one_hour_later = now + timedelta(hours=1 ) diff = now - birthday print (f"已出生 {diff.days} 天" )today = date.today() print (today.year, today.month, today.day)
常用日期格式符:
符号
含义
示例
%Y
四位年份
2026
%m
月份(01-12)
05
%d
日期(01-31)
30
%H
小时(00-23)
17
%M
分钟(00-59)
30
%S
秒(00-59)
45
10.4 random — 随机数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import randomprint (random.random()) print (random.randint(1 , 100 )) print (random.choice(["A" , "B" , "C" , "D" ])) print (random.sample(range (100 ), 5 )) cards = [1 , 2 , 3 , 4 , 5 ] random.shuffle(cards) import stringchars = string.ascii_letters + string.digits password = "" .join(random.choices(chars, k=16 )) print (f"随机密码: {password} " )
10.5 re — 正则表达式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import retext = "联系方式: july@example.com, 电话: 13800138000" match = re.search(r"(\w+)@(\w+\.\w+)" , text)if match : print (f"邮箱: {match .group()} " ) print (f"用户名: {match .group(1 )} " ) print (f"域名: {match .group(2 )} " ) phone_numbers = re.findall(r"\d{11}" , text) print (phone_numbers) censored = re.sub(r"\d{11}" , "***" , text) print (censored)
十一、第三方库安装 1 2 3 4 5 6 7 8 9 10 11 12 13 pip install requests pip install pandas pip install flask pip list pip install -r requirements.txt pip freeze > requirements.txt
requests — HTTP 请求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import requestsresponse = requests.get("https://api.github.com/users/octocat" ) print (response.status_code) user_data = response.json() print (user_data["login" ]) data = {"title" : "文章标题" , "content" : "文章内容" } resp = requests.post("https://httpbin.org/post" , json=data) print (resp.json())headers = {"Authorization" : "Bearer token123" } params = {"page" : 1 , "size" : 10 } resp = requests.get("https://api.example.com/users" , headers=headers, params=params) try : resp = requests.get("https://example.com" , timeout=5 ) resp.raise_for_status() except requests.exceptions.Timeout: print ("请求超时" ) except requests.exceptions.RequestException as e: print (f"请求失败: {e} " )
十二、实战:Todo 命令行应用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 """简易 Todo 应用""" import jsonimport sysfrom datetime import datetimeTODO_FILE = "todos.json" def load_todos (): try : with open (TODO_FILE, "r" , encoding="utf-8" ) as f: return json.load(f) except FileNotFoundError: return [] def save_todos (todos ): with open (TODO_FILE, "w" , encoding="utf-8" ) as f: json.dump(todos, f, ensure_ascii=False , indent=2 ) def list_todos (todos ): if not todos: print ("暂无待办事项 🎉" ) return print ("\n===== 待办列表 =====" ) for i, todo in enumerate (todos, 1 ): status = "✅" if todo["done" ] else "⬜" print (f" {status} {i} . {todo['title' ]} ({todo['created' ]} )" ) print () def add_todo (todos, title ): todos.append({ "title" : title, "done" : False , "created" : datetime.now().strftime("%Y-%m-%d %H:%M" ) }) save_todos(todos) print (f"✅ 已添加: {title} " ) def mark_done (todos, index ): if 0 <= index < len (todos): todos[index]["done" ] = True save_todos(todos) print (f"✅ 已完成: {todos[index]['title' ]} " ) def delete_todo (todos, index ): if 0 <= index < len (todos): title = todos[index]["title" ] todos.pop(index) save_todos(todos) print (f"🗑️ 已删除: {title} " ) def main (): todos = load_todos() if len (sys.argv) < 2 : list_todos(todos) print ("用法: python3 todo.py [add|done|del|list] [参数]" ) return command = sys.argv[1 ] if command == "add" : title = " " .join(sys.argv[2 :]) if len (sys.argv) > 2 else input ("标题: " ) add_todo(todos, title) elif command == "done" : index = int (sys.argv[2 ]) - 1 mark_done(todos, index) elif command == "del" : index = int (sys.argv[2 ]) - 1 delete_todo(todos, index) elif command == "list" : list_todos(todos) else : print (f"未知命令: {command} " ) if __name__ == "__main__" : main()
使用演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 python3 todo.py add "买水果" python3 todo.py add "完成博客文章" python3 todo.py list python3 todo.py done 1
常用 Python 命令速查
命令
说明
python3 file.py
运行 Python 脚本
python3 -c "code"
执行一行代码
python3 -m module
以模块方式运行
python3 -m http.server 8000
启动简易 HTTP 服务器
python3 -m venv venv
创建虚拟环境
source venv/bin/activate
激活虚拟环境
deactivate
退出虚拟环境
pip install pkg
安装包
pip uninstall pkg
卸载包
pip list
列出已安装包
进一步学习
Web 框架 :Flask(轻量)、Django(全栈)、FastAPI(高性能)
数据科学三剑客 :NumPy + Pandas + Matplotlib
爬虫 :requests + BeautifulSoup + Scrapy
自动化 :Selenium、pyautogui、schedule
虚拟环境 :venv / Poetry(依赖管理和打包)
结语 Python 的哲学是”优雅、明确、简单”(import this 可查看 Python 之禅)。它可能是最适合初学者的编程语言,同时功能也足够强大来支撑工业级项目。
本文涵盖了 Python 开发中最核心的基础知识。最重要的一步 :打开终端,敲下 python3,把每个示例都亲手跑一遍!
Life is short, you need Python. 🐍