args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。
将*args理解为变元的缩写,而**kwargs理解为关键字变元的缩写。各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。
在*args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后);
在**kwargs中,双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。
code from custom-classification
# data.py
def read_sheets(data_dir, pattern=None, **kwargs):
if pattern is None:
paths = [data_dir]
else:
paths = sorted(Path(data_dir).expanduser().resolve().glob(pattern))# glob()添加扩展名
sheets = []
with mp.Pool() as p: # mutiprocess进程池Pool()
results = [p.apply_async(read_sheet, args=(path,), kwds=kwargs) for path in paths]
sheets = [r.get() for r in results]
sheets = concat(sheets, **kwargs)
return sheets
# port_general_trade.py
reader_kwargs = dict(
usecols=input_cols,
drop_duplicates_subset=True,
dtype=object, quoting=2, na_filter=False, nrows=None)
# config.py
import experiments.port_general_trade as exp
# train.py
def create_dataset():
...
sh = data.read_sheets(data_dir, exp.file_name, **exp.reader_kwargs)