2014-01-15 48 views
1

我正在分析代码,因为我有一些空闲时间,并认为可以学到新的东西!这是从我找到的二进制到Denary转换器代码。 但是我几乎在过去的2-3天里一直在脑海中蹦蹦跳跳,但是我绝对不能让自己置身于这种说法/功能/行的意义上?在这种情况下,这个函数实际上做了什么?

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

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

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

'b:'是什么意思?这是否也是二进制或lambda内的'子名'?

而且什么

str(int(b, 2)) 

是什么意思?我知道那是将二进制转换为denary的代码,但它是如何工作的?

我很想知道!希望有人能帮我解决这个问题!

回答

1

这里是关于lambda表达式一个很大的问题:Why are Python lambdas useful?

int() from the docs:

INT(X,碱= 10)

将数字转换或串x为整数,或返回 0如果没有给出参数。如果x是一个数字,它可以是一个普通的整数,一个长整数或一个浮点数。如果x浮动 点,则转换将截断为零。如果参数是整数范围外的 ,则该函数会返回一个长对象。

如果x不是数字或给定了基数,则x必须是一个字符串或 Unicode对象,表示以基数为基数的整数文字。 或者,文字可以前面加上+或 - (在 之间没有空格)并且被空白包围。基数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。

+0

确实,在该代码具有2的基础是什么意思? – PythonBeginner

+0

是的,它会在基地2.该电话将它转换为基数10. – emh

+0

基地10意味着denary ...非常感谢你!!!!!!!! – PythonBeginner

2

b参数lambda功能:

lambda b: .... 

:前第一部分定义为匿名函数的参数,这个定义只是b就像一个函数签名会:

def binary_to_int(b): 
    # ... 

它本来可以被赋予别的名字:

lambda anothername: int(anothername, 2) 

它势必传递给此拉姆达参数:

binary_to_int = lambda b: int(b, 2) 
result = binary_to_int('010101') # so b is bound to '010101' 

该函数返回功能int(b, 2),其解释的字符串的第一个参数为在基体2的整数的结果(二进制):

如果X不是数字或如果基地给定,然后X必须是字符串或Unicode OBJ ect表示以基数为基数的整数字面量。或者,文字前面可以有+-(两者之间没有空格)并且用空格包围。基数n文字由数字0至n-1组成,其中az(或AZ)具有值10至35.默认基数为10.允许值为0和2-36。基数2,-8和-16文字可以有选择地以0b/0B,0o/0O/00x/0X作为前缀,与代码中的整数文字一样。基0意味着精确地解释字符串作为文字的整数,以使实际的基础是2,8,10或16

+0

此答案已解答我的所有问题!非常非常感谢你!我现在可以冷静下来! @Martijn Pieters – PythonBeginner

+0

@PythonBeginner:对不起,你可以只标记*一个答案,而不是全部。很高兴你找到了所有的答案,虽然有帮助! –

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' 

或DE-匿名方式:

>>> def convertFromBinary(b): return str(int(b, 2)) 
>>> convertFromBinary('10001') 
'17' 
+0

所以我说“b”的意思是Binary?或类似的概念? – PythonBeginner

+0

@PythonBeginner:'b'不代表二进制,'b'只是传递给匿名函数的参数的名称。但是,函数期望'b''s * value *将是一个二进制字符串。 – mdml

+0

Ahhh so'b'是争论的名字? – PythonBeginner