Python 基础语法笔记
变量和赋值
变量命名规则
基本规则:
- 区分大小写(
age 和 Age 是两个不同的变量)
有效变量名示例:
username = "John"
user_age = 25
_user_id = 123
MAX_VALUE = 100
count2 = 5
无效变量名示例:
2user = "Tom"# 数字开头
user-name = "Bob"# 包含连字符
if = 10# 使用关键字
class = "A" # 使用关键字
赋值语句
基本赋值:
x = 10
name = "Alice"
is_valid = True
a = b = c = 0# 三个变量都赋值为0
x, y, z = 1, 2, 3# 分别赋值
- 赋值操作的本质:Python中变量存储的是对象的引用
a = [1, 2, 3]
b = a # b和a指向同一个列表对象
b.append(4)
print(a) # 输出:[1, 2, 3, 4](a也被修改)
动态类型特性
类型动态推断:
# 变量类型可以随时改变
var = 100# 现在是int类型
print(type(var)) # <class 'int'>
var = "Hello"# 现在是str类型
print(type(var)) # <class 'str'>
var = 3.14# 现在是float类型
print(type(var)) # <class 'float'>
基本数据类型
| |
|---|
| |
| |
| |
| 布尔值,True(1)/False(0)。逻辑判断中,非零数字或非空容器为True,反之为False |
| 字符串,不可变序列。用单引号/双引号(不支持换行)或三引号(支持换行) |
| 列表,可变序列,使用中括号,如:[1, 2, 3] |
| 元组,不可变序列,使用小括号,如:(1, 2, 3) |
| 字典,可变映射,存储键值对,使用{},如:{"key1": "value1", "key2": "value3"} |
| 可变集合,无序、元素不重复,使用{},如:{1, 2, 3}。支持数学集合操作:并集(|)、交集(&)、差集(-) |
数字类型
整数(int)
# 十进制整数
num1 = 42
num2 = -100
num3 = 0
# 其他进制表示
binary = 0b1010# 二进制:10
octal = 0o52# 八进制:42
hexadecimal = 0x2A# 十六进制:42
浮点数(float)
# 标准表示
pi = 3.14159
price = 19.99
temperature = -5.5
# 科学计数法
large_num = 1.23e6# 1.23 × 10^6 = 1230000
small_num = 5.67e-3# 5.67 × 10^-3 = 0.00567
复数(complex)
# 复数表示
c1 = 3 + 4j# 实部3,虚部4
c2 = complex(2, -3) # 2 - 3j
# 访问实部和虚部
print(c1.real) # 输出:3.0
print(c1.imag) # 输出:4.0
布尔类型(bool)
# 布尔值
is_true = True
is_false = False
# 布尔运算
print(TrueandFalse) # False
print(TrueorFalse) # True
print(notTrue) # False
# 其他类型转布尔
print(bool(0)) # False
print(bool(1)) # True
print(bool("")) # False(空字符串)
print(bool("Hello")) # True
print(bool([])) # False(空列表)
print(bool([1, 2])) # True
字符串(str)
创建
# 单引号
str1 = 'Hello'
str2 = 'It\'s a book'# 转义单引号
# 双引号
str3 = "World"
str4 = "He said \"Hello\""# 转义双引号
# 三引号(多行字符串)
str5 = '''这是
多行
字符串'''
str6 = """另一个
多行
字符串"""
基本操作
# 索引和切片
text = "Python Programming"
print(text[0]) # P
print(text[7:18]) # Programmin
print(text[::-1]) # gnimmargorP nohtyP
# 连接和重复
greeting = "Hello" + " " + "World"
repeated = "Ha" * 3# "HaHaHa"
# 常用方法
text = " Python Programming "
print(text.strip()) # 去首尾空格
print(text.lower()) # 转小写
print(text.upper()) # 转大写
print(text.startswith("Python")) # True
print(text.endswith("ing")) # True
print(text.replace("Python", "Java"))
print(text.split()) # 分割为列表
格式化
name = "Alice"
age = 25
# 传统格式化(%)
print("Name: %s, Age: %d" % (name, age))
# format方法
print("Name: {}, Age: {}".format(name, age))
print("Name: {0}, Age: {1}".format(name, age))
print("Name: {name}, Age: {age}".format(name=name, age=age))
# f-string(Python 3.6+)
print(f"Name: {name}, Age: {age}")
print(f"2的10次方是:{2**10}") # 可以包含表达式
组合类型
列表(list)
列表使用方括号[],包含以逗号分隔的值。列表可以包含任何类型的对象,索引从0开始。
创建
shoplist = ['apple', 'mango', 'carrot', 'banana']
基本操作
# 访问元素
shoplist[0] # 'apple'
# 切片(start:end:step)
shoplist[1:3] # ['mango', 'carrot']
shoplist[:2] # ['apple', 'mango']
shoplist[2:] # ['carrot', 'banana']
shoplist[:] # ['apple', 'mango', 'carrot', 'banana']
# 连接
[1, 2] + [3, 4] # [1, 2, 3, 4]
# 重复
['Hi!'] * 4# ['Hi!', 'Hi!', 'Hi!', 'Hi!']
# 获取长度
len(shoplist) # 4
# 成员检查
'apple'in shoplist # True
# 修改元素
shoplist[0] = 'orange'
# 删除元素
del shoplist[0]
列表推导式
语法:[expression for item in iterable if condition]
[x*2for x in range(5)] # [0, 2, 4, 6, 8]
[x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
[[x, x**2] for x in [2, 4, 6]] # [[2, 4], [4, 16], [6, 36]]
元组(tuple)
元组是不可变序列,一旦创建不能修改。索引从0开始。
创建
T = (1, 2, 3, 4)
# 单元素元组必须加逗号
singleton = (50,)
基本操作
# 访问元素
T[0] # 1
# 切片
T[1:3] # (2, 3)
T[:2] # (1, 2)
T[2:] # (3, 4)
T[:] # (1, 2, 3, 4)
# 连接
(1, 2) + (3, 4) # (1, 2, 3, 4)
# 重复
(1, 2) * 2# (1, 2, 1, 2)
# 长度
len(T) # 4
# 成员检查
2in T # True
# 解包
x, y, z = (1, 2, 3) # x=1, y=2, z=3
字典(dict)
字典是无序的可变容器,存储键值对(Key-Value)。键必须是不可变对象且唯一,值可以是任意对象。
创建
d = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
# 使用 dict() 构造函数
fdict = dict([('x', 1), ('y', 2)]) # {'x': 1, 'y': 2}
# 使用 fromkeys()
ddict = {}.fromkeys(('x', 'y'), -1) # {'x': -1, 'y': -1}
基本操作
d = {'name': 'Zara', 'age': 7, 'class': 'First'}
# 访问
value = d['name'] # 'Zara'
value = d.get('name') # 更安全
# 添加/修改
d["age"] = 27
# setdefault:键存在则返回值,不存在则设置默认值并返回
age = d.setdefault('age', 25)
# 合并字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2) # dict1变为 {'a': 1, 'b': 3, 'c': 4}
# 删除
del d['name']
age = d.pop('age') # 返回被删除的值
d.clear() # 清空
del d # 删除整个字典
集合(set)
集合是无序、不重复的不可变元素集(元素必须是不可变类型)。
创建
s = {1, 2, 3} # 包含元素的集合
s = set() # 空集合(注意:{}是空字典)
s = set([1, 2, 2, 3]) # 从列表创建,自动去重:{1, 2, 3}
s = set("hello") # 从字符串创建:{'h', 'e', 'l', 'o'}
集合运算
| | | |
|---|
| | | union() | |
| & | intersection() | |
| - | difference() | |
| ^ | symmetric_difference() | |
| <= | issubset() | |
| >= | issuperset() | |
| == | | |
| in | | |
a = {1, 2, 3}
b = {2, 3, 4}
# 并集
a | b # {1, 2, 3, 4}
a.union(b) # 同上
# 交集
a & b # {2, 3}
a.intersection(b) # 同上
# 差集
a - b # {1}
a.difference(b) # 同上
# 对称差集
a ^ b # {1, 4}
a.symmetric_difference(b) # 同上
# 子集/超集
c = {1, 2}
d = {1, 2, 3}
c.issubset(d) # True
c <= d # True
d.issuperset(c) # True
# 相等(无序)
{1, 2} == {2, 1} # True
# 成员关系
3in d # True
# 注意:运算符要求两个操作数都是集合,方法可以接受任何可迭代对象
a.union([3, 4, 5]) # 允许:{1, 2, 3, 4, 5}
# a | [3, 4, 5] # 错误:TypeError
冻结集合(frozenset)
不可变集合,创建后不能修改。
fs = frozenset([1, 2, 3]) # frozenset({1, 2, 3})
输入输出
print()函数
基本使用:
# 输出简单值
print("Hello, World!")
print(42)
print(3.14)
# 输出多个值(自动用空格分隔)
print("Name:", "Alice", "Age:", 25) # Name: Alice Age: 25
# 指定分隔符
print("2023", "12", "04", sep="-") # 2023-12-04
# 指定结束符
print("Hello", end=" ") # 不换行,用空格结束
print("World") # Hello World
格式化输出:
pi = 3.1415926535
print(f"圆周率:{pi:.2f}") # 保留2位小数
print(f"圆周率:{pi:.4f}") # 保留4位小数
print(f"圆周率:{pi:10.2f}") # 宽度10,右对齐
num = 1234.5678
print(f"数字:{num:,.2f}") # 1,234.57(千分位)
print(f"百分比:{0.25:.1%}") # 25.0%
input()函数
获取用户输入:
# 基本输入
name = input("请输入你的名字:")
print(f"你好,{name}!")
# 数值输入(需要类型转换)
age = int(input("请输入你的年龄:"))
print(f"你明年{age + 1}岁")
# 多值输入
values = input("请输入两个数字(用空格分隔):")
a_str, b_str = values.split()
a, b = int(a_str), int(b_str)
print(f"和为:{a + b}")
注释和代码规范
注释
单行注释:
# 这是一个单行注释
x = 10# 这是行尾注释
# 多个连续的单行注释
# 用于解释复杂的代码逻辑
多行注释:
'''
这是一个多行注释
可以用三个单引号或双引号
通常用于模块或函数的文档字符串
'''
"""
这也是多行注释
功能相同,可以根据习惯选择
"""
defcalculate_sum(a, b):
"""
计算两个数的和
参数:
a -- 第一个数字
b -- 第二个数字
返回:
两个数字的和
"""
return a + b
PEP 8编码规范
命名规范:
# 变量名:小写字母,单词间用下划线
user_name = "Alice"
total_count = 100
# 常量名:大写字母,单词间用下划线
MAX_CONNECTIONS = 100
PI = 3.14159
# 函数名:小写字母,单词间用下划线
defcalculate_total():
pass
# 类名:驼峰命名法
classUserAccount:
pass
classDatabaseConnection:
pass
代码布局:
# 缩进:4个空格(不要用制表符)
defexample_function():
ifTrue:
print("缩进4个空格")
# 最大行长度:79字符
# 需要换行时使用括号、方括号或花括号
long_string = ("这是一个非常长的字符串,"
"因为超过了79字符的限制,"
"所以需要分成多行。")
# 操作符周围空格
x = 10 + 5# 正确
y = a*b + c/d # 正确:运算符优先级决定空格
# 函数参数空格
deffunc(param1, param2):
return param1 + param2
# 类内方法空行
classMyClass:
defmethod1(self):
pass
defmethod2(self):
pass
导入规范:
# 标准库导入
import sys
import os
# 第三方库导入
import numpy as np
import pandas as pd
# 本地模块导入
from my_module import my_function
# 按字母顺序排列导入
import math
import random
import sys
通过遵循这些基本语法和规范,可以编写出清晰、可读、易于维护的Python代码。