python自增自减?赋值语句返回值?逗号表达式?
咳咳,直接进入正题吧。
自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式。
熟悉C/C++的小伙伴们都知道,在C/C++中:
自增自减(前缀/后缀)运算符将实现对变量值的 加1/减1; 类似 x = 0; ++x;的语句会使最终 x 的值为1
赋值语句将所赋的值作为该语句的返回值(值传递); 类似 (x = func()) > 0; 的语句会将函数 func()的返回值赋给 变量x ,并继续执行 x > 0的条件判断语句,这样的语句在C/C++中显然是合法且简洁的
逗号表达式用逗号作为语句间的分隔符,并以最后一个表达式的值作为整个逗号表达式的值; 类似 x = 5, y = 6, x > y;的语句就是一个逗号表达式,先执行x= 5,再执行y= 6,最终比较 x > y结果为 0 ,0就是该逗号表达式的结果
但是!!!
这些!!!
在python里通通无效!!!
先来看第一个实例

注意 ++x 和 --x得到的值均为 x的值 5 ,也就是说++/--并没有像我们想象的那样将x 的值+1/-1,这个伪自增自减可真是够狠的。
而且我们注意到后缀的++/--不仅没有做出改变,反而还提示语法错误
python lady真的让人琢磨不到头脑啊
问题先放在这,来看下一个实例

这里我仍然像使用C一样使用了这一连串的语句,最终判断 x 的值是否大于0,但是直接报错 SyntaxError!
可见这一连串的语句并不能正常运行,那么问题出在哪了呢?
紧接着看最后一个实例

显然我用C的语法在这里写了一个逗号表达式,逗号表达式中包含了赋值语句
python lady依旧毫不留情的报错
答案在这里:
1.python中并没有自增自减运算符,有的只是作为正负号(+/-)的数学符号
所以上例中 ++x 相当于给 x的值取正再取正,而 --x相当于给 x的值取负再取负,自然最后x的值不会发生变化
而我们都知道数学中正负号只能位于数字的前边,并不能位于数字后面(变成加减号),因此 C里面的后缀++/--在python里面理所应当的报错啦
看一个例子加深一下理解

怎么样,这样就清楚多了吧
2.python中赋值语句采用的引用传递方式,而不是值传递
也就是 y = x = 5 是正确的,传递的是引用,而 y = (x = 5)就是错误的
前者属于python中的链式赋值,从左往右,先将y引用对象5,再让x引用对象5,;
后者由于在python中赋值号从左至右,但括号优先级高,故先让x引用对象5,而x= 5是没有返回值的,因此就相当于将一个没有返回值的结果赋值给y
参考链接:https://blog.csdn.net/weixin_34320159/article/details/93577037
3.还记得python中同时赋值的语句吗?
x,y,z = 3,4,5
这条语句让x引用3,y引用4,z引用5,;同时赋值要求等号两边数目对等。
而在示例语句中 x= 5, y = 6, x < y
将逗号与赋值混合使用,python lady自然先考虑赋值,发现前半段 x = 5, y不对等,直接就报错
可见在python中并没有C/C++中的逗号表达式
在python中逗号的作用有2:
a>分隔符,如我们的多个变量同时赋值语句
b>类型转换,还记得元组中提到的 (5) 与 (5,)的区别吗?前者类型为 int, 后者类型就是 tuple元组啦
每日精进一点点,加油!
python自增自减?赋值语句返回值?逗号表达式?的更多相关文章
- Python基本语法_函数_返回值
目录 目录 前言 函数的返回值 在函数中Return和Print的区别 函数中的文档 前言 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返 ...
- python使用threading获取线程函数返回值的实现方法
python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...
- Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- Python调用C的SDK出现返回值不符合预期以及Segmentation fault
1.sdk返回值不是int型 1.1 登录函数调用 def login(ip, port, username, password, device_info, error_code):"&qu ...
- Python迭代器:捕获Generator的返回值
但是用for循环调用generator时,发现拿不到generator的return语句的返回值.如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的v ...
- python定义函数时的默认返回值
python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None, 即隐式返回语句: return None 执行如下代码 def now(): prin ...
- python限定方法参数类型、返回值类型、变量类型等
typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...
- Python+request 登录接口reponse的返回值token跨py文件的传递《二》
主要使用场景: 一般我们在进行接口测试时,依赖登录接口后reponse中的某些返回值,因此需要将login接口单独写一个py文件,另外的py文件均可调用login的reponse返回值使用.共用登录接 ...
随机推荐
- 弃用 wget, 拥抱多线程下载 axel
0x00 事件 对于在 Linux 的下载工具而言,比较常用的就是 wget 或者 curl,吾也一直用 wget 的方式进行网络上的资源下载.偶然发现了 axel 这个支持多线程的下载工具,试用了几 ...
- 「雕爷学编程」Arduino动手做(10)——敲击传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- Ubuntu下安装php7.1的gd,mysql,pdo_mysql扩展库
执行以下命令 # apt-get install php7.1-gd # apt-get install php7.0-mysql 重新启动 php7.1-fpm(因为我是安装的 Nginx 和 ph ...
- hmac模块和hashlib模块
hmac模块和hashlib模块 一.hash是什么 hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256. ...
- SpringBoot:elasticSearch 7.2.0 Java High Level REST Client 搜索 API
Springboot整合最新版elasticSearch参考之前的文章:SpingBoot:整合ElasticSearch 7.2.0 Search API SearchRequest用于与搜索文档, ...
- 自由变形技术(Free-Form Deformation)
自由变形技术Free-Form Deformation是编辑几何模型的重要手段,它于80年代由Sederberg等人提出,目前许多三维建模软件中都有这种变形算法.自由变形方法在变形过程中并不是直接操作 ...
- Vmware启动ubuntu 出现错误。
Vmware启动ubuntu 出现错误“以独占方式锁定此配置文件失败. 可能其它正在运行VMware进程在使用此配置文件”. 在网上查找了很多方法,法(1)试过在启动任务管理器中“结束与VMware有 ...
- 使用SVN钩子强制提交日志和限制提交文件类型
Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...
- Netty源码分析 (二)----- ServerBootstrap
BootStrap在netty的应用程序中负责引导服务器和客户端.netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通 ...
- [Error]syntaxerror: non-ascii character '/xd6' in file
eclipse代码运行时显示:syntaxerror: non-ascii character '/xd6' in file 原因:如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解 ...