我有以下问题: 我必须通过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”
如果由于某种原因默认更改我必须检查完整代码现在更改默认值。
是否有更智能的方法来定义此类默认值? 我的目标是只更改代码中的一个值,并且还更改函数中的所有默认值
答案 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
替换。