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

  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/sidianok/p/14938846.html
Copyright © 2020-2023  润新知