[英]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.