有没有办法在lambda中分配这样的变量?
(lambda x,y=[1]*x: both variables x and y would be used and modified in here)(input())
或者是否有另一种方法可以将变量y指定为x大小的列表?整个程序必须用一行写成没有分号,所以在lambda之外声明一个变量不会有帮助。
例如,可以实现这样的事情吗?
x=input()
y=[1]*x
for i in xrange(2,int(x**.5)+2):
if y[i]:
for j in xrange(i*i,x,i):
y[j]=0
这些是x和y值,我可能想到的其他东西
答案 0 :(得分:1)
这会被允许吗?
>>> f = lambda x,y=None: (x, [1]*x if y is None else y)
>>> f(10, [1, 1, 1])
(10, [1, 1, 1])
>>> f(15)
(15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
此示例简单地计算为包含参数的元组,使用内联if语句实现y的默认参数值。
不分配lambda的立即调用(假设Python 2 input()
行为):
>>> (lambda x,y=None: (x, [1]*x if y is None else y))(input("x? : "))
x? : 5
(5, [1, 1, 1, 1, 1])