此代码工作正常,增加帮助文本的宽度,但目前还不清楚。 什么是lambda函数做什么?
编辑:为了澄清,问题不在于为什么是λ功能一般,但其实, 如何使用lambda函数参数解析器初始化代码 ?
import argparse
import sys
formatter = lambda prog: argparse.HelpFormatter(prog, width=100)
dummy_text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum."""
parser = argparse.ArgumentParser(description=dummy_text, formatter_class=formatter)
parser.add_argument("-e", dest="destE", help=dummy_text)
parser.add_argument("-w", dest="destW", help=dummy_text)
args = parser.parse_args(sys.argv)
这是__init__
默认HelpFormatter类是:
def __init__(self,
prog,
indent_increment=2,
max_help_position=24,
width=None):
该ArgumentParser
类使用这个功能来获取一个格式化的实例。 此实例使用format_help
创建帮助信息。
def _get_formatter(self):
return self.formatter_class(prog=self.prog)
其中self.formatter_class
是你设置的参数。 所以默认调用只设置prog
参数。
formatter = lambda prog: argparse.HelpFormatter(prog, width=100)
调用HelpFormatter
与加入的width
参数。
下面是一个等效采用lambda
用一个简单的功能:
In [176]: def foo(x,y):
...: return x,y
...:
In [177]: bar = lambda y: foo('x_str',y)
In [178]: bar('y_str')
Out[178]: ('x_str', 'y_str')
有做同样的事情的其他方式,如
def formatter(prog):
return argparse.HelpFormatter(prog, width=100)
或HelpFormatter
子类。
这里的拉姆达简直是“固定”的参数之一argparse.HelpFormatter
构造。 该formatter
参数argparse.ArgumentParser
它接受在其构造一个参数的类。 我们希望通过更多的命名参数我们使用那里的电话...即width=100
。 做到这一点的方法是创建一个第二构造函数相同的位置参数为argparse.HelpFormatter
,但“修复” width=100
在呼叫。
这是一个常见的模式传递函数作为参数时。 另一个常见的例子是,当一个函数使用需要一个变量的函数的参数。 我们有我们想要传递,以“固定”的一个变量两个变量的函数,所以我们使用new_func = lambda x: old_func(x, 5)
结帐functools.partial