gpt4 book ai didi

Python:帮助将循环 a 中凌乱的 if-elif 语句阶梯转换为字典 switch 案例以创建 grpc ssl 证书

转载 作者:行者123 更新时间:2023-12-04 22:38:42 29 4
gpt4 key购买 nike

我无法清理我的一些代码。
一般而言,python 代码旨在读取两个 json 文件。第一个 json 文件包含每个微服务的地址,第二个 json 文件包含每个服务与之通信的服务列表。这段代码的功能是通过循环遍历这两个 json 文件为每个微服务创建 grpc ssl 证书。
我已经写了代码,但是我使用了if语句,它非常困惑,但我正在努力使用字典清理代码。
下面我将列出我上面描述的两个 json 的示例:
服务地址.json

[
{
"service":"service-A",
"address": ["localhost1"]
},
{
"service":"service-B",
"address": ["localhost2"]
},
]
ServicesUsed.json
[
{
"service":"service-A",
"services_used": ["service-B", "service-C"]
},
{
"service":"service-B",
"services_used": ["service-C", "service-D"]
},
]
我将分享我用来循环第一个 json 并将地址分配给下面的变量的代码
for address in addressData:
if address["service"] == "service-A":
addresses.serviceA = address["address"]
elif address["service"] == "service-B":
addresses.serviceB = address["address"]
最后,我将分享用于循环第二个 json 并使用名为 cert_create 的函数生成 ssl 证书的代码。其中输入了每个服务的地址
for service in runningData:
if service["service"] == "service-A" and service["services_used"] == ["service-B", "service-C"]:
os.chdir('/certs/service-A/service-B')
cert_create(str(addresses.serviceA))
os.chdir('/certs/service-A/service-C')
cert_create(str(addresses.serviceA))

elif service["service"] == "service-B" and service["services_used"] == ["service-C", "service-D"]:
os.chdir('/certs/service-B/service-C')
cert_create(str(addresses.serviceB))
os.chdir('/certs/service-B/service-D')
cert_create(str(addresses.serviceB))
如您所见,如果有大量服务,这种逻辑可能会变得非常荒谬。问题是,以我对 python 的有限经验,我看不出如何使用字典创建 switch 语句将能够简化此逻辑,同时保留与 if 语句相同数量的赋值和函数。
有任何想法吗?我知道这是非常基本的,但我觉得如果使用不同的语言,例如 go 或 java,我可以使这段代码更清晰

最佳答案

也许您需要一些额外的数据结构(如下面的 dict)或修改现有的 addresses对象,以便您可以按名称获取地址。
当然,如果您的地址数据来自用户输入,请考虑对其进行清理/检查。

services_addresses = {
'service-A': str(addresses.serviceA),
'service-B': str(addresses.serviceB),
'service-C': str(addresses.serviceC),
}

for service in runningData:
service_name = service["service"]
for service_name_used in service["services_used"]:
os.chdir(f'/certs/{service_name}/{service_name_used}')
# here comes the difference - you need additional dict
cert_create( services_addresses[service_name] )
# or modification of addresses object ?..
# cert_create( addresses.getServiceAddress(service_name) )

关于Python:帮助将循环 a 中凌乱的 if-elif 语句阶梯转换为字典 switch 案例以创建 grpc ssl 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67503047/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com