你学习 Python 的时候,用到舒服姿势了么?

你在学习和使用 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 指向的也是它。

发现了么?整个过程中,你就好像在玩一样,没有什么所谓的「学习的痛苦」。

你自己通过「发现问题——找到关键点——很想弄明白——搜索——结合自己的问题找到答案」,就把一个小知识点掌握了。

如果下次面试被问到这相关的问题,你的脑子马上就会浮现出来这两张当时令你困惑的图片:

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

那么你肯定能对着面试官滔滔不绝,整个思路也相当清晰。

学习的「舒服姿势」

在我看来,整个学习的过程中,更多的是自己「主动」起来,才能体会到那种高效,舒服。

也许有些事情别人可以手把手的教你操作,但这是有局限性的,而且自己也会显得很是被动,没有什么比自己通过阅读,通过探索,通过实践而掌握的技巧更让人舒服了。

我之前在公众号安利过不少好用的「工具」,有人问我说,你是如何发现那么些好用的工具的?我想说的是,如果你真的想知道它们,你就一定会发现它们的,只是时间的问题,因为这和你的「主动」想要高效有关。

比如我刚刚给你演示的这个可视化代码执行流程:

这玩意在这:

pythontutor.com

这也是之前我在查阅资料,翻博客,不经意间发现的。

另外,使用「图像具像化」也是我常用的「姿势」,我有时候遇到一些难题或者困惑,我会使用图像的方式把它们表达出来,相比于文字,可以很清晰的看到问题的关键点,降低了不少难度,并且解决完问题之后,过一阵子再看到类似的问题,还能够想到当初解决的思路,我想这可能是图像的记忆比较深刻。你下次遇到问题的时候,不妨试试这招。

还有关于搜索能力这个我就不多说了,之前也分享过不少技巧,你可以去公众号搜一下。

OK,以上就是小帅b今天给你带来的分享,希望你可以主动地通过工具的使用,阅读的习得,问题的具像,搜索的能力,找到你最「舒服的姿势」。

ps:公众号最近做迁移,没想到这过程中还给我整了点幺蛾子,所以留言还是得再等等了。哦对了,一直肝原创不容易呀,觉得对你有帮助的话,记得多多支持小帅b,能赞赏的赞赏,不能赞赏的转发一下,满满的动力呀,谢谢,爱你哟~那么我们下回见啦,peace!

(0)

相关推荐

  • 第118天:Python 之对象的比较与拷贝

    众所周知,Python 是一门面向对象语言,在 Python 的世界一切皆对象,那么我们如何判断两个对象是否是同一个对象呢. == 操作符和 is 相信大家对于这两个操作符都不陌生.具体来说就是 == ...

  • 教你一招 | Python: 函数参数魔法

    函数参数 在 Python 中,定义函数和调用函数都很简单,但如何定义函数参数和传递函数参数,则涉及到一些套路了.总的来说,Python 的函数参数主要分为以下几种: 必选参数 默认参数 可变参数 关 ...

  • 吐血整理的 Python 面试题,请务必收藏!

    来源:Python 技术「ID: pythonall」 年关将至,给年后准备跳槽的准备一份面试指南,希望大家在涨薪和成长的路上多一点指引! python2和python3区别? Python3 使用 ...

  • 一文搞懂Python装饰器

    一.前言 本不打算专门写文来讲装饰器的,但有不少粉丝问到了,自己查阅了一些网上的装饰器教程,发现讲的通俗易懂的不多,也有不少照搬的文章.所以我这里专门来讲一讲它. 个人在用的人工智能学习网站推荐给大家 ...

  • Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别

    ML岗位面试:10.11下午-上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点.python的可变不可变的数据类型.赋值浅拷贝深拷贝区别Interview:算法岗位面 ...

  • 可变对象与不可变对象

    前阵子我们聊了下函数的参数传递以及变量赋值的一些内容:关于函数参数传递,80%人都错了. 简单回顾下要点: 1. Python 中的变量不是装有对象的"容器",而是贴在对象上的&q ...

  • Python__init__()类构造方法

    在创建类时,我们可以手动添加一个__init__()方法,该方法是一个特殊的类实例方法,称为构造方法(或构造函数). 构造方法用于创建对象时使用,每当创建一个类的实例对象时,Python解释器都会自动 ...

  • 学习Python选择哪个版本好?基础入门!

    随着人工智能时代的到来,Python语言变得越来越火爆,成为当下非常重要的编程语言,那么现在学习Python选择哪个版本好呢?Python哪个发展方向好?我们一起来看看吧. 学习Python选择哪个版 ...

  • 学习Python对电脑配置要求高吗?小白必看!

    在学习Python之前,我们需要准备各种各样的学习工具,比如说电脑.而说起电脑,很多人会问:学习Python用什么电脑好?对配置有要求吗?我们来看看详细的介绍吧. 学习Python对于电脑硬件基本没有 ...

  • 学习Python用什么系统合适?推荐Linux!

    学习Python成为了很多人的首选,对于初学Python的小伙伴们来说,在开始学习的时候都会疑惑学习Python用什么系统好?其实在小编觉得刚开始入门Python不用太纠结选择系统的时间,稍微入门之后 ...

  • 如何学习Python爬虫?学习方法分享

    爬虫是Python的应用领域之一,它十分简单,学完基础知识后就可以做有关爬虫的事情,更是数据采集的利器,利用Python可以更快的提升对数据抓取的精准程度及速度,那么如何高效的学习Python爬虫技术 ...

  • 数学英语基础对学习Python重要吗?必看!

    学习Python技术成为很多人的选择,因为大家觉得Python是一门非常不错的编程语言,但是对于学习Python需要什么条件似乎大家都不明白,那么数学英语的基础对学习Python重要吗?我们来看看. ...

  • 学习python必会前端知识之HTML基本结构,不要慌教你高级方法

    学习python必会前端知识之HTML基本结构,不要慌教你高级方法

  • 学习python 正则表达式——与你同行!

    正则表达式定义   又称为规则表达式,是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个'规则',检查一个字符串是否与这种规则匹配来实现对字符的检索.过滤.匹配.替换.正则表达式 ...

  • 收藏,7个学习Python编程的最佳开源库!

    来源丨网络 1.learn-python3 这个存储库一共有19本Jupyter笔记本.它涵盖了字符串和条件之类的基础知识,然后讨论了面向对象编程,以及如何处理异常和一些Python标准库的特性等.每 ...

  • 学习Python需要掌握哪些基础?Python入门!

    学习Python的过程中,有很多知识是需要我们掌握的,这篇文章小编为大家整理了一些入门要点,希望对大家有所帮助. Python是否可以访问常见的数据库? 是的,Python可以访问各种常见的数据库,比 ...