< 返回技术文档列表

怎么理解Python使用行为

发布时间:2021-11-07 00:47:08⊙投诉举报

这篇文章主要介绍“怎么理解Python使用行为”,在日常操作中,相信很多人在怎么理解Python使用行为问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Python使用行为”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Python中的所有内容都是一个对象-包括数字。 这很重要,因为数字-5 ;  256是在运行时分配的,访问它们会返回对该对象的引用,因此使您可以永久更改这些数字的值(在Python实例中)。  现在我还不知道它有多少实际用途,但确实很有趣。

热身

您需要一些基本的C知识和ctypes库。 首先,更改一个相对未使用的数字的值,例如31:

>>> import ctypes >>> def changeNum(oldNum, newNum):   ... ctypes.cast(id(oldNum), ctypes.POINTER(ctypes.c_int))[6] = newNum >>> changeNum(31, 100)  # changes 31 to 100 >>> 31100

让我们尝试一些基本的算法:

>>> 31 + 31200  >>> 31 ** 0.510.0  >>> 31 ** 210000

此输出使我感到非常不舒服,如果您也有这种感觉,对即将发生的事情感到抱歉。 现在,让我们真正运行该手套:

>>> 31 == 100  True  >>> changeNum(100, 200)  >>> 31100  >>> 100200  >>> 31 == 100  False  >>> 31 == 200  False  >>> 31 * 2 == 200  True>>> 31 * 2 == 100  True

更改值后,它就消失了。 您可以尝试找回原始值,但已将其删除。

>>> changeNum(100, 500 // 5)  >>> 100200  >>> changeNum(100, 50 * 2)  >>> 100200

绝对混乱

如果您尚未意识到,则对象本身会进行全局更改。 这意味着与该数字的任何交互都是"未定义的"。 让我们看看行为在for循环中是如何"定义"的:

>>> changeNum(5, 100)  >>> for i in range(5):  ... print(i)  ...012  ...99

相当标准; 作为一个不一致的数字系统可以得到的标准。 变得很奇怪:如果我更改5的值,则5在技术上不再存在。 这会导致基本操作中非常奇怪的交互:

>>> changeNum(5, 20) >>> 5 - 7 == 13 True >>> 5 - 7 - 8 == 5 True

如果您真的想伤害您的大脑,请弄乱另外几个数字并做一些数学运算:

>>> changeNum(29, 100) >>> changeNum(5, 20) >>> changeNum(120, 200) >>> 5 + 9100 >>> 5 + 9 + 5200 >>> 5 + 9 + 5 + 5220 >>> (5 + 9) * 52000

您还可以制作一个非常令人困惑的无限while循环:

>>> while 5 // 4 == 5: ... pass ... # Do loop stuff

崩溃的Python

我们现在去钓大鱼吧; 我们已经解决了其他不重要的数字,但是如果我们改变1会发生什么?

>>> changeNum(1, 2) >>> 1 Segmentation fault (core dumped)

它崩溃了。 这不足为奇,因为1是非常重要的计算中使用的非常重要的数字。 我不确定更改1是否会影响True,但如果确实如此,我会想像一下后果。

到此,关于“怎么理解Python使用行为”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注血鸟云网站,小编会继续努力为大家带来更多实用的文章!


/template/Home/Zkeys/PC/Static