• 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-----------------------------------

  • 相关阅读:
    ssh代理转发
    了解ssh代理:ssh-agent
    ssh使用密钥进行认证
    拾遗之”三元运算”与”打印奇偶行”
    MySQL 8.0二进制包安装
    awk内置函数
    awk数组详解
    awk动作总结之二
    awk动作总结之一
    [shell]批量抽取文件并重命名
  • 原文地址:https://www.cnblogs.com/GuoYuying/p/11552422.html
Copyright © 2020-2023  润新知