1. 从打印函数看Python的哲学
第一次接触Python时,最让我惊讶的不是它的语法简洁,而是那个看似简单的print()函数。在C语言里我们需要关心格式说明符,在Java里要调用System.out.println,而Python只需要print("hello world")。这种设计哲学贯穿了Python的整个语言体系——用最直观的方式表达逻辑。
print()在Python 3中是个函数,这意味着它可以接受参数,有返回值(返回None)。而在Python 2时代,print是个语句。这个变化体现了Python对一致性的追求——所有能产生副作用的操作都应该以函数形式存在。
python复制# Python 3的print函数签名
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
参数设计非常讲究:
*objects使用可变参数,允许同时打印多个对象sep默认空格分隔,符合英语书写习惯end默认换行,因为命令行输出通常需要换行file允许重定向到文件flush控制缓冲区,用于实时日志等场景
注意:在打印大量数据时,设置flush=True会影响性能。我曾在一个日志系统中因为频繁flush导致CPU使用率升高15%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 整除运算的底层逻辑
Python的整除运算符//看起来简单,但实际行为比想象中复杂。它执行的是"地板除"(floor division),即向负无穷取整,这与C语言的截断除法完全不同。
python复制7 // 3 # 2
-7 // 3 # -3 (不是-2)
这种设计是为了保持整除和取模的数学关系:
code复制a = (a // b) * b + (a % b)
在金融计算中,这种一致性特别重要。假设我们要计算-7天前的星期:
python复制today = 3 # 假设今天是周三
days_ago = (today - 7) % 7 # 3
# 如果用C语言的除法规则,这个计算就会出错
实现原理上,CPython的整除运算最终会调用PyNumber_FloorDivide:
c复制/* Objects/longobject.c */
static PyObject *
long_floor_div(PyObject *a, PyObject *b)
{
PyObject *div = long_div(a, b);
if (div == NULL) return NULL;
if (Py_SIZE(div) < 0 && !long_is_zero(div)) {
PyObject *one = _P
