Perl to Python函数转换

时间:2014-02-01 21:23:49

标签: python perl translate

我正在尝试将Perl函数转换为Python函数,但我无法弄清楚Perl与Python函数的某些功能。

Perl功能:

sub reverse_hex {

 my $HEXDATE = shift;
 my @bytearry=();
 my $byte_cnt = 0;
 my $max_byte_cnt = 8;
 my $byte_offset = 0;
 while($byte_cnt < $max_byte_cnt) {
   my $tmp_str = substr($HEXDATE,$byte_offset,2);
    push(@bytearry,$tmp_str);
   $byte_cnt++;
   $byte_offset+=2;
 }
   return join('',reverse(@bytearry));
}

我不确定“push”,“shift”和“substr”在这里做什么在Python中是一样的。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

Perl子程序看起来相当复杂,即从发送的字符串中一次取两个字符块(前16个字符)然后将其反转。另一个Perl选项是:

sub reverse_hex {
    return join '', reverse unpack 'A2' x 8, $_[0];
}

首先,unpack这里一次取两个字符(八次)并生成一个列表。该列表为reverse d和join以生成最终字符串。

这是一个完成此任务的Python子程序:

def reverse_hex(HEXDATE):
    hexVals = [HEXDATE[i:i + 2] for i in xrange(0, 16, 2)]
    reversedHexVals = hexVals[::-1]
    return ''.join(reversedHexVals)

列表推导产生八个元素,每个元素包含两个字符。 [::-1]反转列表的元素,结果为join并返回。

希望这有帮助!

答案 1 :(得分:0)

我意识到你在询问perl到python的翻译,但如果你对perl有任何控制权,我想指出这个函数比它需要的要复杂得多。

整个事情可以替换为:

sub reverse_hex
{
  my $hexdate = shift;
  my @bytes = $hexdate =~ /../g;  # break $hexdate into array of character pairs
  return join '', reverse(@bytes);
}

这不仅缩短了,而且更容易让人头疼。 当然,如果你无法控制perl,你就会被你所处理的事情所困扰。