str.split()不传参数与显式传None完全等价,均触发空白符分割并合并连续空白;传空字符串''则报ValueError;maxsplit参数行为一致;CPython源码中二者走同一执行路径。
行为完全相同,str.split() 不传参数和显式传 None 是等价的。
都触发“空白符分割 + 合并连续空白”逻辑
Python 文档明确说明:当 sep 参数为 None(或未提供)时,split() 会以任意空白字符(空格、制表符 \t、换行符 \n、回车 \r、换页 \f 等)作为分隔符,并且自动忽略首尾空白,同时将中间连续的多个空白视为一个分隔位置。
-
" a b\tc\n".split()→['a', 'b', 'c'] -
" a b\tc\n".split(None)→['a', 'b', 'c']
传空字符串 '' 会报错,但 None 和不传不会
这是关键区别点:空字符串 '' 是非法分隔符,会直接抛出 ValueError;而 None 和省略参数都属于“默认模式”,安全可用。
-
"a b".split('')→ValueError: empty separator -
"a b".split()和"a b".split(None)都正常返回['a', 'b']
maxsplit 参数在两种调用下表现一致
无论是否显式写 None,只要指定了 maxsplit,分割逻辑不变,只限制最多切几刀。
-
"a b c d".split(maxsplit=2)→['a', 'b', 'c d'] -
"a b c d".split(None, maxsplit=2)→['a', 'b', 'c d']

源码层面就是同一路径
CPython 实现中,str.split() 的 C 函数会先检查 sep 是否为 None;如果没传 sep,解释器自动补上 None,后续流程完全一致。所以这不是“相似”,而是真正意义上的同一条执行路径。







