检查参数是否在函数中传递的最佳pythonic方法?可以进行内联检查吗?

时间:2019-04-24 09:08:02

标签: python python-3.x function parameters

我正在做一个简单的功能来发送带有Mutt的邮件。有时我需要发送附件,有时不需要,因此,我需要检查参数“ attachment”是否包含某些内容。现在,我的代码如下:

def sendMail(destino,asunto,cuerpo,adjunto):
    try:
        os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)

如何检查“ adjunto”(附件变量)是否包含某些东西并仅在有附件的情况下才将“ -a adjunto”添加到命令中?我知道我可以执行常规的“ if”语句并在有附件的情况下使用不同的os.system,但是我想知道是否有任何内联检查的方法。类似于“ ..... asunto +'“'+ destino((如果adjunto = true,则为(('+'+ adjunto))”)

PS:我知道代码还没有完成,但是我想知道如何有效地检查附件。

4 个答案:

答案 0 :(得分:0)

您可以使用adjunto的默认值,可以在定义函数时使用它,如下所示:

def sendMail(destino, asunto, cuerpo, adjunto=None):
    try:
        os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)

您还可以通过或命令使用语言hack:

adjunto=None
print(adjunto or 'a')

Output:
    a

它不会为您要注入的字符串添加任何内容。

您应该使用''。format函数,它的功能更强大。

os.system('echo "{}" | mutt -s "{}" {}'.format(cuerpo, asunto, destino)

答案 1 :(得分:0)

您可以这样做:

destino + ((" " + adjunto) if adjunto else "")

但是您可能不应该这样做,除非您非常确保附件的名称确实是文件名而不是某些恶意的shell命令。并考虑使用subprocess模块而不是os.system

答案 2 :(得分:0)

您可以在Python中使用单行if语句:output if condition else other_output

您的示例如下所示:

'-a {}'.format(adjunto) if adjunto != None else ''

所以您的代码可能是:

    adjunto = '-a {}'.format(adjunto) if adjunto != None else ''
    os.system('echo "' + cuerpo + '" | mutt -s "' + adjunto + '" ' + destino)

答案 3 :(得分:0)

def sendMail(destino,asunto,cuerpo,adjunto = None):
    adjunto_mandato = ' -a ' + adjunto if adjunto is not None else ''
    mandato = 'echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino + adjunto_mandato

    try:
        os.system(mandato)
    except Exception as e:
        print(e)

这是我能想到的最简单的“内联”方式,可以完成您的要求。我认为您需要权衡读取代码和内联代码的能力,因为如果您删除了您不应该执行的Try块,则可以使用三元运算符进行系统调用:

os.system( )(如果adjunto并非其他)os.system(

布宜诺斯艾利斯!