我希望每次都使用具有相同参数的函数,这样我就不必指定可选参数。
例如,
在pickle.dump中,https://docs.python.org/2/library/pickle.html#pickle.dump 而不是协议的默认值为0,我希望它是1。
因此,pickle.dump(obj,file)
将评估为pickle.dump(obj,file,1)
而不是pickle.dump(obj,file,0)
答案 0 :(得分:2)
这是functools.partial的用途
import pickle
import functools
mypickle = functools.partial(pickle.dump, protocol=1)
with open('data.dat', 'w') as f:
mypickle(1, f)
答案 1 :(得分:1)
制作您自己的customized_dump
函数,将所需的默认参数传递给json.dump
def customized_dump(data, buffer, protocol = 1): return json.dump(data, buffer, protocol)
答案 2 :(得分:1)
您可能不应该实际编写这样的代码,但可以覆盖函数定义的默认参数。
import pickle
# Previous value was (None,)
pickle.dump.__defaults__ = (1,)
with open('foo.pkl', 'wb') as fh:
# Should use protocol 1
pickle.dump({'foo': 'bar'}, fh)
__defaults__
中的值从右到左分配给未指定的位置参数到函数调用。例如:
def foo(a, b):
return 2 * a + b
foo.__defaults__ = (3,) # Result of def foo(a, b=3)
foo(2) # 2 * 2 + 3
foo.__defaults__ = (3, 6) # Result of def foo(a=3, b=6)
foo(2) # 2 * 2 + 6
foo() # 2 * 3 + 6
(请注意,这不适用于内置函数或没有__default__
属性的其他类型。)
答案 3 :(得分:1)
您可以存储旧功能并将其替换为您自己的调用前一个版本的版本。就个人而言,我不会推荐这个,但这是你的电话。
import pickle
from functools import wraps
olddump = pickle.dump
@wraps(olddump)
def newdump(obj, file, protocol=1):
olddump(obj, file, protocol)
pickle.dump = newdump
现在pickle.dump
将使用默认值1.如果您将其用于pickle,也许最好使用文件和协议实例化Pickler
对象,然后进行后续{{ 1}}调用它?例如,
dump()