python中同步赋值的先后顺序

发布时间:2024-12-12 07:36

烹饪顺序:先煮沸再炖,先炒后煮,遵循烹饪先后顺序节省时间。 #生活技巧# #厨房技巧# #厨房整理小窍门#

最新推荐文章于 2022-08-20 21:57:49 发布

小心假设 于 2021-02-03 10:39:41 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

title: python = 赋值顺序 && C++ side effect

date: 2020-03-17 15:00:00

categories: [python][c++]

tags: 语法

先是python = 的运算顺序不清楚,然后搞明白了之后自然就想知道C++是什么样的

1 python =

1.1 形如 a,b=a,b

写了一个测试:

可见赋值顺序是从 = 右侧第一个数开始向右。

同时如果出现被赋值的数是按照原来的值计算。

原因我想应该是 = 实现的方法也是函数, = 右侧的a,b先把原来的值压栈了。

a,b=-1,-2

a,b,b,a,b=1,2,3,b,a

print(a,b)

-2 -1

a,b=-1,-2

a,b,b=1,2,3

print(a,b)

1 3

1.2 链式赋值

a=b=c=1 顺序是:a=1,b=a,c=a

>>> k,l=0,[10,20,30,40]

>>> k=l[k]=3

>>> l #下面的结果显示l[3]=3,说明k先被赋值为3,才有l[3]赋值为3

[10, 20, 30, 3]

>>>

>>>> k,l=0,[10,20,30,40]

>>> k=l[k]=l[l[k]-1]=3

>>> l #跟上面结果对比表明:l[k]-1=2,说明l[k]比l[l[k]-1]先执行赋值

[10, 20, 3, 3]

https://blog.csdn.net/LaoYuanPython/article/details/95300934

2 C++ side effect

总结就是子表达式的求值顺序是不确定的(C++98/03). 不清楚C11 C14的标准。

所以尽量应该不用或者加上括号

在一个表达式里,子表达式的求值顺序是没有定义的。特别的是,你不能假定表达式从左向右求值。 int x=f(3)+g(7) 没有定义 f(),g()哪个先调用。

int i=1; v[i]=i++;

结果也是没有定义的或者是v[1]=1,或者是v[2]=1。

但是有三种运算符的计算顺序是有定义的:逗号(,),逻辑与(&&),逻辑或(| |)。它们保证了左边的运算对象一定要先于右边的运算对象计算。如:b=(a=2,a++)计算后把3赋给b。&&只有在第一个运算对象为true时才算第二个。| |只有在第一个运算对象是false时才算第二个,这叫短路求值。

注意区分逗号的两种用法:

f1(v[i],i++)     两个参数;

f2( (v[i],i++) )   逗号表达式;

对于f2来说参数只有一个相当于i++。

网址:python中同步赋值的先后顺序 https://www.yuejiaxmz.com/news/view/450592

相关内容

艾灸的先后顺序
理财规划的先后顺序
python两个数值互换(浅析a,b=b,a原理)
python中一些提升工作效率的小技巧
Python的基础
家庭保洁应按先里后外的顺序进行
调试中的一些Python错误
Python中的+=问题
护肤的七大步骤顺序
python毕设百货超市在线购物小程序小程序端程序+论文

随便看看