设置python中命名参数的默认设置

时间:2016-08-25 08:10:49

标签: python

我有以下问题: 我必须通过API为特殊实体(点,线,面,体积,球体......)设置一些值到数据库中。

某些值对于每个实体都是唯一的,其他值始终是相同的。 所以我的想法是做一些事情(SetValues是我必须使用的东西放入数据库的API命令):

def CreateLineEntity(ID,Name,Solver,P1,P2,Move='no',Perimeter=0.0,Gap='yes'): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'P2':P2})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})
######################################################################
def CreatePointEntity(ID,Name,Solver,P1,Move='no',Perimeter=0.0,Gap='yes'): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})

因此,在每个函数中,Move的默认值为“no”

如果由于某种原因默认更改我必须检查完整代码现在更改默认值。

是否有更智能的方法来定义此类默认值? 我的目标是只更改代码中的一个值,并且还更改函数中的所有默认值

4 个答案:

答案 0 :(得分:3)

我通常会在所有这些项目中保留constants.py

下面:

<强> constant.py

MOVE = 'no'

<强> yourFile.py

from constants import MOVE  # add as many constants as needed
def CreateLineEntity(ID,Name,Solver,P1,P2,Move=MOVE,Perimeter=0.0,Gap='yes'): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'P2':P2})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})
######################################################################
def CreatePointEntity(ID,Name,Solver,P1,Move=MOVE,Perimeter=0.0,Gap='yes'): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})

在这种情况下,层次结构如下:

headFolder
    -constants.py
    -yourFile.py

答案 1 :(得分:2)

您可以创建用于存储默认值的字典。

defaults = {"move": "no", "perimeter": 0.0, "gap":"yes"}

def CreatePointEntity(ID,Name,Solver,P1,Move=defaults["move"],Perimeter=defaults["perimeter"],Gap=defaults["gap"]): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})

这样你只需要改变字典里面的默认值。

答案 2 :(得分:2)

如何将默认值作为常量存储在单独的文件中。

e.g:

constants.py:

MOVE = "on"
PERIMETER = "xyz"
...

你的剧本:

from constants import *

def CreateLineEntity(ID,Name,Solver,P1,P2,Move=MOVE,Perimeter=PERIMETER,Gap=GAP): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'P2':P2})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})
######################################################################
def CreatePointEntity(ID,Name,Solver,P1,Move=MOVE,Perimeter=PERIMETER,Gap=GAP): 
    SetValues(ID, {'Name':Name})
    SetValues(ID, {'P1':P1})
    SetValues(ID, {'Solver':Solver})
    SetValues(ID, {'Move':Move})
    SetValues(ID, {'Perim':Perimeter})
    SetValues(ID, {'Gap':Gap})

答案 3 :(得分:1)

您可以使用func_defaults元组更改方法中# CreateLineEntity.func_defaults --> ('no', 0.0, 'yes') defaults = list(CreateLineEntity.func_defaults) # You're modyfying first one which is for ``Move`` defaults[0] = 'yes' # And assign them back with changed value CreateLineEntity.func_defaults = tuple(defaults) 参数的默认值,该元组包含来自kwargs的值:

no

然后再次运行相同的功能,yes在此示例中将被As_SenderCountry替换。