Python高级语法

⏰ 时间处理

计算日期差

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

作者:spike

分类: Python

创作时间:2026-02-23

更新时间:2026-02-23