解释 lambda argparse.HelpFormatter(prog, width)
Explain lambda argparse.HelpFormatter(prog, width)
此代码可以正常工作以增加帮助文本的宽度,但不清楚。 lambda 函数在做什么?
编辑:澄清一下,问题不是为什么 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)
这里的 lambda 只是 "fixing" argparse.HelpFormatter
构造函数的参数之一。 argparse.ArgumentParser
的 formatter
参数接受一个 class ,它在其构造函数中接受一个参数。我们想将额外的命名参数传递给我们在那里使用的调用......即 width=100
。这样做的方法是创建第二个构造函数,它采用与 argparse.HelpFormatter
相同的位置参数,但在调用中采用 "fixes" width=100
。
这是将函数作为参数传递时的常见范例。另一个常见的例子是当一个函数接受一个需要一个变量的函数的参数时。我们有一个包含两个变量的函数,我们想传入其中一个变量 "fixed",因此我们使用 new_func = lambda x: old_func(x, 5)
。结帐 functools.partial
这是默认的 HelpFormatter __init__
class 是:
def __init__(self,
prog,
indent_increment=2,
max_help_position=24,
width=None):
ArgumentParser
class 使用此函数来获取 Formatter 实例。 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
子 class。
此代码可以正常工作以增加帮助文本的宽度,但不清楚。 lambda 函数在做什么?
编辑:澄清一下,问题不是为什么 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)
这里的 lambda 只是 "fixing" argparse.HelpFormatter
构造函数的参数之一。 argparse.ArgumentParser
的 formatter
参数接受一个 class ,它在其构造函数中接受一个参数。我们想将额外的命名参数传递给我们在那里使用的调用......即 width=100
。这样做的方法是创建第二个构造函数,它采用与 argparse.HelpFormatter
相同的位置参数,但在调用中采用 "fixes" width=100
。
这是将函数作为参数传递时的常见范例。另一个常见的例子是当一个函数接受一个需要一个变量的函数的参数时。我们有一个包含两个变量的函数,我们想传入其中一个变量 "fixed",因此我们使用 new_func = lambda x: old_func(x, 5)
。结帐 functools.partial
这是默认的 HelpFormatter __init__
class 是:
def __init__(self,
prog,
indent_increment=2,
max_help_position=24,
width=None):
ArgumentParser
class 使用此函数来获取 Formatter 实例。 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
子 class。