是否有 Python 内置方法来检查整数是否为二进制格式?

Is there a Python built-in method that checks if an integer is in binary format or not?

我知道实现我自己的背后的逻辑,但是有一个 内置 Python 函数接受一个整数,如果是 returns 则为 True写成二进制形式?

例如,is_binary(0b1010) 会 return Trueis_binary(12) 会 return False.

不,因为 0b1010 被 'compiler' 转换为与 10 相同的表示形式,这当然发生在它被传递给函数之前很久。

我们可以通过调查生成的代码来确认这一点。

import dis

def binary():
    a = 0b1010

def base_10():
    a = 10

dis.dis(binary)
print()
dis.dis(base_10)

产出

 17           0 LOAD_CONST               1 (10)   # <-- Same represntation here
              2 STORE_FAST               0 (a)
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE

 20           0 LOAD_CONST               1 (10)   # <-- as here
              2 STORE_FAST               0 (a)
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE

如果它对你来说那么重要,你将不得不实施某种 AST parser,我 假设 将能够在它被执行之前获取二进制文字已转换。

如果你真的需要这样的功能并且不关心性能,你可以标记源:

scenox@Mac ~ % echo 'print(0b1010)' | python3 -m tokenize
1,0-1,5:            NAME           'print'        
1,5-1,6:            OP             '('            
1,6-1,12:           NUMBER         '0b1010'       
1,12-1,13:          OP             ')'            
1,13-1,14:          NEWLINE        '\n'           
2,0-2,0:            ENDMARKER      ''   

所以你可以这样做:

g = tokenize(BytesIO(somestring.encode('utf-8')).readline)  # tokenize the string
for toknum, tokval, _, _, _ in g:
    if toknum == NUMBER and tokval.startswith('0b'):
    ...