Python 最小化代码量
我在下面有这个函数,在翻译之前,我还需要检查这些变量是否都是无的Python 最小化代码量,python,django,Python,Django,我在下面有这个函数,在翻译之前,我还需要检查这些变量是否都是无的 def save(self): # add an an if condition to check all the below variables if they are none # if self.name_es or ..... is not None: self.name_es = translateField(self.name, 'es') if not None self.name_a
def save(self):
# add an an if condition to check all the below variables if they are none
# if self.name_es or ..... is not None:
self.name_es = translateField(self.name, 'es') if not None
self.name_ar = translateField(self.name, 'ar')
self.description_es = translateField(self.description, 'es')
self.description_ar = translateField(self.description, 'ar')
super(City, self).save()
这是translate函数:
def translateField(text, lang):
try:
return client.translate(text, lang)
except:
pass
问题是,我的模型中有很多类都包含上述内容。在每个保存函数中,我对不同的变量执行相同的操作
我可以在这里做些什么来减少代码量?“_es”和“_ar”总是附加到我需要返回翻译输出的这些变量上。使用
setattr
:
for lang in ["es", "ar"]:
setattr(self, "name_" + lang, translateField(self.name, lang))
setattr(self, "description_" + lang, translateField(self.description, 'es'))
如果您有许多字段和许多语言,那么您甚至可以将其设置为嵌套循环
我可以警告一下吗?如果什么不是
None
<代码>自身名称?或self.name_es
?如果在translateField
中出现错误,该函数将返回None
。这是你的意图吗?那没什么意义;为什么该函数要在类中查找属性?我的意思是:def translateField(fieldName)
,其中fieldName
是self.name
,然后它在数组中的两种语言字符串上循环,使用setattr
执行@larsmans所做的操作,我将检查每个循环是否self.name\es
例如为none。。。等等我不想在每个类中同时查找两个翻译字段。@mohdail:您需要传递self
以及setattr
,这样才能使translateField
成为类的一个方法。@mohdail:我理解,但如果您要在其中执行setattr
,那么它应该是一个方法。