@目录
IDLE
首先最容易看到的变化就是python自带的IDLE:
把指示用的指针移动。
match-case
我们先来看一个Java代码示例(无作用,仅语法):
如果是对c或者java等语言有了解的话,应该不难理解,但是,python以前是没有这种语法的,但是在3.10版本之后,python更新了属于自家的match-case语句。
来看官方文档怎么说:
A match statement takes an expression and compares its value to successive patterns given as one or more case blocks. This is superficially similar to a switch statement in C, Java or JavaScript (and many other languages), but it can also extract components (sequence elements or object attributes) from the value into variables.
match 语句采用表达式,并将其值与作为一个或多个事例块给出的连续模式进行比较。这在表面上类似于C,Java或JavaScript(以及许多其他语言)中的switch语句,但它也可以从值中提取组件(序列元素或对象属性)到变量中。
match-case语法结构如下:
接下来我们一起来看match-case的作用:
匹配数据
首先,就是匹配数据,例如
a=2
match a:
case 1:
print("太小了")
case 3:
print("太大了")
case _:
print("刚刚好")
其中“_”是通配符,代表一定会匹配成功,相当于其它语言迭代default。
接下来我们来看一个简单题:
力扣连接.
首先我们用ifelse语句来写出第一版:
class Solution:
def calPoints(self, ops)->int:
ans=[]
for i in ops:
if i=="C":
ans.pop()
elif i=='+':
ans.append(ans[-1]+ans[-2])
elif i=='D':
ans.append(ans[-1]*2)
else:
ans.append(int(i))
return sum(ans)
现在不用if语句,直接使用我们的新特性:
class Solution:
def calPoints(self, ops)->int:
ans=[]
for i in ops:
match i:
case "C":
ans.pop()
case '+':
ans.append(ans[-1]+ans[-2])
case 'D':
ans.append(ans[-1]*2)
case _:
ans.append(int(i))
return sum(ans)
接下来提交:
可以看出,两种语法并不是差别很大,值得一提的是,在match中可以使用“|”,也就是逻辑或。
绑定变量
match可以用来绑定变量,也就是说匹配一部分(自我理解)
def matchh(a):
match a:
case [0,222]:
print("0位置是0")
case [111,0]:
print("1位置是0")
case _:
print(a)
matchh([111,0])
matchh([0,222])
matchh([111,222])
结果如下:
当然,match里面还能嵌套if语句:
def matchh(a):
match a:
case [111,0] | [0,222]:
print("其中包含了零")
case [x,y] if a[0]==a[-1]:
print("两个元素相等")
case _:
print(a)
matchh([111,0])
matchh([0,222])
matchh([111,222])
matchh([111,111])
bit_count()
先来看一道题:
你会怎么做?转字符串记数?还是位运算?(此处如果对位运算有疑问,可移步至此:位运算.python3.10更新了一个简单的方法(bit_count()),类似于Java的Integer.bitCount()
,其能统计一个数中二进制位一的个数:
我们先来看位运算解题:
class Solution:
def hammingWeight(self, n: int) -> int:
count=0
while n:
count+=n&1
n=n>>1
return count
顺便发一下Java版:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
for (int i = 0;i <32 ;i++){
count+=n&1;
n=n>>1;
}
return count;
}
}
现在我们来看新更新的bit_count():
class Solution:
def hammingWeight(self, n: int) -> int:
return n.bit_count()
后记
以上就是对新更新的match-case语句的一些浅显的理解,如有错误,还请帮忙斧正。