gpt4 book ai didi

Python - 将一个函数(从头开始!)传递给另一个函数?

转载 作者:行者123 更新时间:2023-11-30 23:20:16 25 4
gpt4 key购买 nike

是否可以将从头开始编写的函数传递给另一个函数或类实例化?

这就是我现在拥有的:

class Foo(Object):
def __init__(self, name, somefunction):
self.name = name
self.somefunction = somefunction

def afunction(param1, param2):
return param1 + param2

Bar = Foo("Something", afunction)

Bar.somefunction(2, 3)
#returns 5

我想知道是否可以不必事先声明afunction,而是在实例化期间直接将代码作为参数写入somefunction。像这样的吗?

class Foo(Object):
def __init__(self, name, somefunction):
self.name = name
self.somefunction = somefunction

Bar = Foo("Something", def afunction(param1, param2): return param1 + param2)

#OR

Bar = Foo("Something", Anonymousfunctiontechnique: return param1 + param2)

Bar.somefunction(2, 3)
#returns 5

而且,这不是 lambda 的工作!这些函数可能非常复杂,函数在它们内部调用并带有多个参数。另外,我不应该能够在其他任何地方访问它(因此外部声明似乎不起作用)。

这样的事情可能吗?如果是这样,怎么办?如果不是,那么完成我想做的事情的最佳方法是什么?

谢谢!!!

最佳答案

在 Python 中,您无法超越 lambda 的限制来执行此操作。

但是您可以在调用的正上方定义函数并将其传入,即使您位于另一个作用域中,也可以使其名称成为不会污染您的地址空间的临时变量。

逻辑上的区别

Bar = Foo("Something", def afunction(param1, param2): return param1 + param2)

def _foo(param1, param2): return param1 + param2
Bar = Foo("Something", _foo)

两者之间的差异相同

Bar = foo(param1 + param2)

_good_name = param1 + param2
Bar = foo(_good_name)

出于文档目的,为任何复合计算命名是一个好主意。它还可以帮助人们使用任何好的调试器。并且它将格式化考虑因素保持在最低限度。总而言之——只是说出事物的名称

Python“排除”这一点的原因归结为:

  1. 有多少人不会将三行长的内联计算分配给局部变量?
  2. 其中有多少函数的长度少于三行?
  3. 那为什么还要麻烦呢?

(我总是使用下划线来做这件事。下划线标记这些“私有(private)”,但通常它们不是成员,所以它只是强调它们是短暂的。如果范围强制它们成为成员,它会提示人们:它们是内部的,不适合更广泛的使用。如果您对类困惑完全偏执,请一遍又一遍地使用相同的类,并在类定义的末尾del它们。)。

关于Python - 将一个函数(从头开始!)传递给另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com