跨越范式的组合艺术:Scheme begin vs Python逗号
一、核心定义与直觉1.1 Scheme begin:时间维度的"打包器"begin 将多个表达式组合成一个单一的表达式。核心逻辑是顺序执行(Side-effect sequencing)——先做 A,再做 B,返回 B 的结果。 1234567(begin (display "Hello") (display " ") (display "World") 42);; 打印:Hello World;; 返回:42 begin 是为了解决一个矛盾:函数体只能返回一个值,但在有副作用的语言中需要做多件事。 1.2 Python 逗号:空间维度的"分隔符"逗号 , 是一个分隔符或构造器。核心逻辑是并列关系(Juxtaposition)——它用于分隔参数、列表元素,或者构造元组。它不隐含"先做这个再做那个"的顺序依赖,而是强调"把这些放在一起"。 12345678# 分隔参数print("Hello",...
Python进阶必修课:掌握Zip, Map, Filter, Reversed的优雅之道
一、引言:告别冗长的 For 循环你一定写过这样的代码: 123456names = ["Alice", "Bob", "Charlie"]ages = [25, 30, 35]result = []for i in range(len(names)): if ages[i] > 28: result.append(names[i].upper()) 索引操作、条件判断、手动追加……这段代码能跑,但不够 Pythonic。Python 提供了四个核心内置函数——zip、map、filter、reversed,它们让数据处理像搭积木一样简洁。 更重要的是,它们返回的都是迭代器,采用惰性求值(Lazy Evaluation)——数据不是一次性全部生成,而是按需产出。这意味着处理百万级数据时,内存占用可能只有几个字节。 二、Map:数据转换的流水线2.1 核心作用对序列中的每个元素执行相同的操作(映射)。 1map(function, iterable) 2.2...
Python函数柯里化:将多参数函数转化为单参数函数链
一、引言如果你写过 functools.partial,或者曾经用闭包"锁定"一个参数,那你其实已经在不知不觉中使用了**柯里化(Currying)**的思想。这个名字来源于数学家 Haskell Curry,而它背后的思想极为简洁:将接受多个参数的函数,转化为一系列只接受一个参数的函数。 从 Python 的视角出发,柯里化不仅是一种函数式编程技巧,更是深入理解闭包、高阶函数与"函数是对象"这三件事的绝佳切入点。 二、什么是柯里化2.1 原始定义在数学和 lambda 演算中,柯里化的定义是: 将一个接受 N 个参数的函数 f(a, b, c) 转化为 f(a)(b)(c) —— 即接受第一个参数返回新函数,新函数接受第二个参数返回下一个新函数,直到收集完所有参数时执行原始逻辑。 2.2 一个直观的例子从一个简单的加法函数开始: 12345# 普通写法:一次接受两个参数def add(a, b): return a + bprint(add(3, 5)) # 输出:8 柯里化之后: 123456789#...

