【问题标题】:Python A function that takes a function as a parameter with its parametersPython 将函数作为参数及其参数的函数
【发布时间】:2018-04-11 19:46:00
【问题描述】:

想象一下我有两个功能

def areaSquare(a,b):
   print( a * b)

def areaCircle(radius):
   print(3.14159 * radius ** 2)

我想创建第三个函数,称为 area。

area(areaCircle,radius = 3, repeat = 5)
# prints 3.14159 * 9 five times
area(areaSquare, a = 2, b = 3, repeat = 6)
# prints 2 * 6 six times

所以函数接受一个函数作为参数。根据作为参数传递给它的函数,它应该需要额外的参数。有没有办法做到这一点?我知道函数重载将是一种选择。但我不想为此定义多个函数。

【问题讨论】:

  • 在这种情况下我不会使用函数而是使用类。使用 circle 和 square 方法定义一个类 Area,您可以在其中优雅地传递参数。
  • 你应该检查一下 -> stackoverflow.com/questions/6289646/…
  • @JeanRostan:你能详细说明你的意思吗?与 Willem Van Onsem 的答案相比,您的方法有哪些优势。
  • @MrYouMath 我会说代码的可读性,但这可能是个人意见。它也更自然,Willem 的回答是完美的,但对我来说没有类的自定义方法那么快,它允许你干净地做很多黑客,隐藏在类后面。尽管如此,他的回答很有趣,但我建议你检查 OOP(面向对象编程),它最终会对你有用。

标签: python function parameters overloading


【解决方案1】:

是的,kwargs 是你的朋友。我们可以定义函数,以便在名为kwargs 的字典中捕获剩余的参数,然后将其传递给我们提供的函数。喜欢:

def area(func, repeat, **kwargs):
    for _ in range(repeat):
        func(**kwargs)

所以除了func 和repeat 之外的所有参数都存储在kwargs 字典中,稍后我们使用命名参数调用func 函数(第一个参数)。

请注意,这对于需要 func 和/或 repeat 参数的函数(正确)不起作用,因为我们在 area 函数级别捕获这些。

【讨论】:

  • 加 1 为您快速解答。一旦我尝试解决我的问题,我会立即接受答案。
  • @MrYouMath: aarrghh.. 函数没有返回,而是打印?为什么?通常你只想要print 的一个很小的子集。它仍然是可能的,但非常“不雅”。无论如何,我已经进行了编辑,现在它可以工作了。
  • 非常感谢!你的方法就像一个魅力。我的功能涉及更多一点,这就是为什么我试图将其分解以便更容易回答。
  • 只是出于好奇。这种方法如何称为编程语言?以及如何将其泛化为多个函数作为参数?
  • 在 Python 中一切都是对象(整数是对象,字符串是对象,类实例是对象,类本身也是对象,等等)。因此,您可以将这些对象作为参数传递,并将它们作为参数返回。通常如果函数是一等公民,人们称之为函数式编程。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多