python = 赋值顺序 && C++ side effect
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++。
原文链接:https://blog.csdn.net/cxyol/article/details/625713
https://blog.csdn.net/ox_thedarkness/article/details/613122
https://blog.csdn.net/garfee_guan/article/details/12403987
最新文章
- Android下Cocos2d创建HelloWorld工程
- Maven-003-私人定制 maven archetype
- win10内网外网智能访问
- android中实现Parcelable序列化步骤
- Swift入门篇-基本类型(1)
- 【转】基于jquery的无刷新表格分页
- 在nltk中调用stanfordparser处理中文
- angularjs fileUpload
- ConcurrentLinkedQueue 源码 since java1.5
- 介绍一种非常好用汇总数据的方式GROUPING SETS
- Android获取手机号码
- CoffeeScript简介 <;二>;
- 【Mysql】key 、primary key 、unique key 与index区别
- 如何获取select选中的值
- [LeetCode&;Python] Problem 830. Positions of Large Groups
- ASP.NET Web API 2入门
- ul li的添加 删除 复制 clone()
- TPO 02 - Desert Formation
- 大量高清文字版PDF编程书籍下载
- IDELPHI是一个MIS系统初学者的乐园空间
热门文章
- xtrabakcup基本用法 安装、全量备份恢复、增量备份恢复
- (13)-Python3之--获取当前时间
- Linux下运行java报错:Error: Could not find or load main class SocketIOPropertites
- Lua大量字符串拼接方式效率对比及原因分析
- EMA algorithm: https://blog.csdn.net/m0_38106113/article/details/81542863
- 使用Redis有序集合实现投票排行榜系统
- http状态码、错误分析
- 内网渗透之信息收集-linux
- 22.firewalld
- Java数组模拟队列 + 优化