【问题标题】:Can I create a List of functions in python?我可以在 python 中创建函数列表吗?
【发布时间】:2021-09-11 05:52:58
【问题描述】:

我正在尝试在我的程序中创建一个函数列表,以便使用随机模块进行随机选择。从理论上讲,它看起来和使用它

import random

def test1():
  print("1st function")

def test2():
  print("2nd function")

def test3():
  print("3rd function")

def test_func():
  test_list = [test1(), test2(), test3()]
  apple = random.choice(test_list)
  return print(apple)

test_func()

结果是它打印出 test_list 并为苹果打印“NONE”有没有办法让它随机选择一个函数并只打印那个函数。

【问题讨论】:

  • test1 是函数。 test1()是调用函数的结果

标签: python list function random


【解决方案1】:

您应该在列表中添加函数引用并在之后调用该函数。

def test_func():
  test_list = [test1, test2, test3]
  apple = random.choice(test_list)()

【讨论】:

    【解决方案2】:

    是的,只是当你把它们放在列表中时不要调用它们:

    import random
    
    def test1():
      print("1st function")
    
    def test2():
      print("2nd function")
    
    def test3():
      print("3rd function")
    
    def test_func():
      test_list = [test1, test2, test3]
      apple = random.choice(test_list)
      return apple() #won't return anything due to it being a print function
    
    test_func()
    

    【讨论】:

    • 谢谢你非常简单的解决方案,当我尝试它不再打印功能时。但是苹果返回为“”我如何让它打印
    • 你给苹果打电话了吗?请参阅 test_func 中的打印功能,您必须在 apple 之后加上括号
    • 我把代码改成了“pple = random.choice(test_list)()”,效果很好
    • 不要忘记也返回它,如果函数列表本身返回任何内容(尽管请参阅我的代码中有关此示例的注释)
    【解决方案3】:

    这里的问题是您正在为列表分配您创建的函数的返回值。由于它们没有返回值,因此将为 None。

    您需要做的是通过删除括号来分配函数本身。您还需要通过添加括号而不是打印来调用 apple 函数。因此,您的代码将如下所示:

    import random
    
    
    def test1():
        print("1st function")
    
    
    def test2():
        print("2nd function")
    
    
    def test3():
        print("3rd function")
    
    
    def test_func():
        test_list = [test1, test2, test3]
        apple = random.choice(test_list)
        apple()
    
    
    test_func()
    

    【讨论】:

      【解决方案4】:
      def test1():
          print("1st function")
          #This returns "None"
      

      您将“None”打印到控制台的原因是您正在打印该函数,该函数确实返回一个 NoneType。如果未指定,则返回默认值 None。要使其仅打印所需的功能,请删除行 return print(apple)

      您还想存储对您的函数的引用:

      test_list = [test1, test2, test3]
      

      这样它们就不会被执行。然后你可以运行apple() 在你的主函数中执行它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2014-09-14
        • 1970-01-01
        • 1970-01-01
        • 2023-02-11
        相关资源
        最近更新 更多