首页 > 解决方案 > 有人可以帮我为打印语句创建变量吗?

问题描述

我不擅长创建变量,尤其是对于这段困难的代码。

    topic_page = client.get_paginator('list_topics').paginate()
    for topic in list(topic_page)[0]['Topics']:
        try:
          subscriptions_page = client.get_paginator('list_subscriptions_by_topic').paginate(TopicArn=topic.get('TopicArn'))
          if list(subscriptions_page):
              for subscription in list(subscriptions_page)[-1]['Subscriptions']:
                  try:
                    *print('TopicArn', subscription['TopicArn'])
                    print('Protocol -', subscription['Protocol'])
                    print('SubscriptionArn', subscription['SubscriptionArn'])*
                  except:
                      pass

我想为打印语句创建变量。

标签: python-3.xvariablesboto3

解决方案


尽管您在评论中进行了澄清,但仍不清楚您想要做什么。在 Python 中,没有好的方法可以在另一个变量中创建一个以字符串命名的变量(这并非不可能,但这样做的方法通常是坏主意)。变量名应该是供程序员与之交互的。它们本身不是数据。对于数据,您需要一个数据结构,就像subscription您已经在处理的字典一样。

但这并不意味着您不能简化代码,也许可以使用一些变量。最简单的情况是,您可以在打印之前进行一些分配,因此您可以对这些值执行其他操作,而不是打印它们,如果您愿意:

topic_arn = subscription['TopicArn']
protocol = subscription['Protocol']
subscription_arn = subscription['SubscriptionArn']

print('TopicArn', topic_arn)
print('Protocol -', protocol)
print('SubscriptionArn', subscription_arn)

# do other stuff down here with the variables, if you want

但这比您拥有的代码更多,也许您想要更少的代码。如果您不想对从字典中获取的键进行硬编码,则可以迭代现有的键,将每个键及其值打印出来:

for key, value in subscriptions.items():
    print(key, value)

这要简单得多!但如果字典包含额外的内容,它可能会打印您不想要的键和值,或者以错误的顺序迭代所需的键。所以我们可以改为遍历我们想要显示的键的元组,并用它们对应的值打印它们:

key_list = 'TopicArn', 'Protocol', 'SubscriptionArn' # this could be defined somewhere earlier

for key in key_list:
     print(key, subscription[key])

-如果您需要对某些键而不是其他键进行特殊演示(例如,在协议输出的中间),这可能无法准确打印出您想要的内容。如果您真的想拥有可定制的输出,您可能会向元组添加额外的东西。


推荐阅读