Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 - Fatal编程技术网

Python 缩短条件链

Python 缩短条件链,python,Python,我有一个很长的条件,可以检查字段是否已被修改以调用函数: if self.half_pension or not self.half_pension or self.half_pension_occasional \ or not self.half_pension_occasional or self.half_pension_id != self._origin.half_pension_id \ or self.half_pension_begin_

我有一个很长的条件,可以检查字段是否已被修改以调用函数:

    if self.half_pension or not self.half_pension or self.half_pension_occasional \
        or not self.half_pension_occasional or self.half_pension_id != self._origin.half_pension_id \
        or self.half_pension_begin_date != self._origin.half_pension_begin_date \
        or self.half_pension_end_date != self._origin.half_pension_end_date \
        or self.half_pension_monday != self._origin.half_pension_monday \
        or self.half_pension_tuesday != self._origin.half_pension_tuesday \
        or self.half_pension_thursday != self._origin.half_pension_thursday \
        or self.half_pension_friday != self._origin.half_pension_friday \
        or self.half_pension_responsible_partner != self._origin.half_pension_responsible_partner:
            monstringxmlhalfpension = self.get_data_xml_for_halfpension(idUsager)
            resp_halfpension = c.service.XmlAjouterUnEvenement(Synchrone=1, donneesXml=monstringxmlhalfpension)
这是为了在奥多10内使用


有没有办法缩短这种情况?谢谢

请尝试改用布尔值有效值:

begin_date_error = self.half_pension_begin_date != self._origin.half_pension_begin_date 
mond_error = self.half_pension_monday != self._origin.half_pension_monday 
等等

如果需要的话,你甚至可以改变你的一些或条件(记住,“或”是关联的),比如:

等等


这意味着最终,您的条件将包括这些变量名,而不是整个条件,因此会短得多。

尝试使用布尔有效值:

begin_date_error = self.half_pension_begin_date != self._origin.half_pension_begin_date 
mond_error = self.half_pension_monday != self._origin.half_pension_monday 
等等

如果需要的话,你甚至可以改变你的一些或条件(记住,“或”是关联的),比如:

等等


这意味着最终,您的条件将包括这些变量名,而不是整个条件,因此会短得多。

请注意,这些条件总是正确的:

if self.half_pension or not self.half_pension \
   or self.half_pension_occasional or not self.half_pension_occasional
布尔值要么为真,要么为假,因此上面的表达式是重言式:一个始终为真的条件。换句话说:问题中的
if
语句不可能是假的

另外,请注意,
self.half\u pension\u周三
的条件缺失,我不知道这是否是故意的

话虽如此,您似乎在比较一个对象中的所有字段,是否覆盖
\uuuuueq\uuuuu
\uuuu ne\uuuuu
使两个对象相等,当且仅当您感兴趣的所有字段都相同?相反,如果其中一个字段不同,它们就不同。这样,您的情况可以简单到:

if self != self._origin:

请注意,这些条件始终正确:

if self.half_pension or not self.half_pension \
   or self.half_pension_occasional or not self.half_pension_occasional
布尔值要么为真,要么为假,因此上面的表达式是重言式:一个始终为真的条件。换句话说:问题中的
if
语句不可能是假的

另外,请注意,
self.half\u pension\u周三
的条件缺失,我不知道这是否是故意的

话虽如此,您似乎在比较一个对象中的所有字段,是否覆盖
\uuuuueq\uuuuu
\uuuu ne\uuuuu
使两个对象相等,当且仅当您感兴趣的所有字段都相同?相反,如果其中一个字段不同,它们就不同。这样,您的情况可以简单到:

if self != self._origin:
考虑到这一点:

self.SOMETHING1 != self._origin.SOMETHING1 
or self.SOMETHING2 != self._origin.SOMETHING2
or self.SOMETHING3 != self._origin.SOMETHING3
可以使用
getattr
缩短它:

attrs = ['SOMETHING1', 'SOMETHING2', 'SOMETHING3']
any(getattr(self, attr) != getattr(self._origin, attr) for attr in attrs)
当然,您也可以动态创建
attrs
,例如使用:

attrs = [attr for attr in dir(self) if attr.startswith('half_pension')]
或者类似的东西。您必须自己多走一英里,因为您没有提供详细信息,我们也没有关于
self
内部内容的信息

考虑到这一点:

self.SOMETHING1 != self._origin.SOMETHING1 
or self.SOMETHING2 != self._origin.SOMETHING2
or self.SOMETHING3 != self._origin.SOMETHING3
可以使用
getattr
缩短它:

attrs = ['SOMETHING1', 'SOMETHING2', 'SOMETHING3']
any(getattr(self, attr) != getattr(self._origin, attr) for attr in attrs)
当然,您也可以动态创建
attrs
,例如使用:

attrs = [attr for attr in dir(self) if attr.startswith('half_pension')]

或者类似的东西。您必须自己多走一英里,因为您没有提供详细信息,我们也没有关于
self
内部内容的信息

尝试将其拆分为几个布尔变量,然后编写变量名而不是条件。是否有示例?谢谢你把它拆分成几个布尔变量,然后写下你的变量名而不是条件。你有一个例子吗?谢谢你,我和赛尔夫有个测试self.\u来源,但不起作用。我有一个错误:如果self.half_养老金和self!=self.\u origin:AttributeError:'ecole.partner.school'object没有属性'\u origin'首先,你必须覆盖
\uuuuuuueq\uuu
\uu ne\uuuuu
,这不像写
self!=self.\u原点
。第二,确保你在正确的对象中,如果它抱怨找不到来源是因为你在一个不正确的地方。这应该让你开始:而且,如果没有一个。我无法重现您的错误,因此我无法帮助您。对不起,我有一个self测试self.\u来源,但不起作用。我有一个错误:如果self.half_养老金和self!=self.\u origin:AttributeError:'ecole.partner.school'object没有属性'\u origin'首先,你必须覆盖
\uuuuuuueq\uuu
\uu ne\uuuuu
,这不像写
self!=self.\u原点
。第二,确保你在正确的对象中,如果它抱怨找不到来源是因为你在一个不正确的地方。这应该让你开始:而且,如果没有一个。我不能重现你的错误,所以我不能帮助你。