标题演示了我希望在我的python脚本中传达的perl习语。我意识到这可能被解释为不良做法,可能是由于(缺乏)异常处理。尽管如此,我发现在(一次性/个人)公用事业中执行此类操作的价值。
答案 0 :(得分:1)
Python没有像Perl那样的各种变量的概念。标量,列表和dicts都存储在同一种变量中。所以这个“成语”不适用。只需直接使用返回的值。
一些Perl代码示例:
sub foo {
return [ qw(a b c) ];
}
@list = @{foo()};
say $list[0];
say $list[1];
say $list[2];
等效的Python代码:
def foo():
return ("a", "b", "c")
list = foo()
print list[0]
print list[1]
print list[2]
当你提到缺乏异常处理时,我不知道你的意思。
答案 1 :(得分:0)
这个问题的三个字母的答案是:嗯?
答案越长:Python没有引用。没有tuplerefs或dictrefs,并且没有函数可以返回它们,并且调用者无法将tuplerefs或dictrefs转换为元组或字典。没有等价物。
这个Perl:
sub foo {
qw/a b c/
}
my @array = foo;
print $array[0];
print $array[1];
print $array[2];
在另一个答案的Python中,与其他答案中的Perl相比,“不等同于”。
但它与Perl的其他部分不同。当您查看以下调用时,它会有所不同:
my @array = (this_foo(), this_foo(), this_foo());
# @array is now: ('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'), and one-dimensional.
my @array = (that_foo(), that_foo(), that_foo());
# @array is now: (['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']), and two-dimensional.
但这对于Python来说只是一个不同之处。