-1

标题展示了我希望在我的 python 脚本中传达的 perl 习惯用法。我意识到这可能被解释为不好的做法,可能是由于(缺乏)异常处理。尽管如此,我发现在(一次性/个人)实用程序中执行此类操作很有价值。

4

2 回答 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 回答