1
2
3
sudo systemctl stop nginx
sudo certbot certonly --standalone -d blog.sososys.com
sudo systemctl start nginx

一、str — 用户友好的字符串表示

触发时机

  • 调用 str(obj) 时
  • 使用 print(obj) 时
  • 使用 f”{obj}” 或 “{}”.format(obj) 时

用途
给普通用户看的可读字符串,注重可读性

1
2
3
4
5
6
7
8
9
10
11
12
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __str__(self):
return f"姓名: {self.name}, 年龄: {self.age}"

p = Person("张三", 25)
print(p) # 输出: 姓名: 张三, 年龄: 25
print(str(p)) # 输出: 姓名: 张三, 年龄: 25
print(f"{p}") # 输出: 姓名: 张三, 年龄: 25

二、repr — 开发者调试用的字符串表示

触发时机

  • 在交互式解释器中直接输入对象时
  • 调用 repr(obj) 时
  • 未定义 str 时,print() 会回退使用 repr
  • f”{obj!r}” 时

用途
给开发者看的字符串,注重准确性,理想情况下可以用来重建对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __repr__(self):
return f"Person(name={self.name!r}, age={self.age!r})"

def __str__(self):
return f"姓名: {self.name}, 年龄: {self.age}"

p = Person("张三", 25)
repr(p) # 输出: Person(name='张三', age=25)
print(p) # 优先用 __str__: 姓名: 张三, 年龄: 25

# 列表中的对象使用 __repr__
print([p]) # 输出: [Person(name='张三', age=25)]

三、len — 定义对象长度

触发时机

  • 调用 len(obj) 时
  • 用于布尔判断时(len == 0 则为 False)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Playlist:
def __init__(self):
self.songs = []

def add(self, song):
self.songs.append(song)

def __len__(self):
return len(self.songs)

pl = Playlist()
pl.add("歌曲A")
pl.add("歌曲B")

print(len(pl)) # 输出: 2

# 布尔判断
if pl:
print("播放列表不为空") # 会执行

empty_pl = Playlist()
if not empty_pl:
print("播放列表为空") # 会执行

四、eq — 定义相等性判断

触发时机

  • 使用 == 运算符时

默认行为
未定义时,== 比较的是内存地址(同 is)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __eq__(self, other):
if not isinstance(other, Point):
return NotImplemented # 类型不同时返回 NotImplemented
return self.x == other.x and self.y == other.y

p1 = Point(1, 2)
p2 = Point(1, 2)
p3 = Point(3, 4)

print(p1 == p2) # True(值相同)
print(p1 == p3) # False
print(p1 == "abc") # False(NotImplemented 让Python反向尝试)

# 注意:定义 __eq__ 后,__hash__ 自动变为 None
# 对象不能作为字典键或集合元素,需同时定义 __hash__

五、其他常用魔术方法速览

比较运算符系列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Temperature:
def __init__(self, celsius):
self.celsius = celsius

def __eq__(self, other): return self.celsius == other.celsius # ==
def __ne__(self, other): return self.celsius != other.celsius # !=
def __lt__(self, other): return self.celsius < other.celsius # <
def __le__(self, other): return self.celsius <= other.celsius # <=
def __gt__(self, other): return self.celsius > other.celsius # >
def __ge__(self, other): return self.celsius >= other.celsius # >=

t1 = Temperature(20)
t2 = Temperature(30)
print(t1 < t2) # True
print(t1 > t2) # False

技巧:使用 @functools.total_ordering 只需实现 eq 和一个比较方法,其余自动推导。

1
2
3
4
5
6
7
8
9
10
11
12
13
from functools import total_ordering

@total_ordering
class Temperature:
def __init__(self, celsius):
self.celsius = celsius

def __eq__(self, other):
return self.celsius == other.celsius

def __lt__(self, other):
return self.celsius < other.celsius
# __le__, __gt__, __ge__ 自动生成

算术运算符系列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y

def __add__(self, other): # v1 + v2
return Vector(self.x + other.x, self.y + other.y)

def __sub__(self, other): # v1 - v2
return Vector(self.x - other.x, self.y - other.y)

def __mul__(self, scalar): # v * 3
return Vector(self.x * scalar, self.y * scalar)

def __rmul__(self, scalar): # 3 * v (反向)
return self.__mul__(scalar)

def __neg__(self): # -v
return Vector(-self.x, -self.y)

def __repr__(self):
return f"Vector({self.x}, {self.y})"

v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # Vector(4, 6)
print(v1 * 3) # Vector(3, 6)
print(3 * v1) # Vector(3, 6)
print(-v1) # Vector(-1, -2)

容器协议系列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MyList:
def __init__(self):
self._data = []

def __len__(self): # len(obj)
return len(self._data)

def __getitem__(self, index): # obj[index]
return self._data[index]

def __setitem__(self, index, value): # obj[index] = value
self._data[index] = value

def __delitem__(self, index): # del obj[index]
del self._data[index]

def __contains__(self, item): # item in obj
return item in self._data

def __iter__(self): # for x in obj
return iter(self._data)

生命周期与上下文管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class DatabaseConnection:
def __init__(self, url):
self.url = url
self.conn = None

def __enter__(self): # with 语句进入
self.conn = connect(self.url)
return self.conn

def __exit__(self, exc_type, exc_val, exc_tb): # with 语句退出
self.conn.close()
return False # False = 不吞掉异常

def __del__(self): # 对象被垃圾回收时
if self.conn:
self.conn.close()

# 使用
with DatabaseConnection("db://localhost") as conn:
conn.query("SELECT * FROM users")
# 自动关闭连接

hash — 配合 eq 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __eq__(self, other):
return self.x == other.x and self.y == other.y

def __hash__(self):
# 定义了 __eq__ 必须同时定义 __hash__
return hash((self.x, self.y))

p1 = Point(1, 2)
p2 = Point(1, 2)

# 可作为字典键和集合元素
d = {p1: "point A"}
print(d[p2]) # "point A"(p1 == p2,hash相同)

s = {p1, p2}
print(len(s)) # 1(被视为相同元素)

六、魔术方法总览表

类别 方法 触发场景
字符串 str print(), str(), f”{}”
字符串 repr repr(), 交互器, 容器中
长度 len len(), 布尔判断
比较 eq lt gt == < >

核心原则:魔术方法让自定义类与Python内置语法深度集成,是Python鸭子类型思想的核心体现——只要实现了对应的魔术方法,对象就能支持对应的语法和操作。

李虚中、徐子平创立算命术以后,算命的都少不了要和天干地支打交道,否则便寸步难行。

“天干地支”,简称“干支”,又称“干枝”。前人有云:“夫干,犹木之干,强而为阳;支,犹木之枝,弱而为阴。”可见称为干支的原始用意。

天干的数目有十位,它们的依次顺序是:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。

地支的数目有十二位,它们的依次顺序是:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。

一、数学基础

  • 线性代数:矩阵运算、特征值分解、SVD
  • 概率论与统计:贝叶斯定理、概率分布、最大似然估计
  • 微积分与优化:梯度、链式法则、凸优化
  • 信息论:熵、KL散度、互信息
  • 推荐书籍:
    《线性代数》— 吉尔伯特·斯特朗
    《概率论与数理统计》— 陈希孺
    《凸优化》— Boyd & Vandenberghe(免费PDF)
    《信息论基础》— Cover & Thomas

一、Python 基础入门

1.1 环境搭建:Python安装、pip包管理、虚拟环境(venv/conda)、IDE选择(VSCode/PyCharm)

1.2 基本语法:变量、数据类型、运算符、注释

1.3 流程控制:if/elif/else、for/while循环、break/continue/pass

1.4 输入输出:print、input、格式化字符串(f-string)

二、数据结构

  • 字符串:切片、常用方法、正则表达式(re模块)
  • 列表(List):增删改查、列表推导式
  • 元组(Tuple):不可变序列、解包
  • 字典(Dict):键值对、字典推导式、常用方法
  • 集合(Set):去重、交并差运算
  • 推导式:列表/字典/集合/生成器推导式

三、函数与模块

  • 函数定义:参数(位置/关键字/默认/可变参数)、返回值
  • 作用域:LEGB规则、global/nonlocal
  • 高阶函数:lambda、map、filter、reduce
  • 装饰器:函数装饰器、类装饰器、wraps
  • 生成器:yield、迭代器协议
  • 模块与包:import机制、init.py、相对/绝对导入

四、面向对象编程(OOP)

  • 类与对象:init、实例属性、类属性
  • 封装、继承、多态
  • 魔术方法:strreprlen、__eq__等
  • 类方法与静态方法:@classmethod、@staticmethod
  • 属性管理:@property、slots
  • 抽象类:abc模块
  • MRO与多继承:方法解析顺序

五、异常处理与文件操作

  • 异常处理:try/except/else/finally、自定义异常
  • 上下文管理器:with语句、enter/exit
  • 文件操作:读写文本/二进制文件、os/pathlib模块
  • 序列化:json、pickle、csv模块

六、常用标准库

  • 系统相关:os、sys、shutil、subprocess
  • 时间日期:datetime、time、calendar
  • 数据处理:collections、itertools、functools
  • 并发基础:threading、multiprocessing、concurrent.futures
  • 网络基础:socket、urllib、http.client
  • 日志:logging模块

七、异步编程

  • 协程基础:async/await语法
  • 事件循环:asyncio模块
  • 异步IO:aiohttp、aiofiles
  • 并发模型对比:多线程 vs 多进程 vs 协程

八、常用第三方库

方向 常用库
数据处理 NumPy、Pandas
数据可视化 Matplotlib、Seaborn、Plotly
Web开发 Flask、FastAPI、Django
爬虫 Requests、BeautifulSoup、Scrapy
测试 pytest、unittest、mock
机器学习 Scikit-learn、PyTorch、TensorFlow
数据库 SQLAlchemy、pymysql、redis-py

九、工程化与最佳实践

  • 代码规范:PEP8、类型注解(typing)、mypy
  • 包管理:poetry、pip-tools、requirements.txt
  • 测试:单元测试、集成测试、TDD
  • 调试:pdb、ipdb、VSCode调试器
  • 性能优化:cProfile、line_profiler、Cython
  • 设计模式:单例、工厂、观察者、策略模式
  • 文档:docstring、Sphinx

十、进阶专项方向(选择一个深入)

Web后端开发 → FastAPI / Django + 数据库 + 部署
数据分析 → Pandas + Matplotlib + Jupyter
机器学习/AI → NumPy + Scikit-learn + PyTorch
爬虫与自动化 → Scrapy + Playwright + 反爬策略
运维/脚本 → Fabric + Ansible + Shell交互

你是否曾觉得,语文课本里的古诗词像是博物馆中蒙尘的文物,遥远而陌生?那些整齐排列的方块字,是否总与“背诵全文”的焦虑紧密相连?请允许我为你揭开一个被隐藏了太久的秘密:这些穿越千年的诗句,其实是会呼吸的生命,正等待着与你展开一场跨越时空的心灵对话。

当我们打开社交媒体,为一首流行歌曲的歌词心动不已时,可曾想过——李白、杜甫、苏轼,正是他们时代的“顶流创作者”?那些被我们视为“考试内容”的诗句,其实是古人最鲜活的情感记录。李白“举杯邀明月,对影成三人”时,不正像极了我们在深夜发朋友圈诉说心事?苏轼“明月几时有,把酒问青天”的感慨,与我们在困惑时刻向星空发出的追问何其相似!这些文字之所以能穿越时空击中我们,正是因为人类最本质的情感从未改变。

每一首古诗词都是一扇任意门,轻轻推开,便能瞬间抵达另一个世界。“两个黄鹂鸣翠柳,一行白鹭上青天”——杜甫用十四个字绘制了一幅会动的春日图卷,鸟鸣声几乎穿透纸张;“大漠孤烟直,长河落日圆”——王维以十字写尽边塞苍茫,令人仿佛感受到扑面而来的风沙。这种通过文字构建“沉浸式体验”的能力,岂不比如今的VR技术更加神奇?诗人是最早的虚拟现实大师,他们用文字为我们建造了无数可随时进入的平行宇宙。

更有趣的是,古诗词中藏着无数“彩蛋”等待我们发现。李商隐的“相见时难别亦难,东风无力百花残”背后,是怎样的爱恋与无奈?杜甫写下“国破山河在,城春草木深”时,眼中看到的是怎样的景象?当我们了解诗背后的故事,文字便突然有了温度。这种解读过程,堪比侦探破案般引人入胜——我们通过零散线索,重建千年前的生活现场,与诗人的喜怒哀乐同频共振。

或许你会问:在短视频当道的时代,为什么还要读这些“老古董”?答案恰恰藏在我们这个时代最稀缺的东西里——古诗词提供了一种“慢思考”的可能,一种与浮躁保持距离的力量。当我们读着“采菊东篱下,悠然见南山”,不知不觉间便会放缓呼吸;当我们品味“行到水穷处,坐看云起时”,焦虑的心绪渐渐平复。在这个信息爆炸的时代,这些诗句仿佛一个个心灵避难所,让我们得以短暂逃离喧嚣,找回内心的宁静。

更重要的是,古诗词是我们文化基因的密码本。当我们看到落日时,不仅能说“哇,好大的太阳”,还能想起“落日熔金,暮云合璧”的绚烂;当我们登高望远时,不仅能拍照发圈,还能与王之涣一起感叹“欲穷千里目,更上一层楼”。这些传承千年的诗句,赋予我们一种更丰富、更深刻的体验世界的方式,让我们与这片土地上无数先辈通过共同的文化记忆相连。

如何开始这场奇妙的探险?不必正襟危坐,无需倒背如流。可以从最简单的开始:看到春雨时,想想“好雨知时节,当春乃发生”;望见明月时,默念“小时不识月,呼作白玉盘”。让这些诗句自然而然地进入生活,成为我们表达感受的另一种语言。你会发现,背诗不再是任务,而像学会一首好听的歌,忍不住时时哼唱;像收藏一个精美的表情包,在合适场合信手拈来。

亲爱的同学,那些课本里的古诗词从来不是冰冷的知识点,而是无数先人留给我们的心灵礼物。它们是被压缩的时间胶囊,是能穿越时空的情感密码。当你下次打开诗词集,不妨想象自己正在解锁一个跨越千年的朋友圈——李白在晒他的月亮酒会,杜甫在记录他的旅途见闻,苏轼在分享他的生活哲思。而你,可以通过这些文字与他们即时互动,感受那份从未褪色的情感温度。

这场贯穿千年的心灵奇旅已经开始,请问准备好与李白共饮、与苏轼同游、与李清照对话了吗?你的诗心,正在被唤醒。

人生如逆旅,我亦是行人。苏轼的这句词,道尽了人在时间长河中的漂泊与追寻。千百年来,诗词不仅是文人墨客的闲情雅致,更是照见生命本质的一面明镜。在平仄起伏间,在比兴寄托里,诗词以其独特的艺术形式,为我们提供了一把解读人生意义的钥匙。

诗词教会我们的第一课,是关于生命的短暂与珍贵。“人生天地间,忽如远行客”,《古诗十九首》中的叹息穿越千年依然震撼人心。李白在《春夜宴从弟桃花园序》中直言:“夫天地者,万物之逆旅;光阴者,百代之过客。”这种对生命有限的清醒认知,非但没有导致消极无为,反而激发了中国文人强烈的生命意识——既然时光易逝,就当珍惜当下,活出生命的密度与质量。陶渊明“采菊东篱下,悠然见南山”的闲适,背后是对官场虚名的不屑与对真实生活的拥抱;苏轼“人生如梦,一尊还酹江月”的感慨,蕴含的是对当下体验的珍视。诗词告诉我们:生命的意义首先在于清醒地活着,感受每一刻的独特与不可重复。

人生绝非坦途,而诗词展现了困境中的超越智慧。陆游“山重水复疑无路,柳暗花明又一村”的名句,已成为逆境中保持希望的经典隐喻。诗人词客们不回避苦难,却总能从中开掘出精神的高度。杜甫身经乱离,目睹“国破山河在,城春草木深”的惨状,却依然怀抱“安得广厦千万间,大庇天下寒士俱欢颜”的博大胸怀。苏轼屡遭贬谪,却能吟出“莫听穿林打叶声,何妨吟啸且徐行”的洒脱,在最低谷处展现最高远的精神境界。这些诗词向我们昭示:人生的意义不在于避开苦难,而在于如何带着苦难前行,并在其中完成精神的升华。

孤独是生命的常态,而诗词展现了孤独中的丰富与深邃。陈子昂登幽州台,“念天地之悠悠,独怆然而涕下”,这种孤独感接通了个体与永恒。柳宗元“孤舟蓑笠翁,独钓寒江雪”的意象,不仅是政治失意的写照,更是独立人格的诗意表达。诗人们在孤独中与自然对话,与历史交感,与内心深处的自我相遇。李商隐“嫦娥应悔偷灵药,碧海青天夜夜心”的诗句,将孤独转化为一种凄美的永恒存在。诗词告诉我们:孤独不是需要填补的空虚,而是可以深耕的沃土,真正的生命意义常常在独处时被领悟。

人生的意义还在于情感的深度与广度,诗词恰是情感的结晶。“相见时难别亦难,东风无力百花残”,李商隐的爱情诗写尽了情感的缠绵与无奈;“桃李春风一杯酒,江湖夜雨十年灯”,黄庭坚的友情诗穿越时空依然感人肺腑;“慈母手中线,游子身上衣”,孟郊的亲情诗简单质朴却直击人心。诗词提醒我们:人生的意义很大程度上在于我们爱过、痛过、思念过、期待过,在于情感体验的丰富性与深刻性。没有深刻情感体验的人生,再长也是苍白的。

而最终,诗词揭示了生命意义的最高层次——超越小我,与更大的存在融合。杜甫“安得广厦千万间,大庇天下寒士俱欢颜”的胸怀,范仲淹“先天下之忧而忧,后天下之乐而乐”的担当,文天祥“人生自古谁无死,留取丹心照汗青”的气节,都将个人生命融入历史洪流与文化传承之中。这种超越不是对个体价值的否定,而是个体价值的最高实现——通过将自己献给某种永恒之物,个体生命获得了永恒。

在诗词的长河中漫游,我们看到的不仅是文字之美,更是生命可能达到的高度与深度。诗词之于人生,犹如灯塔之于夜航,它不能替我们行走人生的每一步,却能在迷雾中指引方向,在困惑时提供启示。每个生命都是自己意义的创作者,而诗词提供了丰富的素材与灵感。当我们以诗心观照生活,日常生活便有了诗意;当我们以人生体验诗词,古老文字便焕发新生。

或许,人生的终极意义就像一首好诗——不能用一句话概括,却能在反复品味中不断发现新的层次;需要经历推敲打磨,最终呈现出简洁中的丰富;既是个体的独特创造,又能与无数心灵产生共鸣。在这个意义上,每个人都是自己生命的诗人,用选择与行动书写着独一无二的诗篇。而当我们能够以欣赏诗词的细腻与深刻来体验人生,以创作诗词的匠心与激情来经营人生,生命本身便成为了一首值得反复吟咏的绝妙好诗。

秋风又起,桂子飘香,一年一度的教师节如期而至。在这个充满敬意的季节里,翻阅泛黄的诗卷,我们能在字里行间寻得师者永恒的身影。中国古代诗词如一条蜿蜒的文化长河,流淌着对师道的尊崇与礼赞,那些隽永的诗句穿越时空,依然闪烁着智慧的光芒。

《荀子·劝学》开篇即言:“学不可以已。”此言如晨钟暮鼓,回荡在无数求知者的心间。师者,所以传道授业解惑也。韩愈在《师说》中精准勾勒出教师的使命与担当,将师道提升至文化传承的高度。在古代诗人的笔下,师者形象常与自然意象相融合,李商隐“春蚕到死丝方尽,蜡炬成灰泪始干”的千古名句,不仅写尽了情感的执着,更被后人引申为教师无私奉献的精神写照——如春蚕吐丝般倾囊相授,似蜡烛燃烧般照亮他人。

杜甫言“读书破万卷,下笔如有神”,这“神”并非凭空而来,乃是在师者指引下,经过千百次锤炼而得。古代学子尊师重道,程门立雪的故事流传千年:杨时、游酢为请教问题而立于师尊程颐门前,即便大雪纷飞亦不离去,直至老师醒来看见门外已积雪一尺。这不仅是尊师的佳话,更体现了对知识的渴求与对师者的敬重。

师者之于学子,犹如春风之于幼苗。白居易诗句“野火烧不尽,春风吹又生”中的“春风”,恰似师者化育万物的力量,在知识的原野上唤醒沉睡的种子,催发智慧的萌芽。这种教化之力,潜移默化而又深远持久,塑造着一个个独立的灵魂。

回望历史,孔子周游列国,弟子三千,开创私学传统;朱熹讲学授徒,复兴白鹿洞书院,传承文化薪火。师者不仅是知识的传递者,更是文明的守护人。他们如同郑板桥画中的竹子“咬定青山不放松”,坚守教育阵地,在时代变迁中守护着文化的根脉。

今人庆祝教师节,不妨从古诗词中汲取智慧,以更深厚的情感理解师道的价值。当我们吟诵“新竹高于旧竹枝,全凭老干为扶持”时,应当明白每一代人的成长都离不开前人的托举。在这个特别的日子里,让我们以千年文脉为底色,用最真挚的心意向所有教师致敬——他们延续着文明的火种,塑造着民族的未来,他们的工作平凡而伟大,如诗中所写:“润物细无声”,却滋养着整个时代。

片言之赐,皆事师也。愿尊师重教的传统如不绝的诗香,永远弥漫在中华文化的空气之中。

数据类型

  • 浮点数
  • 原子
  • 元组
  • 列表
  • 字符串

编译和运行

makefile自动化

0%