相关疑难解决方法(0)

使用参数将函数传递给Python中的另一个函数?

是否可以将带有参数的函数传递给Python中的另一个函数?

比如说:

def perform(function):
    return function()
Run Code Online (Sandbox Code Playgroud)

但要传递的函数将具有如下参数:

action1()
action2(p)
action3(p,r)
Run Code Online (Sandbox Code Playgroud)

python function

188
推荐指数
6
解决办法
20万
查看次数

functools如何在Python中部分工作?

我无法理解functools中的部分工作原理.我从这里得到以下代码:

>>> sum = lambda x, y : x + y
>>> sum(1, 2)
3
>>> incr = lambda y : sum(1, y)
>>> incr(2)
3
>>> def sum2(x, y):
    return x + y

>>> incr2 = functools.partial(sum2, 1)
>>> incr2(4)
5
Run Code Online (Sandbox Code Playgroud)

现在就行了

incr = lambda y : sum(1, y)
Run Code Online (Sandbox Code Playgroud)

我得到的是,无论我传递给incr它的任何论点都将被传递ylambda哪个将返回sum(1, y)ie 1 + y.

我明白那个.但我不明白这一点incr2(4).

如何在部分函数中4传递x?对我来说,4应该更换sum2.x和之间有什么关系 …

python functional-programming partial-application functools

154
推荐指数
5
解决办法
9万
查看次数

Python Lambda循环

考虑以下代码段:

# directorys == {'login': <object at ...>, 'home': <object at ...>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))
Run Code Online (Sandbox Code Playgroud)

我希望创建一个包含两个函数的字典如下:

# Expected :
self.command == {
    "cd login": lambda: self.root.change_directory("login"),
    "cd home": lambda: self.root.change_directory("home")
}
Run Code Online (Sandbox Code Playgroud)

但看起来生成的两个lambda函数完全相同:

# Result :
self.command == {
    "cd login": lambda: self.root.change_directory("login"),
    "cd home": lambda: self.root.change_directory("login")   # <- Why login ?
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么.你有什么建议吗 ?

python loops anonymous-function

57
推荐指数
3
解决办法
2万
查看次数

如何从Django中的inlineadmin获取当前模型实例

formfield_for_manytomanydjango文档中使用给定的.但在该函数内部,我需要获取正在编辑的当前父对象.

def formfield_for_manytomany(self, db_field, request, **kwargs):
    if db_field.name == "car":
        kwargs["queryset"] = Cars.objects.filter(owner=person)
    return super(myModel, self).formfield_for_manytomany(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

如何让被编辑的人?

python django django-admin

20
推荐指数
2
解决办法
1万
查看次数

Python functools部分效率

我一直在使用Python,我设置了以下代码情况:

import timeit

setting = """
import functools

def f(a,b,c):
    pass

g = functools.partial(f,c=3)    
h = functools.partial(f,b=5,c=3)   
i = functools.partial(f,a=4,b=5,c=3)
"""

print timeit.timeit('f(4,5,3)', setup = setting, number=100000)
print timeit.timeit('g(4,5)', setup = setting, number=100000)
print timeit.timeit('h(4)', setup = setting, number=100000)
print timeit.timeit('i()', setup = setting, number=100000)
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

f: 0.181384086609
g: 0.39066195488
h: 0.425783157349
i: 0.391901016235
Run Code Online (Sandbox Code Playgroud)

为什么对部分函数的调用需要更长时间?部分函数是将参数转发到原始函数还是映射静态参数?而且,在Python中是否有一个函数返回一个函数的主体,假定所有参数都是预定义的,就像函数i一样?

python function partial functools

18
推荐指数
2
解决办法
3285
查看次数

functools.partial和类似lambda之间的区别?

在Python中,假设我有一个函数f,我想传递一些辅助参数(为简单起见,它只是第一个保持变量的参数).

这两种方式(如果有的话)之间有什么区别?

# Assume secondary_args and secondary_kwargs have been defined

import functools

g1 = functools.partial(f, *secondary_args, **secondary_kwargs)
g2 = lambda x: f(x, *secondary_args, **secondary_kwargs)
Run Code Online (Sandbox Code Playgroud)

例如,在doc页面中partial,有这样的引用:

partial 在类中定义的对象的行为类似于静态方法,并且在实例属性查找期间不会转换为绑定方法.

如果用于从提供给类的参数(在构造函数中或稍后通过函数)中创建类方法,lambda方法是否会受此影响?

python lambda partial functools

12
推荐指数
3
解决办法
5001
查看次数

如何将具有多个参数的函数传递给python concurrent.futures.ProcessPoolExecutor.map()?

我想concurrent.futures.ProcessPoolExecutor.map()调用一个由2个或更多参数组成的函数.在下面的示例中,我使用了一个lambda函数并将其定义refnumberlist具有相同值的相同大小的数组.

第一个问题:有更好的方法吗?在numberlist的大小可能是数百万到数十亿个元素的情况下,因此ref大小必须遵循numberlist,这种方法不必要地占用宝贵的内存,我想避免.我这样做是因为我读取map函数将终止其映射,直到达到最短的数组结束.

import concurrent.futures as cf

nmax = 10
numberlist = range(nmax)
ref = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
workers = 3


def _findmatch(listnumber, ref):    
    print('def _findmatch(listnumber, ref):')
    x=''
    listnumber=str(listnumber)
    ref = str(ref)
    print('listnumber = {0} and ref = {1}'.format(listnumber, ref))
    if ref in listnumber:
        x = listnumber
    print('x = {0}'.format(x))
    return x 

a = map(lambda x, y: _findmatch(x, y), numberlist, ref)
for n …
Run Code Online (Sandbox Code Playgroud)

python concurrency lambda python-3.x concurrent.futures

12
推荐指数
3
解决办法
9159
查看次数

functools.partial不适用于multiprocessing.Pool.map吗?

我有简化的代码,如下所示:

run = functools.partial(run, grep=options.grep, print_only=options.print_only, force=options.force)

if not options.single and not options.print_only and options.n > 0:
    pool = multiprocessing.Pool(options.n)
    Map = pool.map
else: Map = map

for f in args:
    with open(f) as fh: Map(run, fh)

try:
    pool.close()
    pool.join()
except NameError: pass
Run Code Online (Sandbox Code Playgroud)

当我在单进程模式下运行它时工作正常,但是失败并出现这样的错误

TypeError: type 'partial' takes at least one argument
Run Code Online (Sandbox Code Playgroud)

通过多处理模块与长调用栈混合在一起.这是怎么回事?

我正在使用python 2.6.1.

python multiprocessing

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

lambda self:做什么

这个答案解释了如何动态创建测试用例.

答案的代码:

class Tests(unittest.TestCase):
    def check(self, i, j):
        self.assertNotEquals(0, i-j)

for i in xrange(1, 4):
    for j in xrange(2, 6):
        def ch(i, j):
            return lambda self: self.check(i, j)
        setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))
Run Code Online (Sandbox Code Playgroud)

我已经测试过它的确有效,但我不知道怎么做

我无法理解lambda self:这里的魔术,主要是:

  1. 这里使用的lambda是否执行完全相反的functools.partial()(即使用一个尚未知的额外参数创建包装函数)
  2. self一个有意义的关键字还是lambda spam会起作用?
  3. lambda评估的重点是什么?
  4. 为什么.check()classes范围之外完全没问题呢?
  5. 没有 lambda 你怎么做?- 如果我理解正确的话,你应该可以不用lambda(更不用说我同意Guido和Alex这一个眼睛,我没有:)

python lambda functional-programming

6
推荐指数
2
解决办法
8763
查看次数

Python:在多维数组/列表上使用没有 lambda 的 map()

我在 python 中有一些代码,它按位或等于 b 到一个称为 a 的多维列表中的所有值

for i in xrange(len(a)):
    for j in xrange(len(a[i])):
        a[i][j] |= b
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有什么方法可以只使用 (map()、filter()、reduce()) 编写此代码,而不必使用 lambdas 或任何其他函数定义,如下例所示

map(lambda x: map(lambda y: y | b, x), a)
Run Code Online (Sandbox Code Playgroud)

python lambda functional-programming

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