语法2:match - 匹配结构

Python 3.10 引入了新的匹配结构`match ... case ...`,类似于switch case。本文详细介绍了其基础格式、多值选择、if判断、多参数使用和其他特性。通过`|`可以实现多值匹配,`if`条件用于细化匹配,多参数支持解包赋值,同时支持元组、列表和字典解包。此外,`as`关键字可用于捕获子模式。

目录

1. 基础格式

2. | 选择多值

3. 添加 if 判断

4. 多参数 

5. 其他特性说明


2021年10月4日,Python正式发布了 3.10 版本,提供匹配结构模式,类似其他语言中的switch ... case ... 结构,即: match ... case ...。

1. 基础格式

match后跟比对参数,当参数与case后比对通过,则执行case下代码块语句;

"_" 作为通配符,并必定匹配成功,即作为兜底措施,所有前置未匹配参数执行 "_" 下代码块;

如果没有 case 语句匹配成功,则不会执行任何分支。

#使用 _ 通配符兜底
for i in range(4):
    match i:
        case 1:
            print(f'输出结果{i}')
        case 2:
            print(f'输出结果{i+i}')
        case 3:
            print(f'输出结果{i+i+i}')
        case _:
            print('waohohoh!')
       
waohohoh!
输出结果1
输出结果4
输出结果9
waohohoh!

#如果没有 case 语句匹配成功,则不会执行任何分支
for i in range(4):
    match i:
        case 1:
            print(f'输出结果{i}')
        case 2:
            print(f'输出结果{i+i}')
        case 3:
            print(f'输出结果{i+i+i}')
         
输出结果1
输出结果4
输出结果9

2. | 选择多值

通过 "|" ,一个case语句可以选择多种情况

apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: test-gw namespace: test spec: selector: istio: ingressgateway servers: - hosts: - istio-test.bu.com port: name: https number: 10143 protocol: HTTPS --- apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: test-vs namespace: test spec: gateways: - test-gw hosts: - istio-test.bu.com http: - match: - port: 10143 uri: prefix: /api/v1/* route: - destination: host: test.test.svc.cluster.lcaol port: number: 80 subnets: v1 --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: test-dr namespace: test spec: host: test.test.svc.cluster.local trafficPolicy: tls: mode: DISABLE subnets: - name: v1 labels: version: 1.1.1 --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: test name: test-service namespace: test spec: ports: - name: grpc port: 8850 protocol: TCP targetPort: grpc - name: http port: 8080 protocol: TCP targetPort: http selector: app.kubernetes.io/name: test version: 1.1.0 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: version: 1.1.0 app.kubernetes.io/name: test name: test namespace: test spec: selector: matchLabels: app.kubernetes.io/name: test app.kubernetes.io/version: 1.1.0 template: metadata: labels: app.kubernetes.io/name: test version: 1.1.0 spec: containers: - name: test ports: - containerPort: 8850 protocol: TCP - containerPort: 8080 protocol: TCP uu部署了一个服务(springboot应用程序)到kubernetes集群中,并通过istio 的网关暴露到公司内网中。他观察到,他的服务容器正常启动了,但他通过域名访问的时候报错了。以下是他的服务的crd(简略版,必要信息已提供,不相关信息隐去)。请检查以下配置,并指出配置错误的位置,并给出修改意见。
最新发布
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值