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