标题展示了我希望在我的 python 脚本中传达的 perl 习惯用法。我意识到这可能被解释为不好的做法,可能是由于(缺乏)异常处理。尽管如此,我发现在(一次性/个人)实用程序中执行此类操作很有价值。
问问题
88 次
2 回答
1
Python 没有 Perl 的不同类型变量的概念。标量、列表和字典都存储在同一种变量中。所以这个“成语”是不适用的。直接使用返回值即可。
一些示例 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]
当您提到缺乏异常处理时,我不知道您的意思。
于 2013-05-16T15:05:15.503 回答
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 来说毫无意义。
于 2013-05-16T16:00:04.843 回答