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以上才有,对于版本的要求比较高,我觉的要普及的话,还需要很长的时间,但相对用起来还是可以的,而且比较骚包。

原文地址:https://www.cnblogs.com/sidianok/p/14938846.html