안녕하세요, 저는 Zheng 형제입니다. Python은 시작하기 쉽지만 마스터하기는 어렵습니다. 다음 10가지 질문은 매우 흥미롭고 어려울 수 있습니다.
문제가 먼저 주어지고, 답은 마지막에 나옵니다. 먼저 종이를 받아 답을 적고 마지막에 확인하는 것이 좋습니다.
다음 코드의 출력을 작성하세요.
class A: def function(self): return A() a = A() A = int print(a.function())
>>> round(7 / 2) >>> round(3 / 2) >>> round(5 / 2)
>>> isinstance(type, object) >>> isinstance(object, type) >>> isinstance(object, object) >>> isinstance(type, type)
>>> any([]) >>> all([])
class A: answer = 42 def __init__(self): self.answer = 21 self.__add__ = lambda x, y: x.answer + y def __add__(self, y): return self.answer - y print(A() + 5)
>>> sum("") >>> sum("", []) >>> sum("", {})
>>> sum([ el.imag for el in [ 0, 5, 10e9, float('inf'), float('nan') ] ])
.
Rounding>>> "this is a very long string" * (-1)
3
.max(-0.0, 0.0)
Python에서는 모든 것이 개체이므로 개체에 대한 모든 인스턴스 검사는 True를 반환합니다.
>>> x = (1 << 53) + 1 >>> x + 1.0 > x
class A: def function(self): return A() a = A() A = int print(a.function())
Empty boolean
>>> round(7/2) 4 >>> round(3/2) 2 >>> round(5/2) 2
인수가 빈 목록인 경우 모든 결과는 약간 예상치 못한 결과입니다. 그러나 검사 논리를 이해하고 나면 의미가 있습니다.
Python의 논리 연산자는 게으르다. any의 알고리즘은 처음으로 true로 나타나는 요소를 찾는 것입니다. 요소가 발견되지 않으면 False를 반환합니다. 비어 있으므로 어떤 요소도 true가 될 수 없으므로 any([])는 False를 반환합니다.
클래스 내부 함수 우선순위
>>> isinstance(type, object) True >>> isinstance(object, type) True >>> isinstance(object, object) True >>> isinstance(type, type) True >>>
올바른 결과는 16:
.
Sumisinstance(Anything, object) #=> True。
>>> type(1) <class 'int'> >>> type(int) <class 'type'> >>> type(type) <class 'type'> >>>
예상치 못한 속성
>>> any([]) False >>> all([]) True >>> any([True,False]) True >>> all([True,False]) False >>>
위 코드에는 imag 속성이 있는데 전혀 정의하지 않았으며 실행시 오류가 보고되지 않았습니다. 무슨 일인가요?
이것은 에 있는 모든 숫자 유형 때문입니다. Python(int, real, float)은 모두 기본 객체 클래스에서 상속되며 모두 실수 및 이미지 속성을 지원하고 각각 실수 부분과 허수 부분을 반환합니다. 여기에는 Infinity와 NaN도 포함됩니다.
>>> "this is a very long string" * (-1) '' >>>
正确的结果是 '',所有的负数倍的字符串,都当作 0 倍,返回 ''。
max(-0.0, 0.0)
为什么会这样?出现这种情况是由于两个原因。负零和零在 Python 中被视为相等。max 的逻辑是,如果多个最大值,返回遇到的第一个。因此 max 函数返回第一次出现的零,它恰好是负数。
>>> x = (1 << 53) + 1 >>> x + 1.0 > x False
正确的结果是 False,这违反了数学规则啊,为什么呢?
这种违反直觉的行为归咎于三件事:长算术、浮点精度限制和数值比较。
Python 可以支持非常大的整数,如果隐式超过限制则切换计算模式,但 Python 中的浮点精度是有限的。
2⁵³ + 1 = 9007199254740993
是不能完全表示为 Python 浮点数的最小整数。因此,为了执行加 1.0,Python 将 9007199254740993 转换为 float,将其四舍五入为 Python 可以表示的 9007199254740992.0,然后向其添加 1.0,但由于相同的表示限制,它将其设置回 9007199254740992.0:
>>> float(9007199254740993) 9007199254740992.0 >>> 9007199254740992.0 + 1.0 9007199254740992.0 >>>
此外 Python 在 float 与 int 比较时并不会抛出错误,也不会尝试将两个操作数转换为相同的类型。相反,他们比较实际的数值。因为 9007199254740992.0 比 9007199254740993 小,因此 Python 返回 False。
위 내용은 와서 다음 10가지 Python 질문에 도전해 보세요. 하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!