Python 3 是一种易学易用的高级编程语言,具有简洁清晰的语法结构。
目录
1. 编码
-
默认编码:
-
Python3 源码文件默认使用 UTF-8 编码
-
所有字符串都是 Unicode 字符串
-
-
编码声明:
-
当文件包含非 ASCII 字符(如中文、日文等)时,建议在文件开头声明编码
-
声明方式:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- -
必须放在文件第1行或第2行(如果有shebang)
-
#!/usr/bin/env python3 这一行(称为 Shebang 或 Hashbang)在 Unix/Linux/macOS 系统上会被执行,但在 Windows 上不会被执行。它的作用是指定脚本的解释器路径。
具体行为:
-
在 Unix/Linux/macOS 系统上:
-
当你直接运行脚本(例如
./script.py)时,操作系统会读取 Shebang 行,并使用/usr/bin/env python3来查找并调用python3解释器执行脚本。 -
如果
python3在PATH环境变量中,/usr/bin/env python3会自动找到它,这样可以避免硬编码 Python 的绝对路径(更灵活)。
-
-
在 Windows 系统上:
-
Windows 不依赖 Shebang 行来确定如何执行脚本。
-
通常是通过文件关联(如
.py文件默认用 Python 解释器运行)或显式调用python script.py来执行。 -
但 Shebang 行会被 Python 解释器忽略(因为它只是注释),所以不影响脚本运行。
-
# -*- coding: utf-8 -*- 是 Python 2/3 源码文件的 编码声明(Encoding Declaration),用于指定该文件的字符编码格式。
思考:
![]()
在 Python 中,# 确实是单行注释符号,它后面的内容会被 Python 解释器忽略。但 # -*- coding: utf-8 -*- 是一个特殊注释,Python 解释器会主动解析它,以确定源码文件的编码方式。
为什么 # -*- coding: utf-8 -*- 会被 Python 解析?
虽然它看起来是注释,但 Python 在解析文件的前两行时,会专门查找 coding: 声明,以确定文件的编码格式。
这是 Python 的语法规则,类似于 Shebang(#!/usr/bin/env python3)在 Unix 系统上的特殊作用。
Python 如何处理 # -*- coding: utf-8 -*- ?
Python 解释器在读取文件时:
1.先检查文件的前两行,查找 coding: 或 coding= 这样的模式。
2.如果找到,就按照指定的编码(如 utf-8、gbk 等)解码文件内容。
3.如果没找到,Python 3 默认用 UTF-8,Python 2 默认用 ASCII。
2. 标识符
-
命名规则:
-
首字符:字母(a-z, A-Z)或下划线
_ -
其余部分:字母、数字和下划线
-
大小写敏感(
count≠Count) -
长度无严格限制(建议20字符以内)
-
不能使用关键字作为标识符
-
-
合法标识符示例:
name = "Alice" _private = "secret" user1 = "Bob" MAX_SIZE = 100 -
非法标识符示例:
2name = "error" # 不能以数字开头 class = "wrong" # 不能使用关键字 first-name = "bad" # 不能包含连字符 -
Unicode 标识符:
-
Python3 支持 Unicode 字符作为标识符
变量 = "值" # 中文变量名 π = 3.14159 # 希腊字母
-
3. 关键字
-
查看所有关键字:
>>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] >>> -
常见关键字:
类别 关键字 说明 逻辑值 True布尔真值 False布尔假值 None表示空值或无值 逻辑运算 and逻辑与运算 or逻辑或运算 not逻辑非运算 条件控制 if条件判断语句 elif否则如果(else if 的缩写) else否则分支 循环控制 for迭代循环 while条件循环 break跳出循环 continue跳过当前循环的剩余部分,进入下一次迭代 异常处理 try尝试执行代码块 except捕获异常 finally无论是否发生异常都会执行的代码块 raise抛出异常 函数定义 def定义函数 return从函数返回值 lambda创建匿名函数 类与对象 class定义类 del删除对象引用 模块导入 import导入模块 from从模块导入特定部分 as为导入的模块或对象创建别名 作用域 global声明全局变量 nonlocal声明非局部变量(用于嵌套函数) 异步编程 async声明异步函数 await等待异步操作完成 其他 assert断言,用于测试条件是否为真 in检查成员关系 is检查对象身份(是否是同一个对象) pass空语句,用于占位 with上下文管理器,用于资源管理 yield从生成器函数返回值
4. 注释
-
单行注释:
# 这是一个单行注释 -
多行注释(实际是多行字符串,常被用作注释):
# 第一个注释 # 第二个注释 ''' 第三注释 第四注释 ''' """ 这是多行注释 可以跨越多行 通常用于文档字符串 """
5. 行与缩进
-
Python 使用缩进来表示代码块
-
规则:
-
同一代码块必须保持相同缩进
-
通常使用4个空格(推荐)
-
不要混用空格和制表符
-
if True:
print("正确") # 缩进4个空格
print("仍在if块内")
print("已退出if块")
6. 多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句
-
显式续行(使用反斜杠):
total = item_one + \ item_two + \ item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \
-
隐式续行(括号、方括号、花括号内自动续行):
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] - 空行:
-
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
-
空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
7. 数字(Number)类型
-
基本类型:
-
整型
int:10,-5,0x1F(十六进制) -
浮点型
float:3.14,-2.5,3e8(科学计数法) -
布尔型
bool:True,False(实际上是int的子类) -
复数
complex:1+2j
-
-
类型转换:
int(3.14) # 3 float(3) # 3.0 bool(1) # True
8. 字符串(String)
|
|
|
|
|
|
|
|
|
|
|
#!/usr/bin/python3
str='123456789'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第六个的字符(不包含)
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
-
表示方式:
str1 = '单引号' str2 = "双引号" str3 = """多行 字符串""" -
常用操作:
"Hello" + "World" # 拼接 "Hi" * 3 # 重复 len("Python") # 长度 "Py" in "Python" # 包含检查 -
格式化(f-string,Python 3.6+推荐):
name = "Alice" age = 25 print(f"{name} is {age} years old")
9. 语句代码组
同一行显示多条语句
Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割
#!/usr/bin/python3
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
-
复合语句(由头部和代码组组成):
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。 我们将首行及后面的代码组称为一个子句(clause)。
-
if condition: statement1 statement2 elif another_condition: statement3 else: statement4
10. 输入/输出
-
输入:
name = input("请输入你的名字:") -
输出:
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
print("Hello", name, end="!") # end参数指定结尾字符
name = input("请输入你的名字:")
print("Hello", name, end="!") # end参数指定结尾字符

11. 导入模块
-
基本导入:
-
导入整个模块
-
使用时需要通过模块名访问其中的内容:
module_name.function_name
-
import math
print(math.sqrt(16))
-
从模块导入特定内容:
-
从模块中导入特定的函数、类或变量
-
使用时可以直接使用名称,无需模块名前缀
-
from math import sqrt, pi
print(sqrt(16)) # 4.0
print(pi) # 3.141592653589793
- 导入所有内容(不推荐)
- 导入模块中的所有内容(除了以下划线开头的)
- 可能导致命名冲突,不利于代码可读性
from math import *
print(sin(pi/2)) # 1.0
-
给模块或导入项起别名
-
当模块名或函数名太长或有冲突时使用
-
import numpy as np
-
相对导入(在包内部使用)
-
主要用于包内部的模块相互引用
-
点号表示相对路径
-
from . import module_name # 同目录下的模块
from .. import module_name # 上级目录的模块
from .submodule import name # 子模块中的内容
实践建议
-
优先使用
import module形式,明确命名空间 -
需要频繁使用的函数/类可以使用
from module import name -
避免使用
from module import * -
长模块名使用
as创建简短别名 -
按照 PEP 8 规范组织导入语句:
-
标准库模块
-
第三方库模块
-
本地应用/库模块
-
每组之间用空行分隔
-
import os
import sys
import numpy as np
import pandas as pd
from mypackage import utils
from . import helpers
12. 命令行参数
1. 动态配置程序行为
-
允许用户在不修改代码的情况下调整程序运行方式。
-
python script.py --mode fast --output result.txt这里的
--mode和--output可以改变程序的运行模式或输出位置。
2. 传递输入数据
-
可以直接通过命令行传入数据,如文件名、数值、字符串等。
-
python process_data.py input.csv --format json这里
input.csv是输入文件,--format json指定输出格式。
3. 控制程序流程
-
通过参数决定是否执行某些功能(如
--verbose开启详细日志)。 -
python backup.py --all --compress这里的
--all表示备份所有文件,--compress表示启用压缩。
4. 提供帮助信息
-
使用
-h或--help自动生成帮助文档(argparse默认支持)。 -
python script.py --help会显示所有可用参数及其说明。
5. 适用于自动化脚本
-
在 Shell 脚本、Cron 任务或 CI/CD 流水线中,可以通过命令行参数灵活调用 Python 程序。
-
python deploy.py --env production --force这里的
--env指定部署环境,--force强制部署。
常见使用场景
| 场景 | 示例 | 说明 |
|---|---|---|
| 文件处理 | python convert.py input.txt --format PDF | 转换文件格式 |
| 数据分析 | python analyze.py data.csv --method regression | 选择分析方法 |
| Web 爬虫 | python crawler.py --url example.com --depth 3 | 控制爬取深度 |
| 机器学习 | python train.py --epochs 100 --batch_size 32 | 调整训练参数 |
| 系统管理 | python backup.py --dir /home/user --zip | 备份并压缩目录 |
Python 命令行参数处理方式对比
| 方法 | 适用场景 | 特点 |
|---|---|---|
sys.argv | 简单脚本 | 直接访问参数列表,但功能有限 |
argparse | 复杂参数(推荐) | 支持选项、默认值、帮助文档等 |
getopt | 类似 C 的 getopt() | 适用于短选项(-f)和长选项(--file) |
click | CLI 应用开发 | 更高级,支持命令组、颜色输出等 |
fire | 快速生成 CLI | 自动将函数转换为命令行工具 |
总结
Python 命令行参数的主要作用是:
-
动态控制程序行为(如
--debug开启调试模式)。 -
传递输入数据(如文件名、配置参数)。
-
增强脚本灵活性(适用于自动化任务)。
-
提供用户友好的交互(如
--help显示帮助)。 -
适用于各种场景(数据分析、爬虫、系统管理等)。
对于大多数情况,推荐使用 argparse,因为它功能强大且易于使用。如果是更复杂的 CLI 工具,可以考虑 click 或 fire。
1474

被折叠的 条评论
为什么被折叠?



