编程学习网 > 编程语言 > Python > Python 竞赛题-Python 的函数是否很赖
2022
08-31

Python 竞赛题-Python 的函数是否很赖


今天看到 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教程欢迎持续关注编程学习网

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取