Perl具有以下语法:
my $filename = $ARGV[0] || "defaultfile.txt";
因此,当代码没有参数时,它会自动将defaultfile.txt
作为$filename
的值。
Python的方法是什么?
答案 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")