파이썬에서 0xbin()이 False를 반환하는 이유는 무엇입니까?
명령 입력0xbin()
False를 반환합니다.
>>> 0xbin()
False
왜 그런 일이 일어날까요?이 구문은 아무런 의미가 없어야 합니다.함수는 0으로 시작할 수 없으며 16진수에 "i"와 "n"이 없으며 bin 함수에는 몇 가지 인수가 있어야 합니다.
2023 업데이트: 이것은 곧 구문 오류가 될 것으로 예상됩니다.
파이썬이 해석하는 것 같습니다.0xbin()
~하듯이0xb in ()
의미는 빈 튜플에서 11입니다.답은 아니오입니다, 그러므로.False
.
코드를 분해하면 Yself의 답을 볼 수 있습니다. Yself는 다음과 같이 말합니다.0xbin()
로 해석됩니다.0xb in ()
확인됨:
>>> import dis
>>> dis.dis('0xbin()')
1 0 LOAD_CONST 0 (11)
2 BUILD_TUPLE 0
4 COMPARE_OP 6 (in)
6 RETURN_VALUE
Python 자체 토큰화기를 사용하여 확인할 수 있습니다!
import tokenize
import io
line = b'0xbin()'
print(' '.join(token.string for token in tokenize.tokenize(io.BytesIO(line).readline) if token.type!=59))
이렇게 하면 문자열의 토큰이 공백으로 구분되어 인쇄됩니다.이 경우 결과는 다음과 같습니다.
0xb in ( )
즉, 숫자 11이 False를 반환합니다.0xb
)가 빈 튜플에 없습니다(()
).
(로맨 오다이스키가 사용을 제안해 준 것에 감사드립니다.tokenize
댓글에!)
편집: 코드를 조금 더 자세히 설명하자면:tokenize
함수는 약간 이상한 형식의 입력을 기대합니다.io.BytesIO(line).readline
일련의 바이트를 어떤 것으로 바꾸는 함수입니다.tokenize
읽을 수 있습니다. tokenize
그런 다음 토큰화하고 일련의 데이터를 반환합니다.namedtuple
s; 우리는 각각을 나타내는 문자열을 가져다가 공간과 함께 결합합니다.그type != 59
부품은 시작 부분에 표시되는 인코딩 지정자를 무시하는 데 사용됩니다.
AST 모듈을 사용하여 식의 추상 구문 트리를 가져올 수 있습니다.
>>> import ast
>>> m = ast.parse('0xbin()')
>>> ast.dump(m)
'Module(
body=[Expr(
value=Compare(left=Num(n=11),
ops=[In()],
comparators=[Tuple(elts=[],
ctx=Load())
]
))])'
표현을 해석하는 방법은 추상 문법을 참조하십시오. buttl;dr:Num(n=11)
그것은0xb
부분, 그리고Tuple(elts=[], ...)
함수 호출이 아닌 빈 튜플에 대한 힌트입니다.
언급URL : https://stackoverflow.com/questions/51521158/in-python-why-does-0xbin-return-false
'sourcetip' 카테고리의 다른 글
STRING_AGG에서 DISTINCT 값 생성 (0) | 2023.07.02 |
---|---|
node_modules 폴더에서 스크립트 빌드 오류를 가져오는 중입니다. (0) | 2023.07.02 |
Oracle : LEFT JOIN 사용 시 구체화된 보기가 작동하지 않음 (0) | 2023.07.02 |
mongoDB에 지리공간 정보를 저장하는 방법 (0) | 2023.07.02 |
R(루프)에서 리스트에 요소를 추가하는 방법 (0) | 2023.07.02 |