微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用列表项的名称创建函数,

如何解决如何使用列表项的名称创建函数,

在kivy应用程序启动时,它会接收json值,并将其分配给变量,并将其附加到列表中。在每次启动应用程序时,它都会收到不同的值,因此列表始终是不同的。

Ch1_name = channel.json()['items']['channels'][0]['channelName']
Ch2_name = channel.json()['items']['channels'][1]['channelName']
Ch3_name = channel.json()['items']['channels'][2]['channelName']
Ch4_name = channel.json()['items']['channels'][3]['channelName']

channels = []

channels.append(Ch1_name)
channels.append(Ch2_name)
channels.append(Ch3_name)
channels.append(Ch4_name)

print(channels)
['cnn','fox','sky sports','fsc']

问题: 我需要为每个频道创建函数,该函数将保留列表项的名称,即频道名称。像这样:

def cnn()
    print('this function was named cnn just like an item list')

也许上课有另外一种方法吗?谢谢您的任何想法。

解决方法

for channel_name in channels:
  exec(f"""
def {channel_name}():
  print(f'this function was named {channel_name} just like an item list')
"""
  )
,

您可以做一些元编程工作来动态添加功能。这是一些示例代码,它使用setattr根据通道名称在类上设置函数。

class ChannelPrinter:
    pass

channel_printer = ChannelPrinter()

for channel in ['cnn','fox','sky sports','fsc']:
    def make_func(name):
        def print_channel_info():
            print('this function was named {} just like an item list'.format(name))
        return print_channel_info

    setattr(channel_printer,channel,make_func(name=channel))

> channel_printer.cnn()
this function was named cnn just like an item list
> channel_printer.fox()
this function was named fox just like an item list

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。