最简洁的方法是将argv存储到Python中的默认值变量中

时间:2014-03-18 09:13:46

标签: python argv

Perl具有以下语法:

my $filename = $ARGV[0] || "defaultfile.txt";

因此,当代码没有参数时,它会自动将defaultfile.txt作为$filename的值。

Python的方法是什么?

4 个答案:

答案 0 :(得分:4)

您要求的是最紧凑的方式和Python方式。

对于一种紧凑的方式,我会使用

filename = sys.argv[1] if len(sys.argv) >= 2 else 'defaultfile.txt'

但我认为Pythonic的方法是立即执行,并使用像argparse这样的模块来解析参数。对于单个参数来说,它似乎有点过分,但是当您想要添加选项,额外参数等时,它会为您提供一个使用消息和一种展开代码的明显方法。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("filename", nargs='?', default="defaultfile.txt",
                    help="File to process, default is 'defaultfile.txt.")
args = parser.parse_args()

# Now filename is in args.filename
print args.filename

您可以立即获得一些有用的功能:

$ python test.py
defaultfile.txt

$ python test.py -h
usage: test.py [-h] [filename]

positional arguments:
  filename    File to process, default is 'defaultfile.txt'

optional arguments:
  -h, --help  show this help message and exit

答案 1 :(得分:3)

我会说Python的方式是

try:
    filename = sys.argv[1]
except IndexError:
    filename = "defaultfile.txt"

答案 2 :(得分:1)

对于这种特殊情况,您应该执行what Remco suggested之类的操作。

my $filename = $ARGV[0] || "defaultfile.txt";的字面翻译(据我所知;我不知道Perl)是filename = sys.argv[0] or 'defaultfile.txt'。如果filename非空(或者更确切地说, truey ),则会将sys.argv[0]设置为'defaultfile.txt',否则设置为sys.argv。请注意,如果{{1}}本身为空,引发异常。

有关真值和Python的布尔运算符的更多信息,请参阅the docs

答案 3 :(得分:0)

您可以创建简单的功能,使其更紧凑:

def list_get (l, idx, default):
  try:
    return l[idx]
  except IndexError:
    return default

然后:

filename = list_get(sys.argv, 1, "defaultfile.txt")