*Python基础语法
目录
Python注释
Python变量
Python输出
Python输入
Python运算符
Python分支语句
Python循环
Python字符串
Python列表
Python注释
为了提高程序的可读性。
单行注释
# 注释内容
语法规范:#与注释内容之间要有一个空格,与语句末尾要有两个空格
多行注释
'''
注释内容
'''
语法规范:多行注释不能写在语句末尾
Pycharm单行注释快捷键:选中代码,Ctrl + /
Python变量
变量概述
用户视角来看,变量是个带标签的容器,标签就是变量名,里面存储的就是数据值;
本质上,Python的变量是指向内存中数据对象的标签,是对内存地址的引用。这与C语言不同,C语言的变量是对内存空间的命名,操作变量就是在操作内存中的二进制数据。
例如:
# Python中
a = 1 # 在内存中创建一个整数对象10,让变量a引用这个对象
b = a # 让变量b也引用变量a引用的同一个对象10
a = 20 # 在内存中创建一个新的整数对象20,让变量a转而引用这个新对象。b仍然指向原来的对象 # C语言中
int a = 5; # 在内存中开辟4字节空间,命名为a,并存放二进制的5#所以从底层内存开销来看,Python的对象模型比C语言的变量机制消耗更多内存
变量命名规则
①只能包含字母、数字和下划线,不能以数字开头;
②区分大小写(age、AGE、Age是不同变量);
③不能使用关键字作为变量名(if、for、class等);
④Python社区的通用规范:变量名、函数名、方法名全部用小写字母,单词之间用下划线连接(user_name);类名每个单词首字母大写,不加下划线(MyClass);变量名要具有描述性,避免无意义的命名。
常见数据类型
①数字:int(整型)、float(浮点型)、complex(复数)
②布尔:bool
③序列:str(字符串)、list(列表,可变)、tuple(元组,不可变)
④映射-键值对:dict(字典)
⑤集合:set(可变集合)、frozenset(不可变集合)
例如:
# type()函数来检查变量当前所指向的对象类型
age = 25 # <class 'int'>
price = 19.9 # <class 'float'>
z = 3 + 4i # <class 'complex'>is_active # <class 'bool'>, bool实际上是整数的子类name = "Lown" # <class 'str'>
fruits = ["apple","banana","orange"] # <class 'list'>
single_element = (20,) # <class 'tuple'>, 注意逗号,创建单元素元组person = {"name": "Lown","age": 20,"city": "Shen Zhen"
} # <class 'dict'>unique_numbers = {1, 2, 3, 2, 1} # <class 'set'>,无序,重复元素会被去除
immutable_set = frozenset([1, 2, 3, 2, 1]) # <class 'frozenset'>
不可变类型:一旦创建,其值就不能被修改,重新赋值会创建新对象
int、float、complex、bool、str、tuple、frozenset
可变类型:创建后,其值可以在原地修改,不创建新对象
list、dict、set
变量基本操作
Python是动态类型语言,变量会在第一次赋值时被创建,不需要提前声明变量或类型,变量的类型在运行时确定,并且可以改变。这与C语言完全不同。
例如:
x = 5
x = "Python"
a,b,c = 1,2,"Python" # 对象可被多个变量引用
a,b = b,a # 优雅地交换
p = q = 100 #为多个变量赋同值# del语句删除变量
del x
Python输出
最常用的是print()函数。
基本输出
# 输出字符串
print("Hello World")# 输出数字
print(20)# 输出变量
name = "Lown"
print(name)# 输出多个值
print("Name:",name,"Age:",20)# 输出到多行,自动换行,与C语言不同
print("Name:",name)
print("Age:",20)
print()函数参数
# sep 设置分隔符
print("2025","10","25",sep="-") # 2025-10-25# end 设置结束符,默认以换行符结束
print("Hello",end=" ")
print("World",end="!")
print("I am Lown")
# Hello World!I am Lown# file 输出到文件
with open("output.txt","w") as f:print("I am Lown",file=f)
格式化输出
# 基本用法
print(f"{name} is {age} years old")#表达式计算
print(f"Next year, {name} is {age + 1} years old")# 格式化数字
print(f"Height: {height:.3f} meters") # 保留3位小数
print(f"Large number: {1000000:,}") # 千位分隔符,Large number: 1,000,000
print(f"Persent:{0.987:.2%}") # 百分比,保留两位小数,Persent:98.70%
print(f"ID:{id:06d}") # 6位数,不足位用0补齐,ID:000666
Python输入
最常用的输入函数是input()函数。
基本用法
# input()返回的是字符串
age = input("Enter your age: ")
print(f"类型:{type(age)},值:{age}") # 类型:<class 'str'>,值:20
基本类型转换
用数据类型转换函数转,与C语言类似。
# int(),float(),str(),bool(),complex()
# list(),tuple(),set(),dict()# 转换为整数
age = int(input("Enter your age: "))
print(f"类型:{type(age)},值:{age}") #类型:<class 'int'>,值:20# 转换为布尔值,非空字符串都会转换为True,空字符串转为False
is_active = bool(input("是否激活(直接回车为否):"))
print(is_active)
多种输入格式
# split() 以指定字符分割
data = input("请输入姓名和年龄(用空格分隔):")
name,age = data.split() # 空格分割
age = int(age)
print(name,age) # Lown 20# 直接分割多个变量
name, age = input("请输入姓名和年龄: ").split()
age = int(age)
print(name, age)# 处理不确定数量的输入
numbers = input("请输入多个数字(用空格分隔): ")
number_list = [int(x) for x in numbers.split()]
print(f"数字列表: {number_list}, 总和: {sum(number_list)}") # 数字列表: [20, 30, 40], 总和: 90
Python运算符
主要讲解与C语言的差异。
算数运算符
# +、-、*、/、//、%、**
a,b = 10,3
print(f"{a} + {b} = {a+b}") # 13print(f"{a} / {b} = {a / b}") # 3.3333333333333335,C语言取整3
print(-10 // 3) # -4,向负无穷取整,而C语言是向零取整,余数符号与被除数相同-3
print(-10 % 3) # 2,向负无穷取整,余数符号与除数相同。计算过程:-10=(-4)*3+2
print(10 % -3) # -2,计算过程:10 = (-3)*(-4)-2
print(-10 % -3) # -1,计算过程:-10=(-3)*3-1print(f"{a} ** {b} = {a ** b}") # 1000,幂运算,C语言要用pow()函数a += 1
print(a) # python中没有++和--(自增运算符和自减运算符)
比较运算符
# ==、!=、>、<、=>、<=,与C语言相同
a,b = 10,5
print(a == b) # Falseprint(1< a < 11) # True,python特有的链式比较,C语言必须(1<a)&&(a<11)
逻辑运算符
# and、or、not,相当于C语言中的&&、||、!
a,b = True,False
print(a and b) # False
print(a or b) # True#短路求值
def test_func():print("函数被调用")return Trueprint(False and test_func()) # 返回第一个为False的值, test_func() 不会被调用
print(True or test_func()) # 返回第一个为True的值, test_func() 不会被调用
位运算符
# 语法与C完全相同
a, b = 5, 3 # 5 = 0101, 3 = 0011print(f"{a} & {b} = {a & b}") # 1 (0101 & 0011 = 0001)
print(f"{a} | {b} = {a | b}") # 7 (0101 | 0011 = 0111)
print(f"{a} ^ {b} = {a ^ b}") # 6 (0101 ^ 0011 = 0110)
print(f"~{a} = {~a}") # -6 (按位取反)
print(f"{a} << 1 = {a << 1}") # 10 (0101 << 1 = 1010)
print(f"{a} >> 1 = {a >> 1}") # 2 (0101 >> 1 = 0010)# 注意:Python整数没有位数限制,不会溢出
big_num = 1 << 100 # 2^100,在C中会溢出,Python中不会
print(f"2^100 = {big_num}")
赋值运算符
# 基本赋值和复合赋值与C语言相同
# =、+=、-=、*=、/=、//=、%=、**=(C语言没有这个)# Python 特有的多重赋值
a, b, c = 1, 2, 3 # 同时给多个变量赋值
x = y = z = 0 # 链式赋值# 交换变量值(Python特有,不需要临时变量)
a, b = 5, 10
a, b = b, a # 交换 a 和 b 的值
print(f"a={a}, b={b}") # a=10, b=5
身份运算符
# is,is not,python特有# 检查两个变量是否引用同一个对象(内存地址相同)
a = [1, 2, 3]
b = a # b 和 a 引用同一个列表
c = [1, 2, 3] # c 是新的列表对象print(a is b) # True (同一个对象)
print(a is c) # False (不同对象,虽然值相同)
print(a == c) # True (值相等)# 与 None 比较时常用 is
x = None
print(x is None) # True
print(x is not None) # False# 小整数缓存(Python优化)
a = 256
b = 256
print(a is b) # True (Python缓存了小整数)a = 257
b = 257
print(a is b) # False (大整数不缓存)
成员运算符
# 检查元素是否在容器中
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # True
print(6 not in numbers) # Truetext = "Hello World"
print('Hello' in text) # True
print('Python' not in text) # True# 字典中检查键
person = {'name': 'Alice', 'age': 25}
print('name' in person) # True
print('Alice' in person) # False (检查键,不是值)
运算符优先级(由高到低)

海象运算符 :=
# 海象运算符 := 在表达式中进行赋值
# 常用于 while 循环和条件判断while (data := input("请输入数据: ")) != "quit":print(f"处理: {data}")# 在列表推导式中使用,比传统写法更简单、性能更好
numbers = [1, 2, 3, 4, 5]
squares = [n_sq for x in numbers if (n_sq := x ** 2) > 10]
print(squares) # [16, 25]
Python分支语句
if语句
# 条件表达式不需要括号,条件后面跟冒号,缩进代替代码块,语句结尾不需要分号
if x > 10:print("x 大于 10")
if-else语句
if age >= 18:print("成年人")
else:print("未成年人")
if-elif-else语句
# 相当于C的else if
if score >= 90:print("A")
elif score >= 80: print("B")
elif score >= 70:print("C")
else:print("D")
嵌套if语句
if x > 0:if y > 0:print("第一象限")else:print("第四象限")
else:print("第二或第三象限")
三元表达式
// C 语言的三元运算符
int max = (a > b) ? a : b;
char* result = (score >= 60) ? "及格" : "不及格";# Python 的三元表达式
max_value = a if a > b else b
result = "及格" if score >= 60 else "不及格"
空值检查
# Python 简洁写法(利用空值为False的特性)
if name:print(f"Hello, {name}")
Python循环
for循环
# 不需要初始化、条件、递增,用range()代替计数器
for i in range(5):print(i,end=' ') # 0 1 2 3 4# 直接遍历列表,而C语言需要索引
numbers = [1, 2, 3, 4, 5]
for number in numbers:print(number,end=' ')
while循环
i = 0
while i < 5:print(i,end=" ") # 0 1 2 3 4i += 1# python中没有do-while,但可以模拟
j = 0
while True:print(j,end=" ") # 0 1 2 3 4j += 1if j >= 5:break
range()函数
# 指定起始值,默认从0开始,范围左闭右开。下面相当于for(int i=1;i<5;i++)
for i in range(1,5):print(i,end =" ") # 1 2 3 4# 指定步长,默认步长为1。下面相当于for(int i=1;i<5;i+=2)
for i in range(1,5,2):print(i,end =" ") # 1 3# 反向遍历。下面相当于for(int i=5;i>1;i--)
for i in range(5,1,-1):print(i,end =" ") # 5 4 3 2
遍历各数据结构
# 遍历列表
fruits = ['apple', 'banana', 'cherry']
# 直接遍历
for fruit in fruits:print(fruit)# 遍历字典
person = {'name':'Lown', 'age':20, 'gender':'male'}
# 遍历键
for key in person:print(f"键:{key}")
# 遍历值
for value in person.values():print(f"值:{value}")
# 遍历键值对
for key, value in person.items():print(f"{key} : {value}")# 遍历字符串
text = "Hello World!"for char in text:print(char,end="")
enumerate枚举遍历
fruits = ['apple', 'banana', 'cherry']
# 使用 enumerate 同时获取索引和值
for index, fruit in enumerate(fruits):print(f"第{index}个水果是{fruit}")
# 第0个水果是apple
# 第1个水果是banana
# 第2个水果是cherry# 指定起始索引
for index, fruit in enumerate(fruits, start=1):print(f"第{index}个水果是{fruit}")
# 第1个水果是apple
# 第2个水果是banana
# 第3个水果是cherry
循环控制语句
# break
# 找到第一个偶数后停止
numbers = [1, 3, 5, 7, 8, 9]
for num in numbers:if num % 2 == 0:print(f"找到偶数:{num}")break# continue
# 跳过奇数,只打印偶数
for num in range(10):if num % 2 != 0:continueprint(f"偶数:{num}")
循环的else子句
# else子句在循环正常完成时执行,即循环没有被break中断
numbers = [1, 3, 5, 7, 9]
for num in numbers:if num % 2 == 0:print(f"找到偶数: {num}")break
else:print("没有找到偶数")
嵌套循环的简化
# 生成坐标对
points = [(x, y) for x in range(3) for y in range(2)]
print(points) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
zip()函数并行遍历
# 并行遍历就是同时遍历多个列表
for name, age in zip(names, ages):print(f"{name} : {age}")
# Lown : 20
# Charles : 19
# Joey : 22
列表推导式
# 传统方式:计算平方
squares = []
for x in range(5):squares.append(x ** 2)
print(squares) # [0, 1, 4, 9, 16]# 列表推导式,还可以在range()函数后面带条件
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]# 字典推导式
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# 集合推导式
unique_squares = {x**2 for x in [1, 2, 3, 3, 2]}
print(unique_squares) # {1, 4, 9}
Python字符串
字符串创建
# 字符串创建后不能修改,不需要手动分配和释放内存str1 = "Hello" # 不可变,自动内存管理
str2 = 'World' # 单引号也可以
str3 = """多行
字符串""" # 三引号用于多行字符串# 自动 Unicode 支持
chinese = "你好世界" # 直接支持中文
emoji = "Python 🐍" # 支持表情符号
字符串连接
str1 = "Hello"
str2 = "World"
# 用 + 运算符连接
result1 = str1 + " " + str2 # Hello World
# 用join()方法高效连接
result2 = " ".join([str1,str2]) # Hello World
# 重复操作符 *
repeat = "Ha" * 3 # HaHaHa
#格式化字符串
result3 = f"{str1} {str2}" # Hello World
字符串索引
text = "Python"# 正向索引(从0开始)
print(text[5]) # 'n'# 负向索引(从-1开始)
print(text[-1]) # 'n'(最后一个)# 字符串不可变,不能修改
# text[0] = 'J' # TypeError: 'str' object does not support item assignment
字符串切片
text = "Hello World"# 基本切片:[start:end:step]
print(text[0:5]) # Hello(索引0到4)
print(text[6:11]) # World(索引6到10)
print(text[6:]) # World(从6到结尾)
print(text[:5]) # Hello(从开头到4)
print(text[::2]) # HloWrd(每隔一个字符)# 负索引切片
print(text[-5:]) # World(最后5个字符)
print(text[::-1]) # dlroW olleH(反转字符串)
大小写转换方法
text = "Hello World"
print(text.upper()) # HELLO WORLD,所有字符转换成大写
print(text.lower()) # hello world,所有字符转换成小写
print(text.capitalize()) # Hello world,仅字符串首字母大写,其余字符小写
print(text.title()) # Hello World,每个单词的首字母大写,以空格分隔的视为不同单词
print(text.swapcase()) # hELLO wORLD,大写转小写,小写转大写
查找和替换方法
text = "Hello World"#查找
print(text.find("World")) # 6,返回索引
print(text.find("Python")) # -1,没找到返回-1
print(text.index("World")) # 6,没找到会报错print(text.count("l")) # 3,字符出现的次数
print(text.startswith("Hello")) # True,检查字符串是否以括号内字符串开头
print(text.endswith("World")) # True,检查字符串是否以括号内字符串结尾#替换
print(text.replace("Hello", "Python")) # Python World
print(text.replace("l","L", 1)) # HeLlo World,数字参数指定最大替换次数,默认所有
分割和连接方法
text = "apple,banana,orange,grape"# split()分割
fruits = text.split(',')
print(fruits) # ['apple', 'banana', 'orange', 'grape']
# 限制分割次数
limited = text.split(',',2)
print(limited) # ['apple', 'banana', 'orange,grape']
#行分割
lines = "Line1\nLine2\nLine3\nLine4\nLine5".splitlines()
print(lines) # ['Line1', 'Line2', 'Line3', 'Line4', 'Line5']
#连接
joined = "-".join(fruits)
print(joined) # apple-banana-orange-grape
去除空白字符方法
text = " Hello World \n"
print(text.strip()) # Hello World,去除两端空白
print(text.lstrip()) # Hello World \n,去除左边空白
print(text.rstrip()) # Hello World,去除右边空白# 去除特定字符
text2 = "***Hello World***"
print(text2.strip("*")) # Hello World
字符串验证方法
text = "Hello123"
print(text.isalpha()) # False,是否全为字母
print(text.isalnum()) # True,是否全为字母或数字
print(text.isdigit()) # False,是否全为数字
print(text.islower()) # False,是否全为小写
print(text.isupper()) # False,是否全为大写
print(text.isspace()) # False,是否全为空白字符print("123".isdigit()) # True,字符串后可以直接跟方法
转义字符
# 常见转义字符
print("换行:\n新行")
print("制表符:\t缩进")
print("退格:Hello\b") # Hell
print("回车:\r覆盖") # "覆盖"字符串回到行首
print("双引号: \"")
print("单引号: \'")
print("反斜杠: \\")
防止转义的原始字符串
# 原始字符串
path = r"C:\Users\Name\Documents" # r:不解析任何转义字符
print(path) # C:\Users\Name\Documents# 对比普通字符串
normal_path = "C:\\Users\\Name\\Documents" # 也是一种方式
print(normal_path) # C:\Users\Name\Documents
Python列表
列表是Python中最灵活、最常用的数据结构。列表可以理解为动态数组,但功能要强大得多。
----------------------------------------------------分清轻重缓急-----------------------------------------------------------
