python - Perl 中的隐式循环

标签 python perl for-loop

我正在尝试学习 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 上的库提供了更多熵的随机数生成器。

关于python - Perl 中的隐式循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498884/

相关文章:

python - 为什么是一个包罗万象的尝试 :/except: not enough to catch an exception?

python - 在 python 中写入文件时分割内容错误

python - 如何终止使用 Subprocess.Popen 启动进程的函数并移至下一行代码?

regex - 让正则表达式尽可能保持匹配?

perl - 在 Perl 中实现函数式编程

python - 我如何在 NLTK 中使用 CRF?

regex - 为什么@+ 和@{^CAPTURE} 的长度不同?

java - 嵌套的 For 循环给出不正确的输出

javascript - Google map 主题是否有更好的代码结构?

java - 增强的 For 循环异常