1.2.1 Python 编码
在 Python 中,# -*- coding: utf-8 -*- 用于声明文件编码为 UTF-8,确保含中文等非 ASCII 字符的代码正常运行。
- Python 3:默认 UTF-8,可省略,但建议添加避免跨平台问题。
- Python 2:默认 ASCII,必须添加,否则含非 ASCII 字符(例如中文的代码)会报错。
- 位置:首行或第二行(若首行是 Shebang)。
# -*- coding: utf-8 -*- # Emacs 风格
# coding: utf-8 # 简化写法
# vim: set fileencoding=utf-8 : # Vim 风格
1.2.2 Python 注释
1. 注释的用途
- 注释可用于解释 Python 代码
- 注释可用于提高代码的可读性
- 在调试代码时,可以使用注释来阻止执行
- 提供函数、类、模块的文档说明
2. 单行注释
- 使用
#符号开头 - 可以放在代码行的末尾
- 不会占用内存
# 这是一个单行注释
print("Hello")
print("Hello") # 这也是一个单行注释
# 比较重要的注释段, 使用多个等号隔开, 可以更加醒目, 突出重要性
# =====================================
# 此处禁止修改 !!!
# =====================================
说明:也并非所有 #开头的都是无用代码,比如
#!/usr/bin/env python3 # 声明解释器, 参考shell
# -*- coding: utf-8 -*- # 编码声明
3. 多行注释
- 使用三引号(
'''或""") - 可以跨越多行
- 常用于文档字符串(Docstring)
"""
这是多行注释
可以包含多行内容
用于详细说明代码功能
"""
4. 最佳实践
- 保持注释简洁明了
- 文档注释不是越长越好, 通常一两句话能把情况说清楚即可
- 遵循PEP 257文档字符串规范
- 注释应该与代码保持相同的缩进级别
5. IDE支持
- 大多数IDE支持注释的自动格式化
- 支持文档字符串的自动生成
- 提供注释的语法高亮
- 支持注释的折叠功能
1.2.3 Python 缩进
1 基本规则
在 Python 中,缩进不仅仅是代码风格问题,更是代码块界定的方式,替代其他语言的{}:
- 同一代码块内的所有语句必须保持相同缩进量
- 严格禁止混用空格和 Tab(多数编辑器支持自动转换)
- PEP 8 推荐:使用 4 个空格作为标准缩进单位
- 控制结构(if/for/while)、函数 / 类定义后需使用冒号
:开启缩进块
def example_function():
if True:
print("这是第一级缩进")
if True:
print("这是第二级缩进")
print("这是第一级缩进")
2. 常见错误
- 缩进不一致会导致
IndentationError - 混用空格和制表符会导致
TabError - 缩进过多或过少都会导致语法错误
3. 最佳实践
- 始终使用4个空格进行缩进
- 在编辑器中设置自动将Tab转换为空格
- 保持一致的缩进风格
- 使用编辑器的自动缩进功能
1.2.4 Python 命名
Python 命名是,要避开关键字。
| 元素 | 命名风格 | 示例 |
|---|---|---|
| 模块 | 小写 + 下划线 | http_client.py |
| 类 | 驼峰式 | class HttpClient |
| 函数 / 方法 | 小写 + 下划线 | get_response() |
| 变量 | 小写 + 下划线 | request_data |
| 常量 | 全大写 + 下划线 | MAX_CONNECTIONS |
1. 模块
模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
# 正确的模块名
import decoder
import html_parser
# 不推荐的模块名
import Decoder
2. 类名
类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
class Farm():
pass
class AnimalFarm(Farm):
pass
class _PrivateFarm(Farm):
pass
将相关的类和顶级函数放在同一个模块里,不像Java, 没必要限制一个类一个模块.
3. 函数
函数名一律小写,如有多个单词,用下划线隔开
def run():
pass
def run_with_env():
pass
私有函数在函数前加一个下划线_
class Person():
def _private_func():
pass
4. 变量名
变量名尽量小写, 如有多个单词,用下划线隔开
if __name__ == '__main__':
count = 0
school_name = ''
5. 常量
常量采用全大写,如有多个单词,使用下划线隔开
MAX_OVERFLOW = 100
Class FooBar:
def foo_bar(self, print_):
print(print_)
1.2.5 Python 关键字
在 Python 中,关键字(Keywords) 是语言内置的特殊标识符,用于定义语法结构和控制程序流程。这些词具有特殊含义,不能用作变量名、函数名或类名。以下是 Python 3.10 版本的 35 个关键字 及其核心用途分类:
可以通过keyword库列出当前版本下的所有关键字:
#!/usr/bin/env python3 # 声明解释器
# -*- coding: utf-8 -*- # 编码声明
import keyword
print(keyword.kwlist) # 输出所有关键字
print(keyword.iskeyword("if")) # 检查if是否为关键字
# 输出关键字个数
all_keywords = keyword.kwlist
print(f"Python 关键字共有 {len(all_keywords)} 个")
以下是根据关键字分类整理的表格:
| 分类 | 关键字列表 |
|---|---|
| 布尔值相关 | True(表示真)、False(表示假)、None(表示空值) |
| 逻辑运算符 | and(逻辑与)、or(逻辑或)、not(逻辑非) |
| 条件控制相关 | if(如果)、elif(否则如果)、else(否则) |
| 循环控制相关 | for(for 循环)、while(while 循环)、break(跳出循环)、continue(继续下一次循环) |
| 函数定义相关 | def(定义函数)、return(返回函数值)、yield(生成器函数返回值)、lambda(定义匿名函数) |
| 类定义相关 | class(定义类) |
| 异常处理相关 | try(尝试执行)、except(捕获异常)、finally(最终执行)、raise(抛出异常)、assert(断言) |
| 模块导入相关 | import(导入模块)、from(从模块导入)、as(给导入的模块或对象起别名) |
| 变量作用域相关 | global(声明全局变量)、nonlocal(声明非局部变量) |
| 其他操作符 | in(判断是否在序列中)、is(判断是否是同一个对象)、del(删除对象)、pass(空操作,占位符) |
| 异步编程相关 | async(定义异步函数)、await(等待异步操作完成) |
| 上下文管理相关 | with(上下文管理器) |
1.2.6 Python 文件结构
#!/usr/bin/env python3 # 声明解释器
# -*- coding: utf-8 -*- # 编码声明
# 注释信息,比如开发者、联系方式、作用
代码块
示例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author:lxf
"""
文件功能:简单的计算器程序
支持加减乘除基本运算
"""
# 常量定义
VERSION = "1.0.0"
SUPPORTED_OPERATIONS = ["+", "-", "*", "/"]
def calculate(num1: float, num2: float, operator: str) -> float:
"""执行基本数学运算"""
if operator not in SUPPORTED_OPERATIONS:
raise ValueError(f"不支持的运算符: {operator}")
if operator == "+":
return num1 + num2
elif operator == "-":
return num1 - num2
elif operator == "*":
return num1 * num2
elif operator == "/":
if num2 == 0:
raise ValueError("除数不能为零")
return num1 / num2
else:
raise ValueError("未知错误")
class Calculator:
"""简单的计算器类,记录历史运算"""
def __init__(self):
self.history = []
def calculate(self, num1: float, num2: float, operator: str) -> float:
result = calculate(num1, num2, operator)
expr = f"{num1} {operator} {num2} = {result}"
self.history.append(expr)
return result
def show_history(self) -> None:
print("运算历史:")
for i, expr in enumerate(self.history, 1):
print(f"{i}. {expr}")
def get_user_input() -> tuple[float, str, float]:
"""获取用户输入的数字和运算符"""
while True:
try:
num1 = float(input("\n请输入第一个数字 (输入q退出): "))
operator = input("请输入运算符: ").strip()
num2 = float(input("请输入第二个数字: "))
return num1, operator, num2
except ValueError as e:
print(f"输入错误: {e}")
def main() -> None:
"""计算器主程序"""
calc = Calculator()
print(f"欢迎使用计算器 v{VERSION}")
print("支持的运算符:", ", ".join(SUPPORTED_OPERATIONS))
while True:
try:
# 获取用户输入
user_input = get_user_input()
num1, operator, num2 = user_input
# 执行计算
result = calc.calculate(num1, num2, operator)
print(f"计算结果: {result}")
# 显示历史
show_history = input("是否查看历史记录? (y/n): ").strip().lower()
if show_history == "y":
calc.show_history()
except ValueError as e:
print(f"错误: {e}")
except KeyboardInterrupt:
print("\n程序已退出")
break
if __name__ == "__main__":
main() # 调用主函数
1.2.7 Python 执行方式
Python项目的三种主要执行方式
1. 交互式执行(Interactive Mode)
- 直接在Python解释器中执行代码
- 特点:适合快速测试和调试小段代码,可以立即看到执行结果,适合学习和实验
python
>>> print("Hello World")
2. 脚本文件执行(Script Mode)
- 通过.py文件执行
- 特点:适合小型到中型项目,代码可以保存和重用,便于版本控制
python script.py
3. 模块化执行(Module Mode)
- 将代码组织成包和模块的形式
- 特点:适合大型项目,支持代码复用和模块化,便于维护和扩展,可以包含多个文件,有清晰的目录结构
# python -m package_name.module_name
python -m http.server 8000
4. Web框架执行(Web Framework Mode)
- 通过 Web 框架(如 FastAPI、Flask、Django 等)运行项目
- 特点:适合 Web 应用开发,支持 HTTP 请求处理,提供完整的 Web 开发功能,便于构建 RESTful API
# 使用 uvicorn 运行 FastAPI 应用
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# 使用 gunicorn 运行 Flask 应用
gunicorn -w 4 -b 0.0.0.0:8000 app:app
# 使用 Django 开发服务器
python manage.py runserver 0.0.0.0:8000
评论区