作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法清理我的一些代码。
一般而言,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 语句相同数量的赋值和函数。
最佳答案
也许您需要一些额外的数据结构(如下面的 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/
我是一名优秀的程序员,十分优秀!