Python中将函数作为参数传递给函数

今天看一个代码给我看懵了,这里直接将“forward_step”函数名传递给train函数了,并且没有给“forward_step”任何的需要的初始值,其实这样是可以的【函数名作为参数传递给另外一个函数是可以的,但是需要在另外一个函数中定义被调用函数名是如何使用的,也就是说需要出现“函数名()”语句】,肯定在train()函数中或者train()函数中使用forward_step的函数中定义了将哪些参数传递给forward_step函数。

有的被调用函数也是需要传递参数的【例如下面的forward_step需要传递(data_iterator, model)两个参数】,那么只是传递了函数名,并没有看到传递的参数在哪里,那么传递的参数到底在哪里呢?一般来说,在将被调用函数名传递给另外一个函数的时候,同时还会传递给另外一个函数该被调用函数所需的参数,你只需要仔细看就会看到这些参数【例如下面的train函数,被调用函数所需要的传递参数分别是train参数的“train_dataloader、model”】

 def forward_step(data_iterator, model):
    """Forward step."""
    timers = get_timers()
    return None

    train(
        forward_step,
        model,
        optimizer,
        lr_scheduler,
        iter(train_dataloader), train_dataloader,
        iter(val_dataloader),
        args.pipe_parallel_size,
        args,
    )

Python中一切皆对象(object),既然一切皆对象,那么一切都可以作为参数传递!

1、定义两个简单的函数

  • 函数1--add_params(a,b):

a,b两个数字 返回:a+b

  • 函数2--mult_params(func,a,b,c): a,b,c 为数字,func是函数 返回:func(a,b)*c
def add_params(a,b):
  return a+b

def mult_params(func,a,b,c):
  return func(a,b)*c

2、调用测试

a,b,c = 1,2,3

# add_params(a,b)= 1 + 2 = 3
r1 = add_params(a,b)

# mult_params(func,a,b,c) = (1+2)*3 = 3*3 = 9
r2= mult_params(add_params,a,b,c)

print(r1)
print(r2)
3
9

Python中将函数作为参数传递给函数 - 知乎

猜你喜欢

转载自blog.csdn.net/weixin_43135178/article/details/131680045