gpt4 book ai didi

参数化函数的 Pythonic 方式(没有 lambda)

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:23 25 4
gpt4 key购买 nike

这是一个关于编程风格的问题:什么是最“Pythonic”的函数参数化方式(这个词是否合适?)

假设我有一个函数(例如 ODE 求解器)接受另一个具有两个参数的函数(例如 ODE 本身)作为参数。

def solver(fun):
# Implementation goes here
# fun is a function handle that accepts two args e.g. fun(t,y)

但是,我想传递给 solver 的函数由第三个值参数化

def myFun(t,y,A):
# Implementation goes here

我一直在使用 lambda 函数处理这种情况,如下所示:

A = 4
solution = solver(lambda t,y:myFun(t,y,A))

我最近在网上看到一些帖子告诉我要像瘟疫一样避免使用 lambda,而 Guido 本人对允许该功能感到遗憾。如果 lambda 确实很糟糕,那么实现上述内容的更好的“Pythonic”方法是什么?如果没有 lambda,我会遇到无法访问全局命名空间的问题,即我想这样做:

A = 4
def myFunNotLambda(t,y):
return myFun(t,y,A)
solution = solver(myFunNotLambda)

但唯一的方法似乎是使 A 全局化,这肯定比使用 lambda

差得多

最佳答案

您可以使用 functools.partial为此,例如:

<b>from functools import partial</b>

A = 4
solution = solver(<b>partial(</b>myFun<b>,A=A)</b>)

partial(..) 构造给定一个函数(此处为 myFunc)另一个函数,其中 A 参数现在具有默认值 A

关于参数化函数的 Pythonic 方式(没有 lambda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44506659/

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