我虽然可以提供帮助,但请使用断行器:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
不要忘记python能够编写oneliners的好处,例如:
a=b=0; c=b+a; d = a+b**2 #etc etc
而且lambda非常强大,但是它并不意味着要替换1个完整函数,我的意思是您可以像hack一样(从上面的同事那里借用示例):
makeTag = lambda tagName: "<{}>".format(tagName)
closeTag = lambda tagName: makeTag("/"+str(tagName))
openTag = lambda tagName: makeTag(tagName)
writeHMTLline = lambda tag,content: ""+opetTag(tag)+str(content)+closeTag(tag)
但是,您真的要这样吗?一段时间后,它几乎是不可读的,就像从未解开的末端开始到绳索的开头。
Lambda被视为唯一的函数,在面向函数的编程中(除其他功能外)在map,filter和reduce函数中。例如,获取整数值且可被2整除的字符值
chrDev2 = lambda INT: chr(INT) if isinstance(INT,int) and INT%2==0 else INT
someStringList = map( chrDev2, range(30) )
>>> ['\x00', 1, '\x02', 3, '\x04', 5, '\x06', 7, '\x08', 9, '\n', 11, '\x0c', 13, '\x0e', 15, '\x10', 17, '\x12', 19, '\x14', 21, '\x16', 23, '\x18', 25, '\x1a', 27, '\x1c', 29]
您可以通过定义复杂函数(或更多和几个lambda,并将其放在另一个lambda中)来将其用作函数expresions函数:
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
但是Python以另一种方式提供了对函数表示的支持:-让我们说您调用了某个函数,superAwesomeFunction
并且该函数可以执行一些非常出色的工作,您可以不调用它就将其分配给变量,如下所示:
SAF = superAwesomeFunction # there is no () at the end,
因此,现在当您调用SAF时,将调用superAwesomeFunction或方法。如果您在Lib文件夹中搜索,您会发现大多数python __builtin__
模块都是以这种方式编写的。这样做是因为有时您需要某些功能来执行特定任务,而这些功能对于用户来说并不是必需的,但是对于多个功能来说是必需的。因此,您可以选择不使用名称为“ superAwesomeFunction”的2个函数,可以使用“ superAwesomeFunctionDoingBasicStuf”和“ realSuperAwesomeFunction”,而不是仅将“ realSuperAwesomeFunction”放入“ superAwesomeFunction”变量中就可以了。
您可以通过在console中输入importedModule.__file__
(实际示例import os;os.__file__
)来找到导入模块的位置,只需跟随该目录访问名为importedModule.py的文件,然后在编辑器中将其打开,即可找到如何最大化自己的“知识”。
希望这对您和其他遇到麻烦的同事有所帮助。