- 论坛徽章:
- 0
|
近日在《Learn Perl》中发现perl 5.10引入了一个关键字state,类似于C语言里的static变量。其中有一个函数用到了这个特点,于是想用Python实现类似的效果,耗时甚多却毫无头绪,特向各位求助。
原Perl函数:
use 5.010;
sub running_sum {
state $sum = 0;
state @numbers;
foreach my $number ( @_ ) {
push @numbers, $number;
$sum += $number;
}
say "The sum of (@numbers) is $sum";
}
调用函数:
running_sum( 5, 6 );
running_sum( 1..3 );
running_sum( 4 );
改写成Python调用,则为如下格式:
running_sum( 5, 6 )
running_sum( [1, 2, 3] )
running_sum( 4 )
则程序输出为:
The sum of (5 6) is 11
The sum of (5 6 1 2 3) is 17
The sum of (5 6 1 2 3 4) is 21
如果允许使用全局变量,那么其实很简单;因此不能使用全局变量。
如果使用class,大概也不太难实现,不过我没试验过。
如果只用函数改写,而不用到class,可能需要用到如下知识:
1. 变长函数参数,类似于 def func(a, b, *args, **kargs). Perl调用时,参数会自动解嵌套成一个变长的非嵌套的list;而Python的参数则可能嵌套。当然简单起见,只要实现上述变长非嵌套参数调用即可。 (-:
2. generators. 但是generator函数只是在执行期间保留状态,而原Perl程序则是多次调用函数。因此我的想法是在Python版的函数体内使用 while true 形式的死循环.
期待高手出手.... |
|