Python介绍
解释型、简单、应用广泛
列表list
列表最适合存放一组有顺序、可重复、可修改的数据。
number_list = [1, 3, 5, 7, 9]
mixed_list = ["tom", 18, True, 9.9]
浅拷贝与深拷贝
注意:浅拷贝只复制第一层,嵌套对象仍然共享引用。
元组tuple
point = (10, 20)
# 元组不可变,适合表示一组固定数据。
字典dict
phone_book = {"Tom": 123, "Jerry": 456, "Kim": 789}
集合set
{3, 5}是一个集合{}不是空集合,而是空字典- 真正的空集合要写成
set()
unique_numbers = {1, 2, 3, 4, 5}
全局变量和局部变量
num = 10
def fun() -> None:
num = 100
print("函数内部的 num:", num)
fun()
print("函数外部的 num:", num)
#函数内部的 num: 100
#函数外部的 num: 10
*args 和 **kwargs
*args用来接收额外的位置参数,接收后是元组**kwargs用来接收额外的关键字参数,接收后是字典
def collect_scores(*scores: int, **metadata: str) -> None:
print("scores:", scores)
print("metadata:", metadata)
collect_scores(90, 95, 88, student="tom", course="python")
#scores: (90, 95, 88)
#metadata: {'student': 'tom', 'course': 'python'}
* 和 ** 在调用处拆包
values = (1, 2, 4)
items = [11, 15, 23]
show_args(*values, **data)
lambda 表达式
add = lambda a, b: a + b
print(add(1, 2)) # 3
脚本入口写法
__name__ == "__main__" 是什么?
def main() -> None:
print("run script")
if __name__ == "__main__":
main()
作用:直接运行当前文件时执行 main(),被别的文件导入时不执行。
写文件
with open("output.txt", "w") as file:
file.write("Hello, world!")
匿名函数、map、filter
map 和 filter 常和 lambda 一起用:
numbers = [2, 22, 8, 12, 27]
# filter:筛出大于 3 的项
greater_items = list(filter(lambda item: item > 20, numbers))
# map:每项乘 2
doubled = list(map(lambda item: item * 2, greater_items))
print(greater_items)
print(doubled)
装饰器
# ========== 1. 定义装饰器 ==========
def my_decorator(func):
def wrapper():
print(">>> 函数执行前")
func() # 调用原始函数
print("<<< 函数执行后")
return wrapper
# ========== 2. 使用装饰器 ==========
@my_decorator
def say_hello():
print("Hello, World!")
# ========== 3. 调用 ==========
say_hello()
带参数的装饰器本质上是在简单装饰器外面再包一层函数,用来接收参数。
推导式表达式
列表推导式
# 列表推导式生成列表,用0~4的数字分别乘以2
numbers = [i * 2 for i in range(5)]
print(numbers) #[0, 2, 4, 6, 8]
字典推导式
scores = {"tom": 80, "alex": 90, "rose": 85}
new_scores = {name: score + 5 for name, score in scores.items()}
print(new_scores) #{'tom': 85, 'alex': 95, 'rose': 90}
生成器表达式
numbers = [i * 2 for i in range(5)] # 列表推导式
generator = (i * 2 for i in range(5)) # 生成器表达式
# 使用 next() 获取生成器的下一个值
print(next(generator)) # 输出 0
print(next(generator)) # 输出 2
print(next(generator)) # 输出 4
面向对象
Python支持多继承,多个父类有相同函数时,子类用super()调用父类的函数,只执行先继承的。
Python没有接口,所以实现多态也不用约束,是鸭子类型多态
NumPy
d 维度,ndarray n维数组
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
])
print(matrix.shape) # (2, 3)
print(matrix.ndim) # 2
Pandas
DataFrame 是 Pandas 最核心的数据结构,可以理解为“带行列标签的二维表格”。
import pandas as pd
scores = [
[88, 91, 95],
[76, 85, 82],
]
df = pd.DataFrame(
scores,
index=["张三", "李四"],
columns=["语文", "英语", "数学"],
)
print(df)
#打印
"""
语文 英语 数学
张三 88 91 95
李四 76 85 82
"""
# 从 CSV 文件读取数据
# df = pd.read_csv("sales.csv")
loc 和 iloc
Pandas 中两个特别重要的定位方式是:
loc:按标签取值iloc:按位置取值
import pandas as pd
df = pd.DataFrame({
"name": ["Alice", "Bob", "Cindy"],
"score": [88, 92, 79],
}, index=["a", "b", "c"])
print(df.loc["b", "score"])
# 按标签取值:取行index赋值的标签为 b、列标签为 score 的单元格,结果是 92
print(df.iloc[1, 1])
# 按位置取值:取第 2 行、第 2 列的单元格,结果也是 92