⏰ 时间处理
计算日期差
import datetime
date1 = datetime.date(2022, 1, 1)
date2 = datetime.date(2023, 6, 27)
delta = date2 - date1
print(delta.days)
日期比较
import datetime
date1 = datetime.date(2022, 1, 1)
date2 = datetime.date(2023, 6, 27)
if date1 < date2:
print("date1 is earlier than date2")
获取当前时间
import datetime
now = datetime.datetime.now()
print(now)
# 格式化
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)
时间戳
import time
timestamp = int(time.time())
print(timestamp)
时区设置
import pytz
import datetime
# 设置默认时区
default_tz = pytz.timezone('US/Eastern')
current_time = datetime.datetime.now(default_tz)
print(current_time)
# UTC时间戳转换
utc_timestamp = 1626075378.123456
est_tz = pytz.timezone('US/Eastern')
est_datetime = datetime.datetime.fromtimestamp(utc_timestamp, est_tz)
📅 日历操作
import calendar
# 计算某月天数
month = 2
year = 2023
days_in_month = calendar.monthrange(year, month)[1]
# 判断闰年
is_leap = calendar.isleap(2023)
📋 深拷贝和浅拷贝
浅拷贝
import copy
lst1 = [1, 2, [3, 4]]
lst2 = lst1.copy()
lst1[2].append(5)
print(lst1) # [1, 2, [3, 4, 5]]
print(lst2) # [1, 2, [3, 4, 5]] - 共享内部对象
深拷贝
import copy
lst1 = [1, 2, [3, 4]]
lst2 = copy.deepcopy(lst1)
lst1[2].append(5)
print(lst1) # [1, 2, [3, 4, 5]]
print(lst2) # [1, 2, [3, 4]] - 独立副本
🔒 闭包
def outer():
x = "hello"
def inner():
nonlocal x
x = "world"
inner()
print(x)
outer() # 输出 "world"
返回函数注意事项
# 错误示例 - 引用循环变量
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
f1() # 9 (不是1!)
f2() # 9
f3() # 9
# 正确示例
def count():
def f(j):
def g():
return j*j
return g
fs = []
for i in range(1, 4):
fs.append(f(i))
return fs
f1, f2, f3 = count()
f1() # 1
f2() # 4
f3() # 9
🔷 Lambda表达式
# 普通函数
def square(x):
return x * x
# Lambda表达式
square = lambda x, y: x*x + y
print(square(2, 3))
🗺️ map函数
nums = [1, 2, 3, 4, 5]
x = map(lambda x: x*x, nums)
print(list(x)) # [1, 4, 9, 16, 25]
🔍 filter函数
names = ['alex', 'john', 'aneesa', 'aidan']
data = [
{'username': 'alex_1'},
{'username': 'axis_07'},
{'username': 'aaa'},
]
usernames = list(filter(lambda u: len(u['username']) > 4, data))
for name in usernames:
print(name['username'])
📉 reduce函数
from functools import reduce
x = [1, 2, 3, 4, 5, 6, 7, 8]
new_list = reduce(lambda x, y: x + y, x)
print(new_list) # 36
📊 sorted排序
data = [
{'name': 'John', 'class': 7},
{'name': 'Zayn', 'class': 2},
{'name': 'Aquaman', 'class': 11},
]
# 按class升序
sorted_dict = sorted(data, key=lambda user: user['class'])
# 按class降序
sorted_dict2 = sorted(data, key=lambda user: user['class'], reverse=True)
✅ all和any函数
# all - 所有元素都为True
numbers = [1, 2, 3, 4]
print(all(numbers)) # True
# any - 任意元素为True
numbers = [0, 1, 2, 3]
print(any(numbers)) # True
🔄 zip函数
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
symbols = ['!', '@', '#']
zipped = zip(numbers, letters, symbols)
print(list(zipped)) # [(1, 'a', '!'), (2, 'b', '@'), (3, 'c', '#')]
# 创建字典
d = dict(zip(numbers, letters))
print(d) # {1: 'a', 2: 'b', 3: 'c'}
📦 模块导入
import random as r # 重命名
import random # 引入模块
from random import randint # 引入函数
from random import * # 引入所有函数
🎭 装饰器
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before the function is called.")
result = func(*args, **kwargs)
print("After the function is called.")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
say_hello("Alice")
🏷️ 枚举
from enum import Enum, unique
@unique
class Weekday(Enum):
Sun = 0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6
day1 = Weekday.Mon
print(day1) # Weekday.Mon
print(day1.value) # 1