可以在Python中将参数传递给函数对象吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以在Python中将参数传递给函数对象吗?相关的知识,希望对你有一定的参考价值。
为了便于组织,我在文件顶部列出了ML优化器的其余配置常量:
optimizer = torch.optim.SGD()
要使用优化器,我必须传递稍后在代码中生成的模型参数
optimizer = torch.optim.SGD(model.parameters, lr=LEARNING_RATE)
我有什么方法可以将参数传递给变量optimizer
?
答案
当然!
>>> def add(x, y):
... return x+y
...
>>> z = add
>>> z(1,1)
2
另一答案
听起来您正在询问部分申请。这是一种将函数和一些参数“包装”到一个新的可调用对象中的方法,该方法需要较少(甚至不需要)参数。
>>> from functools import partial
>>> f = lambda x, y, z: x + y + z
>>> g = partial(f, 2, 3)
>>> g(4)
9
>>> h = partial(f, 1, 2, 3)
>>> h()
6
另一答案
我想出来了,看起来真的很简单,但是我将其保留,因为我无法在任何地方在线找到它。
您可以传入参数,就像新对象只是函数的新名称一样:
optimizer(model.parameters, lr=LEARNING_RATE)
编辑:看起来你们所有人都可能把我击败了
另一答案
我不确定这是否正是您想要的,但是我经常使用functools.partial将值绑定到参数。
import functools
optimizer = functools.partial(torch.optim.SGD, model.parameters, lr=LEARNING_RATE)
然后您可以将优化器作为函数调用,它将具有第一个位置参数和“ lr”关键字参数,并且可以在调用优化器时传递所需的任何其他参数。
以上是关于可以在Python中将参数传递给函数对象吗?的主要内容,如果未能解决你的问题,请参考以下文章