Python:将可选参数设为默认值

时间:2015-08-18 19:56:44

标签: python pickle

我希望每次都使用具有相同参数的函数,这样我就不必指定可选参数。

例如,

在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)

4 个答案:

答案 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()