请问为什么结果是(11, 12.83)而不是(12.83, 11)呢?line3的(b,a)=(a,b)是怎么运行的呢?

loc=(12.83,11)
(a,b)=loc
(b,a)=(a,b)
loc=(a,b)
print(loc)

还有下面这个式子中,为什么(r,g,b)可以在for loop里被定义呢?(r,g,b)=img[r][c]和img[r][c]=(r,g,b)有什么区别呢?


def red_filter(img):
    w=width(img)
    h=height(img)
    for r in range(h):
       for c in range(w):
           (r,g,b)=img[r][c]
           image[r][c]=(0,g,b)

谢谢!!

(a,b)=loc使得a=12.83,b=11,(b,a)=(a,b)使得a和b的值进行了交换,因此最后a=11,b=12.83
第7,8行是将颜色值中的r分量设置为0啊。
(r,g,b)=img[r][c]和img[r][c]=(r,g,b)有什么区别呢?---一来本身代码第二行是img[r][c] = (0,g,b),不是(r,g,b),所以不一样;二来这就像a = b和b=a的区别一样,左值是被修改对象,自然不一样

(b,a)=(a,b)表示a和b互换值

(b,a)=(a,b)
等价于
b,a=a,b
就是先取到a,b的值,放到缓存里(一个新元组里),然后分别赋值给b和a
你可以看成是同时的,没有先后顺序的

原理就是做了一次交换,只有(a,b)=(b,a)时发生了改变。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632