今天看到 5 个比较有趣的题目,来看看你能否全部答对,也丰富一下你的 Python 知识。
第 1 题:万物皆对象
猜下这段代码的输出
print(isinstance(object, type)) print(isinstance(type, object)) print(isinstance(type, type)) print(isinstance(object, object))
正确答案是:
>>> print(isinstance(object, type)) True >>> print(isinstance(type, object)) True >>> print(isinstance(type, type)) True >>> print(isinstance(object, object)) True >>>
这是因为 Python 的世界里,万物皆对象。所有类型,如 int、str 和 object 都是 type 类的实例,而 type 类本身也是 type 类的实例,因此在 Python 中一切都是对象。
第 2 题:sum 的结果
猜下这段代码的输出,是关于 sum 函数的:
print(sum("")) print(sum("", [])) print(sum("", {}))
正确答案是:
>>> print(sum("")) 0 >>> print(sum("", [])) [] >>> print(sum("", {})) {} >>>
要理解这个结果,我们先要知道 sum 函数是如何工作的:
sum(iterable,/, start = 0)
sum 从左到右开始对可迭代的项目进行求和,并返回求和的结果。但是当 iterable 为空时,返回 start 的值。由于 "" 是空字符串,因此总是返回 start 的值,start 的值如果不传入,那就会返回 start 的默认值 0.
第 3 题:Python 的函数懒吗?
猜下这段代码的输出:
class follow: def func(self): return fol() a = follow() fol= int print(a.func())
正确结果是 0 :
>>> class follow: ... def func(self): ... return fol() ... >>> a = follow() >>> fol = int >>> a.func() 0 >>>
发生这种情况是因为 python 函数中的代码仅在调用时执行。这意味着只有在我们实际调用该方法时才会检查变量是否定义,并绑定变量的值。因此,在上面的例子中,在方法定义期间,Python 允许我们引用尚未定义的类 fol。但是,在调用的时候,Python 会从外部范围绑定名称 fol = int,这意味着函数方法将返回一个新创建的 int 实例,是不是相当的懒啊?
第 4 题:会不会报错
猜一下这段代码的输出:
print(sum([a.imag for a in [0,5,10e9,float('inf'),float('nan')]]))
正确的结果是 0.0
你可能会认为这会出错,对吧?它不会。这是因为 Python 中的所有数值类型,如 int、float 等;从基础对象类继承,它们都返回包括 Infinity 和 NaN 在内的实部和虚部。
注:imag 表示负数的虚部,比如 z = 1 + 2j,那 imag 就是 2。
第 5 题:这符合数学常识吗:
猜一下结果:
a=(1 << 53)+1 print(a+1.0 > a)
正确的结果是 False
演算过程如下:
>>> 1 << 53 9007199254740992 >>> _ + 1 9007199254740993 >>> _ + 1.0 9007199254740992.0 >>>
你可能会问,为什么加 1 的结果还变小了呢?
首先,由于任意精度算术(长算术)的反直觉行为,Python 支持 long 类型的非常大的整数,但是 Python 中浮点精度的限制是有限的。
数字是 2⁵³ 1 = 9007199254740993
其次是浮点精度限制,这意味着它不能完全表示为 Python 浮点数,因此,为了执行 + 1.0,python 将 a 转换为浮点数,将其四舍五入为 Python 可以轻松表示的 9007199254740992.0,然后将其添加 1.0。但由于相同的表示限制,它将其设置回 9007199254740992.0。
第三是由于比较规则。与其他语言不同,Python 不会在 float 与 int 比较时抛出错误,也不会尝试将两个操作数转换为相同的类型。相反,他们比较实际的数值。并且因为 9007199254740992.0 低于 9007199254740993,所以它打印 False。
以上就是“Python 竞赛题-Python 的函数是否很赖?”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/9989/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料