Python局部函数– functoolspartial()

时间:2020-02-23 14:43:08  来源:igfitidea点击:

什么是Python局部函数?

有时一个函数接受多个参数。
如果存在多次将相同参数传递给它的情况,我们可以创建一个python局部函数。
在部分功能中,某些参数是固定的。
从现有功能创建更有意义的功能名称时非常有用。

如何在Python中创建部分函数?

Python functoolspartial()函数用于创建部分函数。
functools模块用于高阶函数。
partial()函数的语法为:

partial(func, /, *args, **keywords)

它创建了一个局部函数,其行为类似于使用固定的位置和关键字参数调用" func"。
我们只需要传递一些调用底层函数所需的参数即可。
其他参数已在* args和** kwargs中提供。

Python局部函数示例

假设我们有一个类似的乘法函数:

def multiply(x, y):
  print(f'Arguments: {x}, {y}')
  return x * y

我们想利用此函数将整数列表与4和5相乘。

int_list = [1, 2, 3, 4]

int_list_4x = []

for i in int_list:
  int_list_4x.append(multiply(i, 4))

print(int_list_4x)

int_list_5x = []

for i in int_list:
  int_list_5x.append(multiply(i, 5))

print(int_list_5x)

输出:

Arguments: 1, 4
Arguments: 2, 4
Arguments: 3, 4
Arguments: 4, 4
[4, 8, 12, 16]
Arguments: 1, 5
Arguments: 2, 5
Arguments: 3, 5
Arguments: 4, 5
[5, 10, 15, 20]

我们可以在此处创建偏函数,以将整数与4和5相乘。

times_4 = partial(multiply, 4)
times_5 = partial(multiply, 5)

现在,将整数列表与4和5相乘的更新代码将如下所示:

int_list_4x = []

for i in int_list:
  int_list_4x.append(times_4(i))

print(int_list_4x)

int_list_5x = []

for i in int_list:
  int_list_5x.append(times_5(i))

print(int_list_5x)

我们可以使用列表理解来进一步减少代码大小。

int_list_4x = [times_4(x) for x in int_list]

int_list_5x = [times_5(x) for x in int_list]

在这种情况下,输出将如下所示:

Arguments: 4, 1
Arguments: 4, 2
Arguments: 4, 3
Arguments: 4, 4
[4, 8, 12, 16]
Arguments: 5, 1
Arguments: 5, 2
Arguments: 5, 3
Arguments: 5, 4
[5, 10, 15, 20]

具有关键字参数的Python部分函数

如果您看上面的输出,部分函数的位置参数始终作为第一个参数传递。
在这种情况下,没关系。
但是,如果部分函数参数的位置很重要,则可以使用关键字参数。

times_4 = partial(multiply, y=4)

int_list = [10, 20, 30]

int_list_4x = [times_4(x) for x in int_list]

print(int_list_4x)

输出:

Arguments: 10, 4
Arguments: 20, 4
Arguments: 30, 4
[40, 80, 120]