python - 解释 lambda argparse.HelpFormatter(prog, width)

标签 python lambda argparse

此代码可以正常工作以增加帮助文本的宽度,但不清楚。 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)

最佳答案

这是默认 HelpFormatter 类的 __init__ :

def __init__(self,
             prog,
             indent_increment=2,
             max_help_position=24,
             width=None):

ArgumentParser 类使用此函数来获取 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 子类。

关于python - 解释 lambda argparse.HelpFormatter(prog, width),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333577/

相关文章:

python argparse store --foo=bar as args.key ='foo' , args.value ='bar'

python - 已安装 MacPort 但命令出错

python - Pandas :按组计算唯一的日期时间值会给出奇怪的值

java 8 可选 map() 抛出带有函数引用但不带有完整 lambda 语法的 NPE

c++ - +[](){} 有什么不同;和 (+[](){});以及为什么表达式有效

python - 使用 argparse 创建互包参数

python - 如何让 argparse 识别跟随可变长度可选参数的位置参数?

python - 忽略零值并继续在 Python Pandas 中计算

python - 用 sympy 对方程进行数值计算

c# - 表达式树重用值?