我正在分析代码,因为我有一些空闲时间,并且想到可以学到新东西!这是我发现的Binary到Denary转换器代码。 但是我几乎在过去的2-3天里一直在脑子里蹦蹦跳跳,但是我绝对不能把自己带到这个声明/功能/线的作用或意味着什么?
lambda b: str(int(b, 2))
我认为(b,2)中的'b'表示二进制?
我研究并发现lambda是一个'调用'匿名函数或没有名字的函数的函数。这是对的吗?
'b:'是什么意思?那也是Binary或lambda中的'子名'吗?
还有什么呢
str(int(b, 2))
意思?我知道这是将二进制转换为否定的代码,但它是如何工作的?
我很好奇地发现!希望有人能够帮助我解决这个问题!
答案 0 :(得分:2)
b
是lambda
函数的参数:
lambda b: ....
:
之前的第一部分定义了匿名函数的参数,这个函数只定义b
就像函数签名一样:
def binary_to_int(b):
# ...
它本可以给出另一个名字:
lambda anothername: int(anothername, 2)
它绑定到您传递给此lambda的参数:
binary_to_int = lambda b: int(b, 2)
result = binary_to_int('010101') # so b is bound to '010101'
该函数返回函数int(b, 2)
的结果,该函数将字符串第一个参数解释为基数2(二进制)中的整数:
如果 x 不是数字或者是否给出了base,那么 x 必须是一个字符串或Unicode对象,表示radix base中的整数文字。可选地,文字可以在
+
或-
之前(其间没有空格)并且由空格包围。 base-n文字由数字0到n-1组成,a
到z
(或A
到Z
)的值为10到35.默认< em> base 为10.允许的值为0和2-36。 Base-2,-8和-16文字可以选择以0b/0B
,0o/0O/0
或0x/0X
作为前缀,与代码中的整数文字一样。基数0表示将字符串完全解释为整数字面值,因此实际基数为2,8,10或16。
答案 1 :(得分:1)
这是关于lambdas的一个很好的问题:Why are Python lambdas useful?
int(x,base = 10)
将数字或字符串x转换为整数,或返回 如果没有给出参数,则为0。如果x是一个数字,它可以是一个普通的 整数,长整数或浮点数。如果x是浮动的 点,转换截断为零。如果论证是 在整数范围之外,该函数返回一个长对象。
如果x不是数字或者给定了base,则x必须是字符串或 Unicode对象,表示基数中的整数文字。 可选地,文字可以在+或 - 之前(没有空格) 之间)和空白包围。 base-n文字由 数字0到n-1,a到z(或A到Z)的值为10到35。 默认基数为10.允许的值为0和2-36。 Base-2,-8, 和-16文字可以选择前缀为0b / 0B,0o / 0O / 0或 0x / 0X,与代码中的整数文字一样。基数0表示解释 字符串完全是一个整数文字,所以实际的基数是2,8, 10或16。
答案 2 :(得分:1)
b
是您的匿名lambda
函数的参数。但是,根据匿名函数的作用来判断,b
应该是二进制字符串。
我认为理解匿名函数的最简单方法是通过一个例子。
>>> b = '101'
>>> int(b, 2) # converts a binary string to base-10.
5
>>> str(int(b, 2))
'5'
匿名函数将二进制字符串转换为base-10 integer,然后将该整数转换回字符串。要实际使用匿名函数,您可以执行以下操作:
>>> fn = lambda b: str(int(b, 2))
>>> fn('10001')
'17'
或以非匿名形式:
>>> def convertFromBinary(b): return str(int(b, 2))
>>> convertFromBinary('10001')
'17'