【Python基础语法入门】
变量与数据类型
变量的定义与赋值
1. 基本定义
x = 10 # 整数变量
y = 3.14 # 浮点数变量
name = "Python" # 字符串变量
is_valid = True # 布尔变量
x 被赋值为 10,自动识别为 int 类型(整数)。y 被赋值为 3.14,自动识别为 float 类型(浮点数)。name 被赋值为 "Python",自动识别为 str 类型(字符串)。is_valid 被赋值为 True,自动识别为 bool 类型(布尔值)。2. 多变量同时赋值
x, y, z = 1, 2.5, "Python"
x = 1 (整数)y = 2.5 (浮点数)z = "Python" (字符串)3. 多个变量赋相同的值
a = b = c = 100
a、b、c 都指向 1004 . 变量的解包(解构赋值)
Python 支持 序列解包赋值:
a, b, c = [1, 2, 3]
print(a, b, c) # 输出:1 2 3
a 赋值 1b 赋值 2c 赋值 3交换变量的值(Python 独有的简洁写法):
x, y = 10, 20
x, y = y, x
print(x, y) # 输出:20 10
变量命名规则(字母、数字、下划线,不能以数字开头)
Python 变量的命名必须遵循以下语法规则,否则会报错:
1. 变量命名规则
变量名必须由字母(a-z,A-Z)、数字(0-9)和下划线(_)组成。
变量名不能以数字开头。
变量名区分大小写(myvar 和 MyVar 是两个不同的变量)。
不能使用 Python 的关键字(****if 、****else 、****class 等)作为变量名。
2. 变量名应有意义
推荐
max_users = 100 # 表示最大用户数
file_path = "/home/user/doc.txt" # 表示文件路径
不推荐
a = 100 # ❌ 变量名太短,无意义
x1 = "/home/user/doc.txt" # ❌ 变量名无描述性
变量的一些用法
1 . type():查看变量的类型
在 Python 中,变量的类型可以通过 type() 函数查看:
num = 42
print(type(num)) # <class 'int'>
text = "Python"
print(type(text)) # <class 'str'>
2 . id() 与 is 运算符
在 Python 中,变量存储的是 对象的引用,可以使用 id() 查看对象的内存地址:
a = 10
b = 10
print(id(a)) # 如:140732768196464
print(id(b)) # 与 a 相同,说明 a 和 b 指向同一对象
is运算符 :判断两个变量是否指向同一对象:
x = [1, 2, 3]
y = x
print(x is y) # True,y 也是 x 的引用
3 . del:Python 变量的删除
可以使用 del 删除变量:
x = 100
del x
print(x) # ❌ 报错,x 已被删除
动态类型与强类型(变量类型可变但类型检查严格)
1. 什么是动态类型
在 Python 中,变量的类型不是在声明时固定的,而是在运行时根据赋值内容动态确定。
变量本身没有固定的类型,存储的值决定了它的类型。
✅ 动态类型的特点:
代码示例
x = 10 # x 是整数(int)
print(type(x)) # <class 'int'>
x = "Hello" # x 变成字符串(str)
print(type(x)) # <class 'str'>
x = 3.14 # x 变成浮点数(float)
print(type(x)) # <class 'float'>
在其他 静态类型(Static Typing) 语言(如 Java、C++)中,变量的类型在声明时就已经固定,不能随意更改:
int x = 10; // x 只能存储整数
x = "Hello"; // ❌ 编译错误,不能把字符串赋值给 int 类型变量
Python 不需要声明类型,因此更加灵活。
2. 什么是强类型
虽然 Python 具有 动态类型,但它仍然是一种 强类型(Strong Typing) 语言。
强类型意味着不同类型的数据不能进行隐式转换或不合理的操作,除非显式转换。
✅ 强类型的特点:
代码示例
a = "100"
b = 50
print(a + b) # ❌ TypeError: can only concatenate str (not "int") to str
在 Python 中,字符串和整数不能直接相加,必须进行类型转换:
print(int(a) + b) # ✅ 结果:150
但是,在某些 弱类型(Weak Typing) 语言(如 JavaScript)中,不同类型的数据可能会被自动转换:
console.log("100" + 50); // "10050" (自动转换为字符串)
console.log("100" - 50); // 50 (自动转换为数字)
Python 不允许这样做,因此是 强类型 语言。
Python 的数据类型
1. 基本数据类型:int、float、bool、str
| 数据类型 | 说明 | 示例 |
|---|---|---|
| 数值类型 | 整数(int)、浮点数(float)、复数(complex) | 10, 3.14, 1+2j |
| 布尔类型 | 只有True和False |
True, False |
| 字符串类型 | 由字符组成的文本 | "Hello", 'Python' |
| None 类型 | 表示空值 | None |
2. 复合数据类型:list、tuple、dict、set
| 数据类型 | 说明 | 示例 |
|---|---|---|
| 列表(list) | 可变的有序集合 | [1, 2, 3] |
| 元组(tuple) | 不可变的有序集合 | (1, 2, 3) |
| 集合(set) | 无序、不重复元素的集合 | {1, 2, 3} |
| 字典(dict) | 键值对(key-value) 结构 | {"name": "Alice", "age": 25} |
标识符与关键字
标识符命名规则(驼峰命名、下划线命名法)
1. 驼峰命名法(Camel Case)
驼峰命名法是每个单词首字母大写(除了首单词可能小写),形似骆驼的驼峰。分为:
驼峰命名法的使用场景
class MyClass: # ✅ 大驼峰(类名)
def myMethod(self): # ❌ Python 不推荐(应使用下划线命名)
pass
2. 下划线命名法(Snake Case)
下划线命名法是所有字母小写,单词之间用下划线连接,可读性较强,符合 Python 规范。
下划线命名法的使用场景
def my_function(): # 函数名
my_variable = 10 # 变量名
特殊下划线命名
_var:表示内部变量,不建议直接访问。__var:类的私有变量(Python 进行名称重整)。__init__ :Python 内置特殊方法(魔法方法)。_ :临时变量或表示“无关紧要”的值。class Example:
def __init__(self): # Python 内置魔法方法
self._internal = 42 # 约定俗成:私有变量
self.__private = "secret" # 变为 _Example__private,外部无法直接访问
Python 关键字(使用 import keyword 查看)
Python 关键字(Keywords)是 Python 语言保留的单词,用于定义语法结构和控制程序行为,不能作为变量、函数、类等的标识符使用。
1. 获取 Python 关键字列表
可以使用 keyword 模块获取当前 Python 版本的所有关键字:
import keyword
print(keyword.kwlist)
输出示例(Python 3.11):
['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', 'match', 'case']
目前(Python 3.10+)有 35 个关键字,不同版本可能略有不同。
2. 关键字分类
布尔值和空值
| 关键字 | 作用 |
|---|---|
True |
布尔值真(等价于1) |
False |
布尔值假(等价于0) |
None |
表示“空”对象,类似于null |
逻辑运算
| 关键字 | 作用 |
|---|---|
and |
逻辑与(两个条件都为True才返回True) |
or |
逻辑或(任一条件为True就返回True) |
not |
逻辑非(取反) |
is |
判断两个对象是否是同一个对象(引用相同) |
in |
判断元素是否存在于可迭代对象 |
条件控制
| 关键字 | 作用 |
|---|---|
if |
条件判断 |
elif |
多个条件分支(else if) |
else |
其他情况 |
循环控制
| 关键字 | 作用 |
|---|---|
for |
迭代循环 |
while |
条件循环 |
break |
终止循环 |
continue |
跳过当前循环,执行下一次循环 |
pass |
占位符,不执行任何操作 |
异常处理
| 关键字 | 作用 |
|---|---|
try |
捕获异常 |
except |
处理异常 |
finally |
无论是否有异常都会执行 |
raise |
主动抛出异常 |
函数与返回
| 关键字 | 作用 |
|---|---|
def |
定义函数 |
return |
返回值 |
lambda |
匿名函数 |
类与对象
| 关键字 | 作用 |
|---|---|
class |
定义类 |
self |
表示类的实例本身(不是关键字,但常用于类中) |
__init__ |
构造方法 |
del |
删除对象 |
模块与导入
| 关键字 | 作用 |
|---|---|
import |
导入模块 |
from |
从模块导入特定内容 |
as |
给模块或函数起别名 |
作用域控制
| 关键字 | 作用 |
|---|---|
global |
声明全局变量 |
nonlocal |
声明使用外部嵌套作用域变量 |
特殊关键字
| 关键字 | 作用 |
|---|---|
yield |
生成器(用于return但不会终止函数) |
async |
定义异步函数 |
await |
等待异步任务完成 |
match |
模式匹配(Python 3.10+ 新增) |
case |
match语句中的匹配分支 |
注释与缩进
单行注释(# 号)
单行注释使用 # 符号,# 之后的内容不会被 Python 解释执行:
# 这是一个单行注释
print("Hello, Python!") # 这里是注释,解释这行代码的作用
应用场景
解释某一行代码的作用:
x = 10 # 定义一个变量 x,并赋值 10
临时屏蔽代码(调试时常用):
# print("这行代码不会执行")
print("这行代码会执行")
多行注释(''' 或 """)
Python 没有专门的多行注释语法,但可以使用三重单引号 ''' 或三重双引号 """ 作为多行注释:
'''
这是一个多行注释
可以用于函数说明
或者屏蔽多行代码
'''
print("Hello, World!")
"""
这也是一个多行注释
适用于文档字符串
"""
注意:
''' 或 """ 视为正式的多行注释,而是作为字符串对象,只是它没有被赋值给变量,因此不会影响程序运行。应用场景
作为代码说明:
'''这是一个多行注释,适用于较长的说明。'''
print("Hello, Python!")
用作文档字符串(Docstring),用于描述函数或类:
def add(a, b):
"""
这是一个函数的文档字符串(Docstring)
作用:计算两个数的和并返回
参数:
a: 第一个数
b: 第二个数
返回:
两数之和
"""
return a + b
print(add(3, 5))
使用 help() 可以查看函数的文档字符串:
help(add)
Python 的强制缩进规则(避免 IndentationError)
Python 使用缩进来表示代码块,而不是使用 {}(如 Java、C 语言)。
缩进的基本规则
if、for、while、def、class 等结构的代码块必须缩进。IndentationError。示例:正确的缩进
if True:
print("Hello") # 这里缩进了 4 个空格
print("Python") # 同一代码块,必须缩进相同的空格数
错误示例:缩进不一致
if True:
print("Hello")
print("Python") # 这里缩进了 8 个空格,会报错
错误信息:
IndentationError: unexpected indent
输入与输出
print() 输出(默认换行,end="" 控制结尾)
语法格式
print() 可以输出字符串、变量、表达式等:
print("Hello, Python!") # 输出字符串
x = 10
print(x) # 输出变量
print(5 + 3) # 输出表达式结果
输出:
Hello, Python!
10
8
输出多个内容
使用 , 分隔多个值,Python 会用空格自动连接:
name = "Alice"
age = 25
print("姓名:", name, "年龄:", age)
输出:
姓名: Alice 年龄: 25
如果希望去掉默认空格,可以使用字符串拼接:
print("姓名:" + name + " 年龄:" + str(age)) # 需要将数字转为字符串
使用 end 参数:控制换行
默认情况下,print() 在输出后结尾会自动换行,但可以用 end 参数自定义修改这个结尾:
print("Hello", end=" ") # 不换行
print("World!") # 输出在同一行
输出:
Hello World!
使用 sep 参数:自定义分隔符
默认情况下,print() 用空格分隔多个值,但可以用 sep 指定其他分隔符:
print("2025", "03", "20", sep="-") # 用 "-" 连接
输出:
2025-03-20
print() 格式化输出(%、format()、f-string)
1. 使用 % 格式化
% 格式化类似于 C 语言的 printf(),适用于 Python 2 和 3,但已不推荐使用。
1.1 语法格式
name = "Alice"
age = 25
print("姓名:%s,年龄:%d" % (name, age))
姓名:Alice,年龄:25
%s:格式化字符串,%d:格式化整数,() 里传入变量,顺序要对应占位符1.2 多个值格式化
如果有多个值,必须用元组 () 传入:
name = "Bob"
age = 30
height = 1.75
print("姓名:%s,年龄:%d,身高:%.2f" % (name, age, height))
输出:
姓名:Bob,年龄:30,身高:1.75
注意:
%s 会自动转换 变量类型,比如整数也能用 %s%d 只能用于整数,浮点数不能直接用%.2f 控制小数点位数1 .3 指定最小宽度与对齐
可以在 % 后加 数字 设定最小宽度,右对齐:
print("姓名:%10s" % "Alice") # 最小宽度10,右对齐
print("年龄:%5d" % 25) # 最小宽度5,右对齐
print("姓名:%-10s!" % "Alice") # 左对齐
print("年龄:%-5d!" % 25) # 左对齐
输出:
姓名: Alice
年龄: 25
姓名:Alice !
年龄:25 !
1 .4 设定填充字符
默认用空格填充,可以用 0 填充:
print("编号:%05d" % 42) # 用 0 填充,宽度 5
输出:
编号:00042
1.5 格式化进制
num = 255
print("十进制:%d" % num)
print("八进制:%o" % num)
print("十六进制(小写):%x" % num)
print("十六进制(大写):%X" % num)
输出:
十进制:255
八进制:377
十六进制(小写):ff
十六进制(大写):FF
1.6 科学计数法
num = 12345678
print("科学计数法:%e" % num)
print("大写 E:%E" % num)
输出:
科学计数法:1.234568e+07
大写 E:1.234568E+07
1.7 百分比格式化
如果要显示百分比,可以用 %%:
progress = 0.85
print("进度:%.2f%%" % (progress * 100))
输出:
进度:85.00%
1.8 使用字典格式化
除了元组 (),还可以用字典 {} 结合 %(key)s 方式:
data = {"name": "Charlie", "age": 22}
print("姓名:%(name)s,年龄:%(age)d" % data)
输出:
姓名:Charlie,年龄:22
2. .format() 方法(Python 2.7+,推荐)
Python 2.7 和 3 引入的 .format() 方法,提供了更强大的格式化能力。
2.1 语法格式
name = "Bob"
age = 30
height = 1.80
print("姓名:{},年龄:{},身高:{:.2f} 米".format(name, age, height))
输出:
姓名:Bob,年龄:30,身高:1.80 米
{} 代表占位符,.format() 负责填充数据。2.3 位置参数
可以使用索引指定变量顺序:
print("{1} 在 {0} 之后".format("Python 2", "Python 3"))
输出:
Python 3 在 Python 2 之后
{0} 代表 format() 中的第一个参数,{1} 代表第二个参数。2.4 关键字参数
print("姓名:{n},年龄:{a}".format(n="Charlie", a=22))
输出:
姓名:Charlie,年龄:22
{变量名} 形式可以让格式化字符串更清晰,会按照对应的变量名进行填充2.4 对齐与填充
| 符号 | 说明 |
|---|---|
< |
左对齐 |
> |
右对齐 |
^ |
居中对齐 |
示例
print("{:<10}".format("左对齐"))
print("{:>10}".format("右对齐"))
print("{:^10}".format("居中对齐"))
输出:
左对齐 右对齐 居中对齐
2.5 自定义填充字符
在对齐符号前加上填充字符:
print("{:*<10}".format("左对齐")) # 用 * 填充
print("{:_>10}".format("右对齐")) # 用 _ 填充
print("{:-^10}".format("居中对齐")) # 用 - 填充
输出:
左对齐******
______右对齐
--居中对齐--
2.6 数值格式化
| 格式符 | 说明 | 示例 |
|---|---|---|
{:.2f} |
保留 2 位小数 | {:.2f}.format(3.14159) → 3.14 |
{:08d} |
整数补零,8 位宽度 | {:08d}.format(42) → 00000042 |
{:+d} |
强制显示符号 | {:+d}.format(42) → +42 |
{:,.2f} |
逗号分隔千位 | {:,.2f}.format(1234567.89) → 1,234,567.89 |
{:.2%} |
转换为百分比 | {:.2%}.format(0.1234) → 12.34% |
示例
print("保留 2 位小数:{:.2f}".format(3.14159))
print("整数补零:{:05d}".format(42)) # 5 位宽度,左侧补 0
print("强制显示符号:{:+d}".format(42)) # 显示 `+`
print("千位分隔符:{:,}".format(1234567)) # 逗号分隔
print("百分比:{:.2%}".format(0.1234)) # 乘 100,加上 %
输出:
保留 2 位小数:3.14
整数补零:00042
强制显示符号:+42
千位分隔符:1,234,567
百分比:12.34%
2.7 进制转换
| 格式符 | 说明 |
|---|---|
{:b} |
二进制 |
{:o} |
八进制 |
{:x} |
十六进制(小写) |
{:X} |
十六进制(大写) |
示例
num = 255
print("二进制:{:b}".format(num))
print("八进制:{:o}".format(num))
print("十六进制(小写):{:x}".format(num))
print("十六进制(大写):{:X}".format(num))
输出:
二进制:11111111
八进制:377
十六进制(小写):ff
十六进制(大写):FF
2.8 时间格式化
示例
from datetime import datetime
now = datetime.now()
print("当前时间:{:%Y-%m-%d %H:%M:%S}".format(now))
输出:
当前时间:2025-03-20 14:30:15
{:%Y-%m-%d %H:%M:%S} 是标准时间格式。3. f-string (Python 3.6+,最推荐)
f-string(格式化字符串字面量)是 Python 3.6 引入的一种简洁高效的字符串格式化方式。相比 str.format() 和 %,f-string 速度更快、语法更直观,被广泛推荐使用。
3.1 语法格式
name = "Alice"
age = 25
print(f"姓名:{name},年龄:{age}")
输出:
姓名:Alice,年龄:25
{} 中可以写变量,也可以写表达式。3.2 表达式与计算
f-string 可以在 {} 内部直接计算:
print(f"10 + 5 = {10 + 5}")
print(f"圆的面积:{3.14 * 5 ** 2}")
输出:
10 + 5 = 15
圆的面积:78.5
3.3 调用函数
def square(n):
return n ** 2
print(f"5 的平方是 {square(5)}")
输出:
5 的平方是 25
3 .4 访问列表、字典
user = {"name": "Bob", "age": 30}
print(f"姓名:{user['name']},年龄:{user['age']}")
输出:
姓名:Bob,年龄:30
3.5 数值格式化
| 语法 | 说明 | 示例 |
|---|---|---|
{:.2f} |
保留 2 位小数 | f"{3.14159:.2f}"→3.14 |
{:08d} |
整数补零,8 位宽度 | f"{42:08d}"→00000042 |
{:+d} |
强制显示符号 | f"{42:+d}"→+42 |
{:,} |
逗号分隔千位 | f"{1234567:,}"→1,234,567 |
{:.2%} |
转换为百分比 | f"{0.1234:.2%}"→12.34% |
pi = 3.14159
print(f"保留 2 位小数:{pi:.2f}")
print(f"整数补零:{42:05d}")
print(f"强制显示符号:{42:+d}")
print(f"千位分隔符:{1234567:,}")
print(f"百分比表示:{0.1234:.2%}")
输出:
保留 2 位小数:3.14
整数补零:00042
强制显示符号:+42
千位分隔符:1,234,567
百分比表示:12.34%
3.6 对齐与填充
| 符号 | 说明 |
|---|---|
< |
左对齐 |
> |
右对齐 |
^ |
居中对齐 |
print(f"{'Python':<10}") # 左对齐,占 10 个字符
print(f"{'Python':>10}") # 右对齐,占 10 个字符
print(f"{'Python':^10}") # 居中对齐,占 10 个字符
输出:
Python
Python
Python
3.7 自定义填充字符
print(f"{'Python':*<10}") # 左对齐,填充 *
print(f"{'Python':_>10}") # 右对齐,填充 _
print(f"{'Python':-^10}") # 居中对齐,填充 -
输出:
Python****
____Python
--Python--
3.8 进制转换
| 语法 | 说明 |
|---|---|
{:.b} |
二进制 |
{:.o} |
八进制 |
{:.x} |
十六进制(小写) |
{:.X} |
十六进制(大写) |
num = 255
print(f"二进制:{num:b}")
print(f"八进制:{num:o}")
print(f"十六进制(小写):{num:x}")
print(f"十六进制(大写):{num:X}")
输出:
二进制:11111111
八进制:377
十六进制(小写):ff
十六进制(大写):FF
3.9 时间格式化
from datetime import datetime
now = datetime.now()
print(f"当前时间:{now:%Y-%m-%d %H:%M:%S}")
输出:
当前时间:2025-03-20 14:30:15
3.10 f-string 结合 = 调试
Python 3.8+ 支持 = 直接显示变量名和值:
x = 10
y = 20
print(f"{x = }, {y = }, {x + y = }")
输出:
x = 10, y = 20, x + y = 30
input() 输入(字符串类型转换 int(input()))
语法格式
变量 = input("提示信息")
示例:
name = input("请输入你的姓名:")
print("你好," + name + "!")
示例运行:
请输入你的姓名:Alice
你好,Alice!
input() 默认返回字符串,即使输入的是数字。输入整数
age = int(input("请输入你的年龄:"))
print("你的年龄是:", age)
示例运行:
请输入你的年龄:25
你的年龄是: 25
float类型,但是如果输入字符串类型就会报错(ValueError)输入浮点数
price = float(input("请输入商品价格:"))
print("商品价格:", price)
示例运行:
请输入商品价格:19.99
商品价格: 19.99
float类型,但是如果输入字符串类型就会报错(ValueError)作者:锭子比脸大