本帖最后由 喝酸奶不舔盖 于 2024-7-24 15:08 编辑
你在学习和使用 Python 的时候,可能会遇到这么些情况: 刚学 Python 语句的时候,不知道它的运行原理是怎样的?
报错了一顿重启,能跑就行?
学习知识点的时候,没有「做好姿势」? 要不我们来模拟一下,在学习一个 Python 知识点的过程中,怎么样才能让你觉得更好玩,或者说怎么样的学习姿势才能让你舒服点? 请对号入座,走起! 比如,你在写函数、调用函数的时候,是不是在给函数传递参数的时总是那么的「理所当然」,可有时候又会觉得「不可思议」? 举一个简单的例子:像这样一个简单的函数调用:
你觉得此刻输出的结果是多少? 答案是 1 ,你(假设你刚学 Python 不久)可能会感到困惑。 这不是调用了 add 方法,给他丫的加一了么?结果不应该是 2 吗? 你先别急,我们再来看看这个:
你觉得此刻输出的结果又是多少? 经过上次的「经验」,我猜你此时认为输出结果就是 [1, 2, 3],但不好意思,这次输出的结果是 [1, 2, 3, 6]。 想不到吧? 我想你在学习 Python 的过程中,像以上出现类似的困惑还有很多很多... 那如果现在把代码执行的每个步骤都清晰地、可视化地给你看清楚,又会是一种什么样的效果呢? 我们不妨来试试第一段代码:
从第一行开始运行,我们定义了一个名为 add 的函数,add 函数定义了一个参数 x:
接着执行 a=1, 现在内存开辟了一个空间,存放对象 1,变量 a 指向了对象 1:
下一步就是调用 add(a) 方法了:
add 方法中执行了 x += 1 操作,此时方法中 x 指向对象 2:
那我们现在 print(a), a 还是指向 1,所以结果是 1。
我们再来看第二段代码:
代码看似差不多,只不过这里是把参数的数据类型换成了列表。 从第一行开始运行,我们定义了一个 add 函数,add 函数定义了一个参数 x:
接着执行 a = [1, 2, 3],现在内存开辟了一个空间,存放对象 [1,2,3],变量 a 指向了这个 list 对象:
下一步就是调用 add(a) 方法了 ( 此时 x 指向了 list?):
add 方法中执行了append 操作,list 变成了 [1,2,3,6]:
可以看到现在 a 指向的是对象 [1,2,3,6],所以 print(a) 输出结果就是 [1,2,3,6]。 嗯,你看到区别了。为嘛?当参数是 1 的时候,调用 add 方法是这样的:
而当参数是列表时,调用 add 方法是这样的:
你很想知道为什么会这样,于是开始搜索了一波数据类型的区别:
接着你看到了这玩意:
你发现 Number 是不可变数据,List 是可变数据。 通过搜索可变类型和不可变类型的区别,你慢慢的就明白了: 因为 Number 是不可变的,所以你开始执行 a = 1 的时候,开辟出来的内存用来存放对象 1 ,由于这里的 1 是不可变的,所以在调用 add 方法时,就又会开辟一个新的空间来创造新的内存地址给 x 引用。
而 List 是可变的,当调用 add 方法时,不需要再开辟新的内存空间了,x 可以直接指向 list,此时 x 做了 append 操作,list 变成了 [1,2,3,6],a 指向的也是它。 发现了么?整个过程中,你就好像在玩一样,没有什么所谓的「学习的痛苦」。 你自己通过「发现问题——找到关键点——很想弄明白——搜索——结合自己的问题找到答案」,就把一个小知识点掌握了。 如果下次面试被问到这相关的问题,你的脑子马上就会浮现出来这两张当时令你困惑的图片:
那么你肯定能对着面试官滔滔不绝,整个思路也相当清晰。 学习的「舒服姿势」在我看来,整个学习的过程中,更多的是自己「主动」起来,才能体会到那种高效,舒服。 也许有些事情别人可以手把手的教你操作,但这是有局限性的,而且自己也会显得很是被动,没有什么比自己通过阅读,通过探索,通过实践而掌握的技巧更让人舒服了。 我之前在公众号安利过不少好用的「工具」,有人问我说,你是如何发现那么些好用的工具的?我想说的是,如果你真的想知道它们,你就一定会发现它们的,只是时间的问题,因为这和你的「主动」想要高效有关。 比如我刚刚给你演示的这个可视化代码执行流程:
这玩意在这: http://pythontutor.com 这也是之前我在查阅资料,翻博客,不经意间发现的。 另外,使用「图像具像化」也是我常用的「姿势」,我有时候遇到一些难题或者困惑,我会使用图像的方式把它们表达出来,相比于文字,可以很清晰的看到问题的关键点,降低了不少难度,并且解决完问题之后,过一阵子再看到类似的问题,还能够想到当初解决的思路,我想这可能是图像的记忆比较深刻。你下次遇到问题的时候,不妨试试这招。 OK,以上就是小帅b今天给你带来的分享,希望你可以主动地通过工具的使用,阅读的习得,问题的具像,搜索的能力,找到你最「用到最舒适的方法了」。 文章源自:「学习Python的正确姿势」
|