gpt4 book ai didi

python - 如何理解将 IP 字符串转换为整数的函数式编程代码?

转载 作者:太空狗 更新时间:2023-10-30 00:23:37 25 4
gpt4 key购买 nike

在 python 讨论中,我看到了一个以函数式编程方式将 IP 字符串转换为整数的函数。这是 the Link .

该功能在一行中实现。

def ipnumber(ip):
return reduce(lambda sum, chunk: sum <<8 | chunk, map(int, ip.split(".")))

但是,我对函数式编程没有什么想法。谁能详细解释一下函数?我对“ map ”和“减少”有一些了解。但我不知道“|”是什么这里的“ block ”是指。

谢谢。

最佳答案

sumchunk 是传递给 reducelambda 函数的参数。 | 是二进制或运算符。

事情是这样的:

  • ip.split(".") 返回一个字符串列表,每个字符串对应一段虚线字符串 ("192.168.0.1" = > ["192", "168", "0", "1"];

  • map 将其第一个操作数应用于其第二个操作数的每个元素 (["192", "168", "0", "1"] => [192, 168, 0, 1]);

  • reduce 从列表中获取前两个参数并将 lambda 应用于它们;然后它使用 lambda 的结果和列表的下一个元素再次执行此操作;等等。

  • labmda 函数(当场定义的匿名函数)执行此操作:获取第一个参数,将其移动 8 位,然后将其与新 block 进行 OR 运算;因此,结果的计算方式如下:

    (((192<<8 | 168) << 8 | 0)<<8 | 1) = 192<<24 | 168<<16 | 0<<8 | 1

    这正是“点分形式”所代表的(它只是指示 32 位无符号整数的简写,这就是 IPv4 中的 IP - 你可以说它有点像用 base 256 表示它)

关于python - 如何理解将 IP 字符串转换为整数的函数式编程代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com