python中perl的@{$obj->method($args)}或%{$obj->method($args)}的等效函数

2024-05-20 01:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 脚本titleperl公用事业价值意识习惯用法
2条回答

这个问题的三个字母的答案是:嗯?你知道吗

较长的答案是:Python没有引用。没有tupleref或dictref,也没有返回它们的函数,调用者也无法将tupleref或dictref转换为tuple或dictionary。没有等价物。你知道吗

此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毫无意义的区别。你知道吗

Python不像Perl那样有不同类型变量的概念。标量、列表和dict都存储在同一种变量中。所以这个“成语”是不适用的。直接使用返回值即可。你知道吗

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]

我不知道你所说的缺乏异常处理是什么意思。你知道吗

相关问题 更多 >