• Python3.8及其以上版本中对与:=的使用。


    参考资料来至于:https://github.com/satwikkansal/wtfpython#-some-fancy-title

    最近在学习C语言,C语言中经常出现表达式与语句这两个词汇,C语言中很明确的表示,分号之前的就是表达式

    假如a=1属于表达式(expression),那a=1;就属于语句(statement)

    C语言程序设计的书中P55页有这么一句话

    在x=0、i++和pringtf(...)这样的表达式之后加上一个分号(;),它们就变成了语句。

    回到正题中来,话说Python确实不是一门适合初学者第一次接触电脑学习用的语言。因为他的很多实际不符合推断,现在又通过:=来弥补一些遗憾,简直是多此一举。

    在Python中我们可以连续复制,就好比这样

    a=b=c=1,再Python中没有任何的解释,记住就好了。

    在c语言中,这样也可以 ,我记得没错的话,应该是c=1的表达式返回1,然后执行b=1,然后执行a=1,最后整个表达式返回a的值,也就是1,就是说赋值表达式有返回值。

    学了Python之后,对于这个复制表达式有返回值,我一直很难接收。其实作为一个表达式,理论就应该有返回值,而且这样也能更好的解释a=b=c=1的原理。

    所以你在Python中写

    if a=1:

        ...

    这样的条件语句好像属于语法错误。

    现在机会来了,Python的设计者尽然设计了一个:=的方式,来实现赋值表达式可以返回值。

    前面的链接,可以点进去大家看一下

    整个表达式 核心的符号为 := 与()的配合,当(a:=1)这样的配合中,小括号中只有一个:=的复制表达式,等同于C语言中的复制表达式,先赋值,然后返回赋值的对象的值

    如果(a:=1,2,3,),将直接返回(1,2,3)的元祖,并且a已经赋值了1.

    在if这样的条件表达式后面可以省略小括号 ,写成

    if a:=1:

       ...

    这样的形式,当然加上小括号也不影响运行。

    但这个特性在py3.8以上才有,对于版本的要求比较高,我觉的要普及的话,还需要很长的时间,但相对用起来还是可以的,而且比较骚包。

  • 相关阅读:
    十三 .Django(ORM表高级操作)
    十二 .Django ForeighKey自关联(ORM)
    十二 .Django 一对多表ForeighKey(ORM)
    十一 .Django 一对一表OneToOneField (ORM)
    十 .Django 单表操作(ORM)
    八 .Django 模型(models)
    【模板】Lucas定理
    【模板】AC自动机加强版
    【模板】AC自动机
    【POJ3162】Walking Race 树形dp+单调队列+双指针
  • 原文地址:https://www.cnblogs.com/sidianok/p/14938846.html
Copyright © 2020-2023  润新知