我很好奇lambda函数和常规函数(用def定义)之间的区别--在python级别。(我知道程序员的区别是什么,以及何时使用每一个。)
>>> def a():
return 1
>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>
正如我们所看到的- python 知道 b是一个lambda函数,a是一个常规函数。为什
我最近有个面试。面试官问我如何在python中迭代dict。我说过使用for语句的所有方法。但他告诉我lambda怎么样
我感到非常困惑,我认为lambda是一个匿名函数,但是它是如何迭代一个dict的呢?这样的代码:
new_dict = sorted(old_dict.items(), lambda x: x[1]) # sorted by value in dict
但是在这段代码中,lambda被用作提供比较键的函数。你觉得这个问题是什么?
在Matlab中,大量使用内置的逻辑索引和掩码机制是很自然的。例如,(1) idx = (A == 2)创建一个与A大小相同的逻辑数组,标识所有等于2的元素,以及(2) C = B(idx)从B中取出所有相应的元素,假设A和B的大小相同。
这种机制非常优雅和高效。无论A和B的维度如何,它都可以工作。在Matlab中,使用逻辑掩码比以数值方式提取索引更有效。我刚刚开始学习Python,它做任何事情都不一样。与标准Python3中的(1)和(2)最接近的等价物是什么(不安装NumPy等)?
我在理解Python中的列表理解语法时遇到了一些麻烦,所以我开始思考如何在Perl中实现同样的功能,因为我更熟悉Perl。我意识到,基本的示例(取自)都可以用map或grep在Perl中完成。
例如。
(python) (perl)
S = [x**2 for x in range(10)] @S = map { $_**2 } ( 0..9 );
V = [2**i for i in range(13)] @V = map { 2**$_ } ( 0..12 );
M = [x
Python究竟是如何计算类属性的?我偶然发现了一个有趣的怪事(在Python 2.5.2中),我想解释一下。
我有一个带有一些属性的类,这些属性是根据先前定义的其他属性定义的。当我尝试使用生成器对象时,Python抛出一个错误,但是如果我使用普通的列表理解,就没有问题。
以下是精简后的示例。注意,唯一的区别是Brie使用生成器表达式,而Cheddar使用列表理解。
# Using a generator expression as the argument to list() fails
>>> class Brie :
... base = 2
... p
在尝试理解Y-Combinator一个小时后...我最终得到了它,但后来我意识到,没有它也可以实现同样的事情……虽然我不确定我是否完全理解它的目的。
例如:带有Y-组合器的阶乘
print (lambda h: (lambda f:f(f))(lambda f: h(lambda n: f(f)(n))))(lambda g: lambda n: n and n * g(n-1) or 1)(input())
阶乘通过引用另一个lambda中的函数来实现
print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) or 1),input(
Python 2.7.1
我想知道为什么我不能做下面这些看起来很明智的事情
def do_stuff():
# return a function which takes a map as an argument and puts a key in there
f = lambda map: map['x'] = 'y' #compilation error
return f
x = do_stuff()
map = {}
x(map)
print map['x']
我可以让lambda函数变得更简单一些,比如f =
我很确定有一个常见的习语,但我在谷歌搜索中找不到它……
下面是我想要做的(用Java):
// Applies the predicate to all elements of the iterable, and returns
// true if all evaluated to true, otherwise false
boolean allTrue = Iterables.all(someIterable, somePredicate);
在Python中,这是如何"Pythonic“完成的?
如果我也能得到答案,那就太好了:
// Returns true if any o
背景:
Python是简单易懂的代码。它已经变得更好的版本,我是一个超级粉丝!但是,每次我不得不定义lambda时,输入l a m b d a并不有趣(您可能不同意)。问题是,这6个字符l a m b d a使我的语句更长,特别是如果我在maps和filters中嵌套了几个lambdas。我的嵌套量不超过2或3个,因为它消除了python的可读性,甚至键入l a <code>d16<//code> b d <code>d19<//code>感觉过于冗长。
实际问题(见评论):
# How to rename/alias a keyword to
我正在尝试理解类如何更好地“在python的引擎盖下”工作。
如果我像这样创建一个类Foo
class Foo:
bar = True
然后可以直接访问Foo,例如print(Foo)或print(Foo.bar)。
但是,如果我动态地创建一个类,并且不将它设置为如下所示的变量
type('Foo',(),{'bar':True})
如果在解释器中完成,它将显示<class '__main__.Foo'>。但是,当我试图打印Foo时,它是未定义的.NameError: name 'Foo' is not def
我发现python不喜欢使用lambda方程。
y = lambda x: exp(2*x)
m = lambda x: 2*y - x
产生错误:
TypeError: unsupported operand type(s) for *: 'int' and 'function'
我目前正在研究非常长的方程,我需要替换很多方程,但是Python不允许我对lambda方程进行操作。在蟒蛇身上有什么办法可以避免吗?