【问题标题】:more elegant way to call functions by key?更优雅的按键调用函数的方式?
【发布时间】:2014-04-08 03:36:19
【问题描述】:

我有这个调度字典,我想用 1000 个键填充,主要与一个功能相关联。 尽管将键分配给不同的功能是未来的要求。 目前,肯定有比这更好的东西:

  art = json.dumps(work['artist_name'])
  phonenumber = json.dumps(work['From'])
  x = getnewmusic()                                         
  artists = {'drake':x, 'jayz':x, 'nas':x,'lil wayne':x,'schoolboyq':x,
             'kendrick lamar':x, 'j cole':x} 

  if art in artists:
      artists[art](art,phonenumber)

有什么最快、更好的标准做法、未来的问题吗?

【问题讨论】:

  • 如果您的大多数键映射到同一个函数,您将受益于不在字典中指定它们 - 使用 get 并且您可以指定该通用函数作为值,如果键不在您的字典中。 artist_function = artists.get(name, x) 之类的东西 - 但完全不清楚您要在这里完成什么。
  • 彼得上面的评论是最好的选择。但是,拥有default 功能的一个缺点是您无法验证艺术家。除了“如果艺术家中的艺术”之外,您还需要某种方式来验证艺术家。
  • @PeterDeGlopper 这样我将如何将参数传递给函数 x。
  • 您好,真的有必要将您的艺术家放在字典中吗?所有艺术家都调用相同的函数,因此您可以将它们放在一个列表中,并在遍历列表时调用该函数。跨度>
  • 是的,但是您实际上是在进行双重查找,您从字典中获取密钥,然后将其转换为 json (这就是我所理解的),尚不清楚您要尝试什么做,但“艺术家中的艺术”声明将在字典的键列表中执行查找。然后,您执行 O(1) 查找以获取密钥并在“if”语句的主体中调用函数。

标签: python list function dispatch


【解决方案1】:

你为什么不把你的艺术家放在一个列表中,然后调用这个函数,他们似乎都在调用同一个函数,你可以这样做:

def get_new_music(artist, phonenumber):
    #logic to get new music
    pass

art = json.dumps(work['artist_name'])
phonenumber = json.dumps(work['From'])                                        
artists = ['drake', 'jayz', 'nas','lil wayne','schoolboyq', 'kendrick lamar', 'j cole']

if art in artists:
    get_new_music(art, phonenumber)

由于它们似乎都在调用相同的函数,我认为这是一种更简单的方法。

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多