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中遇到的小知识

x,y,x = eval(input())

在使用eval()并且同时为 x,y,z三个变量赋值时,输入格式应用逗号隔开,而不是其他分隔符

---------------------------------------------end-----------------------------------

原文地址:https://www.cnblogs.com/GuoYuying/p/11552422.html

时间: 2024-07-30 08:20:39

python自增自减?赋值语句返回值?逗号表达式?的相关文章

Python调用C的SDK出现返回值不符合预期以及Segmentation fault

1.sdk返回值不是int型 1.1 登录函数调用 def login(ip, port, username, password, device_info, error_code):"""LLONG CLIENT_Login(char *pchDVRIP, WORD wDVRPort,char *pchUserName, char *pchPassword,LPNET_DEVICEINFO lpDeviceInfo, int *error = 0);:param ip::pa

python限定方法参数类型、返回值类型、变量类型等

typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型. 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒pycharm目前支持typing检查,参数类型错误会黄色提示 常用类型 int,long,float: 整型,长整形,浮点型 bool,str: 布尔型,字符串类型 List, Tuple, Dict,

python获得线程调用函数的返回值

threading.Thread 并没有显式的提供获取线程调用函数返回值的方法,需求自己实现. 使用数据库是一个办法: 可以让子线程将数据写到数据库中,消费线程再去数据库中读取数据: 如果不想用数据库,可以使用类的全局变量来做传递, 示例代码如下: import os import threading class SubThread(): data = {} def __init__(self): ... def execute_func(self, key): # 执行各种操作 ... ret

Python学习笔记之函数作为返回值、闭包的解释

函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数! def lazy_sum(*args): def sum(): ax = 0 for n in args:

python多线程获取子线程任务返回值

今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 def auto_asset(node): ret = salt.remote_grains_execution_sigle(node) asset_info={} asset_info['os']= ret[node]['oscodename'] asset_info['kernelrelease']= ret[node]['kernelrel

Python全栈之路----函数----返回值

函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): print('----注册学生信息----') print('姓名:',name) print('年龄:',age) print('国籍:',country) print('课程:',course) if age > 22: return False else: return True registriat

Python装饰器去装饰含返回值的函数

#!/usr/bin/evn python #_*_ coding:utf-8 -*- import socket def auth(func):     def inner(*args, **kwargs):             print 'befor'             temp = func(*args,**kwargs)             print 'after'             return temp     return inner @auth def c

[蟒蛇菜谱] Python调用shell命令,获取返回值和返回信息

# -*- coding: utf-8 -*- import os import subprocess import signal class MockLogger(object): '''模拟日志类.方便单元测试.''' def __init__(self): self.info = self.error = self.critical = self.debug def debug(self, msg): print "__LOGGER__:"+msg class Shell(obj

python学习3-python views.py的返回值

2.首先要说明一点是,对于HttpRequest对象来说,是Django自己创建的,但是HttpResponse就必须要我们自己创建.注意每个view方法都必须返回一个HttpResponse对象,HttpResonse对象也是在Django.http里面,这里我们看看之前一直用到的render函数: def render(request, template_name, context=None, context_instance=_context_instance_undefined, con