在这种情况下,这个功能真的有用吗?

时间:2014-01-15 18:55:39

标签: python lambda

我正在分析代码,因为我有一些空闲时间,并且想到可以学到新东西!这是我发现的Binary到Denary转换器代码。 但是我几乎在过去的2-3天里一直在脑子里蹦蹦跳跳,但是我绝对不能把自己带到这个声明/功能/线的作用或意味着什么?

lambda b: str(int(b, 2))

我认为(b,2)中的'b'表示二进制?

我研究并发现lambda是一个'调用'匿名函数或没有名字的函数的函数。这是对的吗?

'b:'是什么意思?那也是Binary或lambda中的'子名'吗?

还有什么呢

str(int(b, 2))

意思?我知道这是将二进制转换为否定的代码,但它是如何工作的?

我很好奇地发现!希望有人能够帮助我解决这个问题!

3 个答案:

答案 0 :(得分:2)

blambda函数的参数

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组成,az(或AZ)的值为10到35.默认< em> base 为10.允许的值为0和2-36。 Base-2,-8和-16文字可以选择以0b/0B0o/0O/00x/0X作为前缀,与代码中的整数文字一样。基数0表示将字符串完全解释为整数字面值,因此实际基数为2,8,10或16。

答案 1 :(得分:1)

这是关于lambdas的一个很好的问题:Why are Python lambdas useful?

int() from the docs:

  

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'