Python 对于使用关键字参数的所有函数,是否有一种方法可供用户全局覆盖关键字参数的默认值?

Python 对于使用关键字参数的所有函数,是否有一种方法可供用户全局覆盖关键字参数的默认值?,python,pandas,Python,Pandas,在使用pandas时,我发现自己在许多函数调用中指定inplace=True。我使用的比默认值多得多,根据惯例,默认值往往是inplace=False 有没有一种方法可以指定一些(可能是全局的)变量,比如 inplace = True 然后做一些事情,使该变量自动传递给任何具有“inplace”关键字参数的函数,从而消除每次键入该变量的需要 具体来说,一个理想的解决方案将 df.set_index(['id', 'year']) 相当于 df.set_index(['id', 'year']

在使用pandas时,我发现自己在许多函数调用中指定inplace=True。我使用的比默认值多得多,根据惯例,默认值往往是inplace=False

有没有一种方法可以指定一些(可能是全局的)变量,比如

inplace = True
然后做一些事情,使该变量自动传递给任何具有“inplace”关键字参数的函数,从而消除每次键入该变量的需要

具体来说,一个理想的解决方案将

df.set_index(['id', 'year'])
相当于

df.set_index(['id', 'year'], inplace=True)
同样,对于任何接受“inplace”参数的函数

这似乎是一个一般的Python问题——但我当前的上下文是熊猫。我没有发现关于默认参数值的用户覆盖主题的任何其他问题(除了定义某种包装函数,这将涉及类似数量的要调用的键入)。至于尝试什么,我没有线索。我已经知道,仅在调用范围中定义具有该名称的变量不会将值分配给函数范围内的参数


我使用的是Python 3.7.6和pandas 0.25.3,以防万一。

我认为实现这种行为的唯一方法是对您想要更改的代码进行修补-例如,如果您想要更改pd.DataFrame的行为,您可以这样做(这里有一些小缺点,比如放弃使用
inplace
作为位置参数,如果它曾经是+也许有人可以指出更多的问题,但总的来说它是有效的):

这样,您仍然可以调用
df.dropna(inplace=False)
,但默认值将是
inplace=True

也就是说,我强烈建议您不要这样做——这样的更改会让其他人很难阅读您代码的随机部分:他们可能不知道您做了这样的替换,您的代码对他们来说可能毫无意义。

尝试
部分

从functools导入部分
f=部分(DataFrame.set_索引,inplace=True)
f(df)#应大致等于df.det_指数(in_place=True)
import pandas as pd
import inspect
import functools
for m in inspect.getmembers(pd.DataFrame, predicate=inspect.isfunction):
    if 'inplace' in inspect.getfullargspec(m[1]).args:
        setattr(pd.DataFrame, m[0], functools.partialmethod(m[1], inplace=True))