在python中使用字符串调用多行函数

时间:2017-12-15 09:29:08

标签: python

我在python 2.7中有一个函数调用:

execute_cmd('/sbin/ip addr flush dev '
             + args.interface
             + ' && '
             + '/sbin/ifdown '
             + args.interface
             + ' ; '
             + '/sbin/ifup '
             + args.interface
             + ' && '
             + '/sbin/ifconfig | grep '
             + args.interface)

运行正常,但pylint抱怨以下警告信息:

C:220, 0: Wrong continued indentation (remove 1 space).
                    + args.interface
                   |^ (bad-continuation)
C:221, 0: Wrong continued indentation (remove 1 space).
                    + ' && '
                   |^ (bad-continuation)
C:222, 0: Wrong continued indentation (remove 1 space).
                    + '/sbin/ifconfig | grep '
                   |^ (bad-continuation)
.
.
.

使用跨越多行的字符串参数在python中调用函数的正确方法是什么?。

3 个答案:

答案 0 :(得分:0)

Pylint告诉你到底要做什么,删除一个空格:

board = csv.reader(data.splitlines(), dialect="excel")

此外,您可以使用字符串格式,例如:

execute_cmd('/sbin/ip addr flush dev '
            + args.interface
            + ' && '
            + '/sbin/ifdown '
            + args.interface
            + ' ; '
            + '/sbin/ifup '
            + args.interface
            + ' && '
            + '/sbin/ifconfig | grep '
            + args.interface)

答案 1 :(得分:0)

PEP 8 states您还可以在下一行开始一个长参数列表(或括号内的任何内容),并添加一个额外的缩进级别:

execute_cmd(
    '/sbin/ip addr flush dev ' +
    args.interface +
    ' && ' +
    '/sbin/ifdown ' +
    args.interface +
    ' ; ' +
    '/sbin/ifup ' +
    args.interface +
    ' && ' + 
    '/sbin/ifconfig | grep ' +
    args.interface
)

正如我在评论中所说,binary operators should be put at the end of a line break,而不是在新评论的开头。

您还可以使用fstring(python> 3.6),然后删除+

execute_cmd(
    f'/sbin/ip addr flush dev {args.interface} && /sbin/ifdown'
    f' {args.interface} ; /sbin/ifup {args.interface} && '
    f'/sbin/ifconfig | grep {args.interface}'
)

.format函数相同(从python 2.6开始,我认为?):

execute_cmd(
    '/sbin/ip addr flush dev {0} && /sbin/ifdown' +
    ' {0} ; /sbin/ifup {0} && ' +
    '/sbin/ifconfig | grep {0}'.format(args.interface)
)

答案 2 :(得分:-1)

您可以使用换行符执行以下操作:

execute_cmd('/sbin/ip addr flush dev ' \
        + args.interface \
        + ' && ' \
        + '/sbin/ifdown ' \
        + args.interface  \
        + ' ; '\
        + '/sbin/ifup '\
        + args.interface\
        + ' && '\
        + '/sbin/ifconfig | grep '\
        + args.interface)