py01_Python的基础语法
Python作为当今最流行的编程语言之一,以其简洁优雅的语法和强大的功能深受开发者喜爱。本文全面解析Python基础语法核心概念,帮助初学者建立扎实的编程基础。
1. 注释:代码的自我说明
- **概述:**注释是代码中不被执行的文本,用于解释代码功能、设计思路和使用方法,显著提升代码可读性和可维护性。在团队协作和长期项目中,良好的注释习惯至关重要。
- 核心作用:
- 提高代码可读性,帮助开发者(包括自己)理解代码逻辑
- 临时屏蔽调试中的代码片段
- 记录代码设计思路、修改历史等关键信息
- 分类和语法:
- 单行注释:
- 语法:以
#开头,其后为注释内容(#与内容间建议加空格,增强可读性) - 范围:仅对当前行
#后的内容生效,换行后注释失效 - 位置:可单独成行,也可置于代码末尾(需与代码间隔至少 1 个空格,一般是2个空格)
- 快捷键(PyCharm 等 IDE):
Ctrl + /(批量注释 / 取消注释多行)
- 语法:以
- 多行注释:
- 语法:使用三对引号(单引号
'''或双引号""")包裹,引号内可自由换行 - 注意事项:
- 不可直接置于代码末尾(会被解释器视为字符串字面量,可能导致语法错误)
- 三对引号包裹的注释本质是未被赋值的字符串常量,若误写在表达式中可能引发逻辑问题
- 多行注释没有快捷键,如果对于多行数据内容进行
Ctrl + /则对于每一行数据进行单行注释
- 语法:使用三对引号(单引号
- 单行注释:
- 最佳实践:
- 注释应 “说明为什么做,而非怎么做”(代码本身已体现执行逻辑)
- 避免过度注释(如 obvious 的代码无需注释)
- 保持注释与代码同步更新(过时的注释比无注释更有害)
- 特殊符号(如
#、引号)必须使用英文标点,否则会触发语法错误(SyntaxError)
- 代码示例:
# print('hello world') # 注释的内容不会被执行 print('单行注释可以放置在代码末尾') # 单行注释 # SyntaxError: invalid syntax 语法错误 # print('多行注释不能放置在代码末尾') '''多行注释不能写在代码末尾''' '''多行注释 多行注释内部可以随意换行, 注释效果依然存在 ''' """ 多行注释,既可以使用单引号,又可以使用多引号,只要引号是三对即可 """
2. 变量:数据的“容器”
- 概述:变量是程序中用于临时存储数据的标识符。
- 核心特性:
- 容器:存储各种类型数据的载体,通过变量名可访问数据
- 临时:数据存储在内存中,程序结束后或内存释放后消失
- 可变:运行中可通过重新赋值修改存储的数据
- 引用:变量本质是 “指向内存中数据的引用”,而非数据本身
- 基本操作:
- 定义:
变量名 = 变量值(=为赋值运算符,非数学中的等号) - 调用:直接使用变量名即可访问其存储的数据
- 修改:通过重新赋值改变变量指向的数据(原数据若无人引用会被内存回收)
- 定义:
- 命名最佳实践:
- 使用描述性名称(如
customer_count而非cc) - 区分大小写(
age与Age不同) - 避免保留字(如
class,def等) - 遵循PEP8规范(小写+下划线)
- 使用描述性名称(如
- 代码示例:
# 变量的定义格式: 变量名 = 变量值 name = 'Tom' age = 18 is_student = True # 变量的调用格式: 直接使用变量名即可调用变量中的数据 print(name) print(age) print(is_student) # 在程序运行过程中还可以修改变量的值 age = 19 print(age)
3. 数据类型:数据的本质
- 概述:Python 是动态类型语言,变量类型由赋值的数据自动推导,无需手动声明,且可随赋值变化而改变。
- Python数据类型体系:
类型 表示 示例 特性 整型(int) 整数 count = 42无大小限制 浮点型(float) 小数 pi = 3.14159双精度浮点 布尔型(bool) 逻辑值 is_valid = TrueTrue/False 字符串(str) 文本 name = "Bob"不可变序列 列表(list) 有序集合 colors = ["red", "green"]可变 元组(tuple) 不可变集合 point = (10, 20)不可变 字典(dict) 键值对 user = {"name": "Alice"}键唯一 集合(set) 无序唯一 ids = {101, 102, 103}元素唯一 - 特点:
- 不同的数据类型在不同的存储区域
- 不同的数据类型使用的数据结构不同
- 不同的数据类型占用的空间大小不同
- 不同的数据类型具备的功能不同
- 提示:
- 类型查询:使用
type(变量/数据)函数 - 未定义变量调用:会触发
NameError(必须先定义后使用) - 命名建议:变量名应 “见名知意”(如
age存储年龄,price存储价格),与类型无关
- 类型查询:使用
- 代码示例:
# 整型 num = 10 print(num) # 10 print(type(num)) # <class 'int'> # 浮点型 price = 12.5 print(price) # 12.5 print(type(price)) # <class 'float'> # 布尔型 has_error = False print(has_error) # False print(type(has_error)) # <class 'bool'> # 字符串类型 #在python中 数据左右两侧加引号的都是字符串类型,可以是单引号也可以是双引号,但是必须是成对,不能一单一双 name = 'euler' print(name) # euler print(type(name)) # <class 'str'> # 变量需要先定义再调用,如果该变量名没有被定义则会报错 # print(age) # NameError: name 'age' is not defined age = 19 print(age) print(type(age)) # 变量名和变量类型没有关系,但是使用时尽可能的见名知意 float1 = 'float' print(float1) # float print(type(float1)) # <class 'str'>
4. 标识符和关键字:命名的 “规则与禁忌”
- 概述:
- **标识符:**程序员自己定义的,有特殊功能的字符组合
- **关键字:**系统或者Python定义的,有特殊功能的字符组合,程序员定义标识符不能使用关键字
- 标识符的命名规则:
- 组成:只能包含字母(A-Z/a-z)、数字(0-9)、下划线(_)
- 开头:不能以数字开头
- 关键字:不能使用 Python 内置关键字(如
if、for) - 大小写:严格区分(
name与Name是两个不同变量)
- 标识符的命名规范:
- 大驼峰命名法:每个单词首字母大写
- 小驼峰命名法:除了首字母外其余单词首字母大写,studentSystem
- 下划线分隔法:单词中间用下划线分隔开,也叫蛇形命名法
- 标识符要做到见名知意,增强代码的可读性
- 不要使用单个字母加数字的方式命名,容易混淆
- 专业命名规范:
类型 规范 示例 变量/函数 蛇形命名法 calculate_total类名 大驼峰命名法 CustomerAccount常量 全大写+下划线 MAX_CONNECTIONS模块 小写短名称 data_utils.py - 代码示例:
# 只能由字母数字,下划线组成 a123___456 = 789 print(a123___456) # a123_$_456 = 789 # SyntaxError: invalid decimal literal # a123_ _456 = 789 # SyntaxError: invalid decimal literal # 不能以数字开头 # 123a = 123 # SyntaxError: invalid decimal literal # print(123a) # 不能使用关键字 # False = 123 # SyntaxError: cannot assign to False # print(False) # 严格区分大小写 # a = 10 # print(A) # NameError: name 'A' is not defined
5. 输出:程序的“反馈机制”
- **概述:**通过
print()函数向用户输出数据,支持多种输出形式和参数配置。 - **普通输出:**使用
print()函数输出数据- 可以输出任意类型的数据或表达式
- 可以通过变量名进行输出
- 可以同时输出多个值,默认用空格分隔
- **格式化输出:**按指定格式输出数据,适用于固定模板中动态替换内容的场景。
- %占位符输出
- 格式:“要输出的内容 占位符1,占位符2 …” % (数据1,数据2,…)
- 占位符:使用特定的符号进行占位,在运行时使用具体的数据将其替换掉
- 常用的占位符:
- %s:用来接收字符串数据
- %d:用来接收整型数据
- %f:用来接收浮点型数据
- 使用规范:
- 可以有一个占位符,也可以有多个
- 占位符的数量和变量的数量必须保持一致,不能多,也不能少
- 占位符与变量顺序要依次对应,不能交叉赋值也不能跳跃赋值
- 占位符与变量一定要数据类型完全对应
- 在格式化字符串时,百分号后只能识别一个数据,所以如果有多个变量需要使用括号括起来
- 常用的占位符:
- 精度控制:使用格式化拼接字符串的方式,可以进行精度控制
- %f:浮点型可以保留n位小数 例如%.nf 保留n位小数,保留两位小数时会进行四舍五入
- %d:可以占n位,位数不足可以用空格或者0补齐,例如%0nd,如果位数不足则使用0补齐,如果原数据超出n位则原样显示
- str.format()方法(Python 2.6+)
- 格式:‘要输出的内容{},{} …’.format (数据1,数据2,…)
- f-string方法(python 3.6+ 推荐)
- 格式:f’要输出的内容{变量1},{变量2} …’
- f-string字符串中可以使用大写的F,也可以使用小写的f
- {}内部可以书写计算式或者表达式也可以调用函数,但是不可以什么也不写,否则报错
- 精度控制:变量
:后不能加空格- 保留n位小数:{变量:.2f}
- 不足位用0补齐:{变量:03d}
- **注意:**上述三种方式是字符串格式化的方法,是字符串本身的功能,跟输出本身没有关系,当我们需要对字符串进行格式化时都可以使用这三种方法,不是只能用于输出。
- %占位符输出
- print()函数参数:
- sep:多个数据之间的分隔符,默认使用空格进行分隔
- end:打印结束之后的结束符,默认使用 换行符
- 代码示例:
# 普通数据输出 print(123) # 输出数值 print('I love python') # 输出字符串 print(1 + 3) # 输出计算式 print(False) # 输出布尔值 name = 'euler' print(name) # 通过变量名输出 print(520, 'python', name) # 可以同时输出多个值 # 输出格式化后的字符串 # 格式化字符串的格式: '要输出的字符信息 %占位符' % 变量 此时就可以将变量与字符串格式化拼接到一起 name = 'Alice' print('my name is %s' % name) # 格式化和print没有任何关系,它只负责输出 age = 18 output_str = "I'm %d years old." % age print(output_str) # 多占位符的格式化方式 name = '小龙女' age = 18 gender = '女' # 多占位符格式化字符串方式:'要输入的字符串信息, %占位符1, %占位符2....' % (变量1, 变量2 ....) # 占位符一定要数据类型准确,%d 接收整型数据 %f 接收浮点型数据 %s 接收字符串类型数据 # 占位符的数量一定要和变量的数量匹配 # print('故事的主角是%s,年龄%d岁,性别为%s' % name, age, gender) # TypeError: not enough arguments for format string # print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age)) # TypeError: not enough arguments for format string # print('故事的主角是%d,年龄%d岁,性别为%s' % (name, age, gender)) # TypeError: %d format: a real number is required, not str print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age, gender)) print('故事的主角是{},年龄{}岁,性别为{}'.format(name, age, gender)) # str.format()方式 print(f'故事的主角是{name},年龄{age}岁,性别为{gender}') # f-string 方式 # 精度控制 —— 对数据进行格式化 name = '小帅' age = 18 height = 1.88 money = 9 # 这个男人叫小帅,那一年他18岁,身高1.880000米,身价9个小目标 print('这个男人叫%s,那一年他%d岁,身高%f米,身价%d个小目标' % (name, age, height, money)) # 这个男人叫小帅,那一年他18岁,身高1.88米,身价09个小目标 print('这个男人叫%s,那一年他%d岁,身高%.2f米,身价%02d个小目标' % (name, age, height, money)) money = 99999 # 这个男人叫小帅,那一年他18岁,身高1.9米,身价99999个小目标 print('这个男人叫%s,那一年他%d岁,身高%.1f米,身价%03d个小目标' % (name, age, height, money)) # print()函数详解 # print函数中有一些参数 # sep 多个数据之间的分隔符,默认使用空格进行分隔 # end 打印结束之后的结束符,默认使用 换行符 # 一次打印多个姓名,并且使用逗号进行分隔 print('黄药师', '欧阳锋', '洪七公') # 同时打印,但是间隔符默认为空格 print('黄药师', '欧阳锋', '洪七公', sep=',') # 一次打印,中间用逗号隔开 # 打印一首诗,每次打印完成后,不使用换行符,而是使用,和。分隔 print('十步杀一人', end=',') print('千里不留行', end='。') print('事了拂衣去', end=',') print('深藏功与名', end='。') # 特殊符号: \n(换行符) \t(制表位,就是为了对齐文字,可以理解为多个空格) 按tab键和其效果一致 print('南帝\n一灯大师') print('中神通\t王重阳') name = '小龙女' age = 18 gender = '女' # f-string print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age, gender)) # 传统方式 print(f'故事的主角是{name},年龄{age}岁,性别为{gender}') # f-string 方式 print(F'故事的主角是{name},年龄{age}岁,性别为{gender}') # 可以使用大写F,也可以使用小写f # {}内部可以书写计算式或者表达式也可以调用函数,但是不可以什么也不写,否则报错 # print(f'故事的主角是{},年龄{age+1}岁,性别为{gender}') # SyntaxError: f-string: valid expression required before '}' # 精度控制 num = 3.1415926 print(f'保留浮点数的两位{num:.2f}') num = 3 print(f'以3位显示数字,不足位用0补齐{num:03d}')
6. 输入:用户交互
- **概述:**输入就是人类向计算机输入数据。
- 输入函数:
input() - 特性:
input是一个阻塞函数,在运行后会阻塞到input函数的调用位置,等待数据的输入。如果没有输入代码将不会向下继续执行input函数中可以添加提示信息,也就是在让程序员输入数据前提示要输入的内容- 通过
input函数接收的所有数据都是字符串数据类型
- 代码示例:
# input函数中可以添加提示信息,也就是在让程序员输入数据前提示要输入的内容 # input('请输入您的密码:') # 可以使用变量接受input输入进来的数据信息 password = input('请输入您的密码:') print(f'您的密码是:{password}') # 密码是:123 print(type(password)) # <class 'str'>
7. 数据类型转换:类型间的桥梁
- **概述:**不同的数据类型之间进行转换。
- 转换函数:
函数 目标类型 可转换源类型 注意事项 int()整型 float,数字字符串 字符串需为整数字面量 float()浮点数 int,数字字符串 字符串需为数字字面量 str()字符串 所有类型 安全转换 bool()布尔型 所有类型 非零/非空为True eval()根据内容 字符串 慎用,有安全风险 - 转换函数详解:
- int()
- 可以转换float类型为int,会将小数部分全部清除
- 可以转换str类型为int,但是字符串内部必须是整型数,否则报错
- float()
- 可以转换int类型为float,但是会在整数末尾添加
.0 - 可以转换str类型为float,但是必须是浮点数或者整数,如果是整数同样会在末尾添加
.0
- 可以转换int类型为float,但是会在整数末尾添加
- str()
- 任何数据类型都能转换为str
- **eval():**去除字符串左右两侧的引号,内部是什么就运行什么
- 如果引号里面是一句Python语句,eval之后就会直接执行这个语句
- int()
- 类型转换原则:
- 显式优于隐式:明确使用转换函数
- 验证输入:转换前检查数据有效性
- 异常处理:使用try-except捕获转换错误
- 避免
eval:使用ast.literal_eval替代危险评估
- 代码示例:
int1 = 520 float1 = 3.1415 str1 = 'hello' str2 = '12345' str3 = '789.123' str4 = 'abc123' str5 = '123abc' # int() 将数据转换为int类型数据 print(int(float1)) # 3 浮点型可以转换为整型,转换完成后,将小数部分全部删除 # print(int(str1)) # ValueError: invalid literal for int() with base 10: 'hello' print(int(str2)) # 12345 当字符串中是整型数据时,可以转换整型 # print(int(str3)) # ValueError: invalid literal for int() with base 10: '789.123' # print(int(str4)) # ValueError: invalid literal for int() with base 10: 'abc123' # print(int(str5)) # ValueError: invalid literal for int() with base 10: '123abc' # float() 将数据转换为float类型数据 print(float(int1)) # 520.0 整型可以转换为浮点型数据,转换完成后,添加.0 # print(float(str1)) # ValueError: could not convert string to float: 'hello' print(float(str2)) # 12345.0 当字符串中是整型数据时,可以转换为浮点数,在末尾加.0 print(float(str3)) # 789.123 当字符串内部是浮点型数据时,可以转换为浮点型 # print(float(str4)) # ValueError: could not convert string to float: 'abc123' # print(float(str5)) # ValueError: could not convert string to float: '123abc' # str() 将数据转换为str类型数据(所有数据类型都能转换为str类型数据) print(str(int1)) print(str(float1)) # eval() 去除字符串左右两侧的引号,内部是什么就运行什么 str2 = '12345' print(eval(str2)) print(type(eval(str2))) str3 = '789.123' print(eval(str3)) print(type(eval(str3))) str6 = 'False' print(eval(str6)) print(type(eval(str6))) # 将下方字符串左右两侧的引号去除,就是打印hello world 的代码,所以使用eval可以打印hello world eval("print('hello world')") # hello world # NameError: name 'age' is not defined # 将str7左右两侧的引号去除,age就是一个变量名,但是变量名没有被定义所以会报错 # 注意: 变量必须先定义再调用 str7 = 'age' print(eval(str7)) print(type(eval(str7)))
总结
Python基础语法是编程能力的基石。关键要点总结:
- 注释是代码文档的核心,使用文档字符串提升可维护性
- 变量是动态类型的引用容器,命名需清晰规范
- 数据类型决定操作方式,
type()函数辅助类型识别 - 标识符命名遵循PEP8规范,避免关键字冲突
- 输入输出实现人机交互,
f-string是最佳格式化方案 - 类型转换需谨慎处理,特别注意
eval()的安全风险
810

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



