为了账号安全,请及时绑定邮箱和手机立即绑定

更改某些变量的值后更改条件

更改某些变量的值后更改条件

GCT1015 2021-10-12 15:46:40
我有这种情况:最初设置为 none 的变量列表 A = [none, none, none, none] 和一个非常简单的函数,用于控制 2 个值(与 none 不同)是否不同: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。有没有一种简单的方法来做这样的事情?(当一些变量改变它们的值时改变一些条件)
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

你,可以使用python的@propery。它的工作方式类似于 getter,类似于 C# 和 JAVA 等其他语言。


在您的情况下,您可以((i, j), (notEqual(A[i], A[j])))使用 getter制作一个类似于对象的对象。


请参阅下面的示例实现


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


查看完整回答
反对 回复 2021-10-12
?
ITMISS

TA贡献1871条经验 获得超8个赞

不,没有办法。在大多数语言中,表达式是用变量的当前值计算的。not_equal(current_value_of_A, current_value_of_B)当 A 和/或 B 的值发生变化时,您无法创建这样一种工作方式会自动更改的表达式。因此,以一种或另一种方式,您必须重新运行您的代码。

做类似事情的一种常见方法是观察者模式。也就是说,将您的表达式包装在一个类中,并在某些内容的值发生变化时通知该类。

除此之外,使用 dict 而不是具有形式的列表,{(i,j): notEqual(A[i], A[j])因此您可以仅更新单个 (i, j) 对,而无需重新运行整个代码


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号