Skip to main content
 首页 » 编程设计

python之Perl 中的隐式循环

2025年05月04日13java哥

我正在尝试学习 Perl,我想知道在下面的代码中是否有更好的等价于 map() 来生成一个包含四个整数(假 IP 地址)的列表:

map(int(rand(155) + 100), (0,0,0,0)) 

在 Python 中我会这样做

[int(random.randrange(100, 255)) for _ in range(4)] 

虽然我相当确定还有更好的方法来做到这一点。

请您参考如下方法:

IPv4 地址只是一个 32 位整数,所以我会使用

unpack('C4', pack('N' int(rand(2**32)))) 

(这不会将每个八位字节限制为 100..255,但这样做毫无意义。)

请注意,某些系统的 rand 的熵小于 32 位

>perl -V:randbits 
randbits='15'; 

在那些系统上,如果您使用 rand,您的代码将不可能返回一些 IP 地址(无论您使用什么技术)。在示例系统中,rand只能返回4,294,967,296个地址中的32,768个。

CPAN 上的库提供了更多熵的随机数生成器。