相关疑难解决方法(0)

使用python中的lambda表达式在循环内生成函数

如果我制作两个函数列表:

def makeFun(i):
    return lambda: i

a = [makeFun(i) for i in range(10)]
b = [lambda: i for i in range(10)]
Run Code Online (Sandbox Code Playgroud)

为什么名单ab不相等?

例如:

>>> a[2]()
2
>>> b[2]()
9
Run Code Online (Sandbox Code Playgroud)

python lambda scope

29
推荐指数
3
解决办法
8761
查看次数

是否可以将python @ click.option装饰器重复用于多个命令?

我有两个Python CLI工具,它们共享一组常用的click.options。目前,通用选项已重复:

@click.command()
@click.option('--foo', is_flag=True)
@click.option('--bar', is_flag=True)
@click.option('--unique-flag-1', is_flag=True)
def command_one():
    pass

@click.command()
@click.option('--foo', is_flag=True)
@click.option('--bar', is_flag=True)
@click.option('--unique-flag-2', is_flag=True)
def command_two():
    pass
Run Code Online (Sandbox Code Playgroud)

是否可以将通用选项提取到可以应用于每个功能的单个装饰器中?

python python-click

11
推荐指数
3
解决办法
639
查看次数

如何纯粹使用Python的标准库来编写函数?

Python 的标准库非常庞大,我的直觉告诉我其中一定有一种方法可以实现这一点,但我就是想不出来。这纯粹是出于好奇和学习目的:

我有两个简单的功能:

def increment(x):
    return x + 1

def double(x):
    return x * 2
Run Code Online (Sandbox Code Playgroud)

我想将它们组合成一个新函数double_and_increment。我当然可以简单地这样做:

double_and_increment = lambda x: increment(double(x))
Run Code Online (Sandbox Code Playgroud)

但我也可以用更复杂但也许更“符合人体工程学可扩展”的方式来做到这一点:

import functools

double_and_increment = functools.partial(functools.reduce, lambda acc, f: f(acc), [double, increment])
Run Code Online (Sandbox Code Playgroud)

上面两个都工作得很好:

double_and_increment = lambda x: increment(double(x))
Run Code Online (Sandbox Code Playgroud)

现在的问题是,标准库中是否有工具可以在没有任何用户定义的 lambda、常规函数或类的情况下实现组合。

第一个直觉是将调用lambda acc, f: f(acc)中的定义替换为,但不幸的是,这会以相反的顺序获取参数:functools.reduceoperator.call

>>> (lambda acc, f: f(acc))(1, str)  # What we want to replace.
>>> '1'
>>> import operator
>>> operator.call(str, 1)  # Incorrect argument order.
>>> '1'
Run Code Online (Sandbox Code Playgroud)

我有一种预感,使用functools.reduce …

python language-features functional-programming standard-library function-composition

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

如何在python中编写函数n次

我知道如何通过将两个函数作为输入并输出其组合函数来组合两个函数,但是如何返回组合函数f(f(... f(x)))呢?谢谢

def compose2(f, g):
    return lambda x: f(g(x))

def f1(x):
    return x * 2
def f2(x):
    return x + 1

f1_and_f2 = compose2(f1, f2)
f1_and_f2(1)
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

如何将嵌套函数作为参数传递

让我们说我们在python中有函数:

def _abs(iterable):   #cause its normally for one element only
    return [abs(i) for i in iterable]

def A(list, foo):
    return foo(list)

list = [2,3,-5]
print( A(list,foo=sum) )

>> 0
Run Code Online (Sandbox Code Playgroud)

虽然我可能会foo=sum转到A,但我正在寻找一种优雅的方式来传递类似foo=sum(_abs)表演的东西sum(_abs(list)).

我现在看到它的唯一方法是发送一个函数列表[sum, _abs]并按顺序应用它们.有没有更好的办法?

python nested function

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