簡體   English   中英

更改某些變量的值后更改條件

[英]Change a condition after changing the value of some variables

我有這種情況:最初設置為無的變量列表A = [none, none, none, none]和一個非常簡單的函數來控制2個值(與無)是否不同:

def notEqual(a, b):
   if a is None and b is None:
       return True
   if a != b:
       return True
   return False

我想創建一個名為bigList的列表,該列表為A的每個元素相等或不相等的元素顯示。 所以我想這樣做:

for i in range(4):
   for j in range(4):
      if i != j:
         c = ((i, j), (notEqual(A[i], A[j])))
         bigList.append((c))

因此,一開始bigList的所有元素都是((i,j),(True))在第二時刻我遇到了這種情況:

A[0]=10 A[1]=10

因此,與(0,1)和(1,0)相關的條件必須更改為False。 有一種簡單的方法可以執行這樣的操作嗎? (當某些變量更改其值時,請更改某些條件)

不,沒有辦法。 在大多數語言中,表達式是用變量的當前值求值的。 您不能創建像not_equal(current_value_of_A, current_value_of_B)這樣的表達式,該表達式將在A和/或B的值更改時自動更改。 因此,您必須以某種方式重新運行代碼。

做類似事情的常見方式是觀察者模式 也就是說,將您的表達式包裝在一個類中,並在某些值更改時通知該類。

除此之外,使用字典而不是列表,列表的形式為{(i,j): notEqual(A[i], A[j]) ,因此您可以僅更新單個(i,j)對而不使用重新運行您的整個代碼

您可以使用python的@propery 它的工作方式類似於類似其他語言(如C#和JAVA)的getter。

在您的情況下,可以使用吸氣劑制造與((i, j), (notEqual(A[i], A[j])))相似的對象。

請參閱下面的示例實現

class bigListElement(object):
    A = [] # this is static
    def __init__(self, index_tuple, areEqual):
        self.index_tuple = index_tuple
        self._areEqual = areEqual

    @staticmethod
    def notEqual(a, b):
        if a is None and b is None:
            return True
        if a != b:
            return True
        return False

    @property
    def areEqual(self):
        return bigListElement.notEqual(bigListElement.A[self.index_tuple[0]], bigListElement.A[self.index_tuple[1]])


print("Hello World")

bigListElement.A = [10, 2, 10, 3, 4]
a = bigListElement((0, 1), False)

print(a.areEqual) # True

bigListElement.A[1] = 10

print(a.areEqual) # False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM