比如我现在有如下函数:
def test(conn, sql, **kwargs):
if kwargs:
data = pd.read_sql(sql, conn, kwargs中的内容)
else:
data = pd.read_sql(sql, conn)
return data
我想实现的功能是:
test(conn, sql, coerce_float=False)的时候返回的数据是
pd.read_sql(sql, conn, coerce_float=False)的结果
可以直接写**kwargs
的
def test(conn, sql, **kwargs):
if kwargs:
data = pd.read_sql(sql, conn, **kwargs)
else:
data = pd.read_sql(sql, conn)
return data
这个函数实现了一个可选参数的功能,如果在调用函数时传入了关键字参数(kwargs),那么它会在调用pd.read_sql()时将这些关键字参数传入,否则只调用pd.read_sql(sql, conn)并返回结果。
如果你想要在调用test(conn, sql, coerce_float=False)时返回pd.read_sql(sql, conn, coerce_float=False)的结果,你需要在test()函数内部将coerce_float=False作为默认值传入kwargs中,例如:
def test(conn,sql, **kwargs):
kwargs.setdefault('coerce_float', False)
data = pd.read_sql(sql,conn, **kwargs)
return data
那你就可以用,**kwargs 把 kwargs 中的内容传递给子函数。
def test(conn, sql, **kwargs):
if kwargs:
data = pd.read_sql(sql, conn, **kwargs)
else:
data = pd.read_sql(sql, conn)
return data
代码里面, kwargs 不为空,那么用 **kwargs 把内容传递给 pd.read_sql 函数; kwargs 为空,就直接用 pd.read_sql(sql, conn)。
所以 说 test(conn, sql, coerce_float=False) 就等价于 pd.read_sql(sql, conn, coerce_float=False)
直接说答案的话,就是将**kwargs继续往下传递,直接将**kwargs作为实参写进括号里
但是实际上,加一个星是解元组,加两个星代表解字典
你可以打印**kwargs看看到底是个什么
按照回答的时间顺序采纳第一个正确的答案
def next_fun(test01, arg2, arg3):
print(test01)
print(arg2)
print(arg3)
def func_kwargs(arg1, **kwargs):
print('arg1 =', arg1)
print('kwargs =', kwargs)
next_fun('test01', **kwargs)
func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})