相关疑难解决方法(0)

Python参数绑定器

如何将参数绑定到Python方法以存储一个用于以后调用的nullary仿函数?与C++类似boost::bind.

例如:

def add(x, y):
    return x + y

add_5 = magic_function(add, 5)
assert add_5(3) == 8
Run Code Online (Sandbox Code Playgroud)

python partial-application

60
推荐指数
5
解决办法
2万
查看次数

在Python中部分应用的高性能方法?

我正在寻找一种在 python 中部分应用函数的方法,该方法易于理解、可读、可重用,并且尽可能少地容易出现编码错误。最重要的是,我希望该样式尽可能具有高性能 - 堆栈上的帧越少越好,部分应用的函数的内存占用也越少越好。我考虑了 4 种风格并写了下面的例子:

import functools

def multiplier(m):
    def inner(x):
        return m * x

    return inner

def divide(n,d):
    return n/d

def divider(d):
    return functools.partial(divide,d=d)

times2 = multiplier(2)
print(times2(3))  # 6

by2 = divider(2)
print(by2(6)) # 3.0

by3 = functools.partial(divide,d=3)
print(by3(9)) # 3.0

by4 = lambda n: divide(n,4)
print(by4(12)) # 3.0
Run Code Online (Sandbox Code Playgroud)

我对他们的分析是:

times2是一个嵌套的东西。我猜想 python 用边界做了一个闭包m,一切都很好。该代码是可读的(我认为)并且易于理解。没有外部库。这就是我今天使用的风格。

by2有一个明确的命名函数,这对用户来说很简单。它使用 functools,因此它为您提供了额外的导入。我在某种程度上喜欢这种风格,因为它是透明的,如果我愿意的话,我可以选择divide其他方式使用。将此与inner不可到达的进行对比。

by3就像by2,但是迫使代码的读者感到舒服,functools.partial因为他们就在眼前。我不太喜欢的是 PyCharm 无法为我的工具提示提供参数应该functools.partial是什么,因为它们实际上是by3 …

python lambda partial-application

5
推荐指数
1
解决办法
609
查看次数

将函数应用于可迭代?

我刚刚写了这个函数:

def _apply(mols, fn, *args, **kwargs):
    return [fn(m, *args, **kwargs) for m in mols if m ]
Run Code Online (Sandbox Code Playgroud)

我开始思考:

  1. 可以使用 重写吗map
  2. 这已经在Python的某个地方实现了吗?

据我所知,map无法将参数传递给函数,另一方面,它可能会以某种方式进行优化,并且使用一些部分绑定或 lambda 我可以使用map. 这会有好处吗?

python algorithm functional-programming list-comprehension function

1
推荐指数
1
解决办法
1609
查看次数

从map()传递几个参数来起作用

例如,如果我想检测数组中的所有奇数并将它们设置为零,我可以使用:

def setToZeroIfOdd(n):
   if n % 2 == 0:
      pass
   else:
      return 0

numbers = range(1,1000)

numbers = map(setToZeroIfOdd, numbers)
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力.

但是当我尝试类似的东西时

def setToZeroIfDivisibleBy(n, divisor):
  if n % divisor == 0:
     return 0
  else:
     pass

numbers = map(setToZeroIfDivisibleBy(divisor=3), numbers)
Run Code Online (Sandbox Code Playgroud)

它期待两个论点.同样,

numbers = map(setToZeroIfDivisibleBy, numbers, divisor=3)
Run Code Online (Sandbox Code Playgroud)

不起作用.我怎样才能divisor从内部传递这个论点map()

python

1
推荐指数
3
解决办法
856
查看次数