以下功能可以很好地打印出我编写的程序的帮助消息。它将打印出多行字符串消息,并通过一些示例来描述命令行用法:不幸的是,为了使消息在输出中看起来不错,当前,代码块看起来很丑陋,字符串消息使代码的缩进看起来不正确。有没有一种方法可以改进代码,使其更具可读性,类似于下面的代码(缩进更容易理解,它只是一个示例),其中缩进更易读?


def usage():

    print(
        """
Usage examples:

Test deployment:
       $ fab [noinput] test deploy

Staging deployment:
       $ fab [noinput] staging deploy

Production deployment:
       $ fab [noinput] production deploy
""")



如何在提高可读性的同时仍产生在输出中看起来不错的结果?

评论

stackoverflow.com/questions/1412374/…

正在meta
上讨论

#1 楼

您可以使用textwrap.dedent从多行字符串的所有行的开头删除公用空格:

>>> import textwrap
>>> print(textwrap.dedent(
        """
        Usage examples:
        Test deployment:
            $ fab [noinput] test deploy
        Staging deployment:
            $ fab [noinput] staging deploy
        Production deployment:
            $ fab [noinput] production deploy
        """
))

Usage examples:
Test deployment:
    $ fab [noinput] test deploy
Staging deployment:
    $ fab [noinput] staging deploy
Production deployment:
    $ fab [noinput] production deploy


如文档中所述:


可用于使三引号字符串与显示的左边缘对齐,同时仍将它们以缩进形式显示在源代码中。


#2 楼

对于较小的文本,我倾向于只将双引号引起来,然后在下一行将其打开。然后,您必须使用\n自己添加换行符:

print(
    "Usage examples:\n"
    "Test deployment:\n"
    "    $ fab [noinput] test deploy\n"
    "Staging deployment:\n"
    "    $ fab [noinput] staging deploy\n"
    "Production deployment:\n"
    "    $ fab [noinput] production deploy\n"
)


评论


\ $ \ begingroup \ $
如果您不喜欢在每个字符串中添加'\ n',也可以执行print(“用法示例:”,“测试部署:”,“ $ fab [noinput]测试部署”,…,sep ='\ n')
\ $ \ endgroup \ $
–尼克·马特奥(Nick Matteo)
17年1月23日在16:29

#3 楼

当我需要有关程序或模块的使用情况文本或帮助文本时,在源代码的开头还有另一个选择:

#!/bash/python  
"""  
Usage examples, Test deployment,  
and any other text you like  
"""


需要在程序中的某个位置打印它:

print(`__doc__`)


#4 楼

另外,您可能想使用.join()方法:

def usage():

    print('\n'.join([        
        'Usage examples:',
        'Test deployment:',
        '    $ fab [noinput] test deploy',
        'Staging deployment:',
        '    $ fab [noinput] staging deploy',
        'Production deployment:',
        '    $ fab [noinput] production deploy'        
        ]))