PEP 3102很清楚地解释了基本原理:关键是允许函数接受本质上正交的各种“选项”。指定这些位置在定义和调用方面都很尴尬,因为它们没有任何明显的“优先级”可以转换为位置顺序。在
在不同的库中,有许多函数可以从中受益。例如,pandas.read_csv的调用签名是:def parser_f(filepath_or_buffer,
sep=sep,
dialect=None,
compression=None,
doublequote=True,
escapechar=None,
quotechar='"',
quoting=csv.QUOTE_MINIMAL,
skipinitialspace=False,
lineterminator=None,
header='infer',
index_col=None,
names=None,
prefix=None,
skiprows=None,
skipfooter=None,
skip_footer=0,
na_values=None,
na_fvalues=None,
true_values=None,
false_values=None,
delimiter=None,
converters=None,
dtype=None,
usecols=None,
engine='c',
delim_whitespace=False,
as_recarray=False,
na_filter=True,
compact_ints=False,
use_unsigned=False,
low_memory=_c_parser_defaults['low_memory'],
buffer_lines=None,
warn_bad_lines=True,
error_bad_lines=True,
keep_default_na=True,
thousands=None,
comment=None,
decimal=b'.',
parse_dates=False,
keep_date_col=False,
dayfirst=False,
date_parser=None,
memory_map=False,
nrows=None,
iterator=False,
chunksize=None,
verbose=False,
encoding=None,
squeeze=False,
mangle_dupe_cols=True,
tupleize_cols=False,
infer_datetime_format=False):
除了filepath之外,大多数都是正交选项,用于指定如何解析CSV文件的不同方面。没有什么特别的原因,它们会以任何特定的顺序通过。你会发疯的跟踪这些东西的位置顺序。将它们作为关键字传递更有意义。在
现在,您可以看到pandas实际上并没有将它们定义为仅限关键字的参数,大概是为了保持与python2的兼容性。我可以想象,许多库出于同样的原因而避免使用这种语法。我不知道哪些图书馆(如果有的话)已经开始使用它。在