Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最小化代码量_Python_Django - Fatal编程技术网

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
,那么它应该是一个方法。