解释拉姆达argparse.HelpFormatter(PROG,宽度)(Explain lambd

2019-09-26 10:49发布

此代码工作正常,增加帮助文本的宽度,但目前还不清楚。 什么是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)

Answer 1:

这是__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子类。



Answer 2:

这里的拉姆达简直是“固定”的参数之一argparse.HelpFormatter构造。 该formatter参数argparse.ArgumentParser它接受在其构造一个参数的类。 我们希望通过更多的命名参数我们使用那里的电话...即width=100 。 做到这一点的方法是创建一个第二构造函数相同的位置参数为argparse.HelpFormatter ,但“修复” width=100在呼叫。

这是一个常见的模式传递函数作为参数时。 另一个常见的例子是,当一个函数使用需要一个变量的函数的参数。 我们有我们想要传递,以“固定”的一个变量两个变量的函数,所以我们使用new_func = lambda x: old_func(x, 5) 结帐functools.partial



文章来源: Explain lambda argparse.HelpFormatter(prog, width)