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
python = 赋值顺序 && C++ side effect的更多相关文章
- [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序
		本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ... 
- python赋值和生成器
		在python赋值过程中,对单个变量的赋值,在所有语言中都是通用的,如果是对两个变量同时进行赋值,这个时候,就会出现一点点小的差异.例如在下面的一两行代码中. a , b = b , a+b 这是同时 ... 
- java 面向对象(九):类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念
		1.构造器(或构造方法):Constructor构造器的作用: * 1.创建对象 * 2.初始化对象的信息2.使用说明: * 1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器 * 2 ... 
- Python赋值、浅复制和深复制
		Python赋值.浅复制和深复制  首先我们需要知道赋值和浅复制的区别: 赋值和浅复制的区别 赋值,当一个对象赋值给另一个新的变量时,赋的其实是该对象在栈中的地址,该地址指向堆中的数据.即赋值后,两 ... 
- python实现顺序表
		python实现顺序表可以有两中形式进行存储 列表 元组 其实简单来说,顺序表无非就是操作列表和元组的方法来对顺序表进行操作. 实例代码 7 class SqList: 8 def __init__( ... 
- 关于Python链式赋值的赋值顺序问题
		在<第4.7节 Python特色的序列解包.链式赋值.链式比较>一文中,老猿这样介绍的: 链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语 ... 
- python 赋值,交换值理解
		python里的赋值都是引用,第一次赋值就是定义. 看下面两个交换值的例子: 1. >>> a,b,c = 1,2,3 >>> a = b >>> ... 
- python——赋值与深浅拷贝
		初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ... 
- python 赋值、表达式
		赋值的特性 赋值语句建立对象引用 变量名在首次赋值时会被创建 变量名在引用前必须先赋值 赋值语句的形式 序列赋值 >>> A, B = 1, 2 >>> print ... 
随机推荐
- (08)-Python3之--类和对象
			1.定义 类:类是抽象的,一类事物的共性的体现. 有共性的属性和行为. 对象:具体化,实例化.有具体的属性值,有具体做的行为. 一个类 对应N多个对象. 类包含属性以及方法. class 类名: 属 ... 
- Bitter.Core系列六:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之  示例  DataTable 模型转换
			当我们查询之前,我们先构造一个查询对象的输出DTO.如下图代码: public class TScoreSearchDto { /// <summary> /// 分数 /// </ ... 
- 解决 minicom 不能接收键盘输入问题
			今天突然minicom 不能接受键盘输入了.早上的时候在其他设备上不能识别usb转串口的设备,重新启动电脑后,恢复正常了.下午又出现minicom 不接收键盘输入. 百度了一下解决了. 解决方法 由于 ... 
- 用xmind设计用例:
			注意一个原则:清晰明了,简单高效 注意不要写成需求分析,从测试的角度对场景进行分类管理 注意点: 1.思维导图重要的是逻辑清晰归类,注意有不要太多具体的操作步骤 举个例子(来源:https://www ... 
- GraphQL 在酒店系统上的实践
			https://mp.weixin.qq.com/s/Pmut13GYP-kwR2xm8fH-7Q 
- Property attribute.
			class property(object): """ Property attribute. fget function to be used for getting ... 
- Hugo 博客中文指南(基础教程)
			1. 安装 Hugo 从 Hugo 项目主页下载 Releases 文件,解压 hugo.exe 文件到 C:\Windows\System32 目录下. 2. 创建站点 hugo new site ... 
- 线性DP总结(studying
			写在前面 虽然都说线性DP是入门,但我还是今天才开始学 线性DP就是珂以通过线性处理得出答案的一种DP 每一种状态都可以从前面推得,并且推导过程是呈线性的 参考题单(本人现在主要用luogu,所以这些 ... 
- codevs1700 施工方案第二季
			题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ... 
- SpringMVC听课笔记(十二:文件的上传)
			1.Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的.Spring用Jakarta Commons FileUpload技术实现了一个M ... 
