今天看一个代码给我看懵了,这里直接将“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