Python海象运算符

 Python海象运算符号实在PEP 572中提出来的,并且在Python3.8版本引入。

英文名称是Assignment Expresions,即赋值表达式, 符号是  :=   我们称之为海象运算符(walrus operator)。


语法格式如下:

variable_name := expression 

或者

variable_name := value

就是变量名后跟一个表达式或者值,可以看成Python的新的赋值表达式(=也是Python的赋值表达式)。


用法:

if else语句中


常规写法

a=15

if a>10:

    print("hello world")


海象运算符写法:

if a:=15>10:

    print("hello world")


while语句中:


常规写法:

n=6

while n:

    print("hello world")

    n -=1


海象运算符写法:

n=6

while (n:=n-1)+1:  #需要加1是因为在执行输出前n就减1了

    print("hello world")


读取文件中

常规写法:

fp=open("test.txt","r")

while True:

    line=fp.readline()

    if not line: break

    print(line.strip())

fp.close()


海象运算符写法:

fp=open("test.txt","r")

while line:=fp.readline():

    print(line.strip())



用于列表推导:

nums = [16, 36, 49, 64]

def f(x):

    print('运行了函数f(x)1次。')

    return x ** 0.5

print([f(i) for i in nums if f(i) > 5])


一共就 4 个数字,但是函数被执行了 7 次。这是因为有三个数字满足列表推导式的条件,需要再额外计算 3次。当程序数据巨大的时候,这将浪费大量性能。


海象运算符写法:

nums = [16, 36, 49, 64]

def f(x):

    print('运行了函数f(x)1次。')

    return x ** 0.5

print([n for i in nums if (n := f(i)) > 5])

函数只执行了 4 次,函数执行结果被 n 储存,不需要额外计算。性能优于不使用 := 的。

当然,海象运算符同样适合用于字典推导式和集合推导式


----------------------------------------------------------------------

python3.10也支持switch/case语法了,但是关键字不是使用switch,而是match。

具体的match/case语法如下:

lang = input("What's the programming language you want to learn? ")

match lang:
    case "JavaScript":
        print("You can become a web developer.")
    case "Python":
        print("You can become a Data Scientist")
    case "PHP":
        print("You can become a backend developer")
    case "Solidity":
        print("You can become a Blockchain developer")
    case "Java":
        print("You can become a mobile app developer")
    case _:
        print("The language doesn't matter, what matters is solving problems.")

你可能注意到我没有像在其他编程语言中那样为每种情况添加 break 关键字。这就是 Python 的原生 switch 语句相对于其他语言的优势,break 关键字的功能是在幕后为你完成的。


小结

本文向你展示了如何使用 match 和 case 关键字编写 switch 语句。你还了解了 Python 程序员在 3.10 版本之前是如何编写它的。

Python match 和 case 语句的实现是为了提供其他编程语言(如 JavaScript、PHP、C++ 等)中的 switch 语句特性为我们提供的功能。




评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用