教老婆 Python
教老婆学 Python
故事开始是源于她想学习 Python,发了我一篇文章。文章内容大概是使用 jieba 对一篇文章进行分词,然后做一些词频统计一类的工作。文章链接就不贴出来了,我当时看了一眼说写这文章的应该不是专门写代码的。
为什么这么说?
因为文章里变量命名上与 Python 本身的约定的小写下划线的命名方式不同。用的还是大写开头加下划线分隔的形式。
写代码也要有这种规范吗?
是的,语言本身会有一些社区规范,做开发基本也是团队协作,所以会有这种约定的写法。一般来讲会有首字母大写区分单词还有就是单词都小写使用下划线分隔的形式。这文章里两种混用了。我在哪种语言里都没见过这种命名方式。
后面就是安装 Jupyter 然后演示文章内容。问题就更多了
一些问题
为什么是 localhost,我是一定可以访问这个地址吗?我在别的电脑能访问这个地址吗?
localhost 也是一个习惯性的用法,它指向的是一个你电脑的本地 IP,具体就是 127.0.0.1,所以当你启动 Jupyter 之后,直接访问这个地址就行(实际上浏览器会自动打开)。所以你换一台电脑也是访问这个地址,但可能数据就不一样了。你如果与程序员打交道,你会经常听到一个词,本地环境,大部分指的就是这个地址。
为什么会有 loop 这种东西?
这个问题真的是问倒我了,毕竟我们上学的时候就学这个东西怎么用。硬要掰扯出一个理由的话,对程序来讲,有一类数据是会逻辑上连续存在于内存上,就像一个数轴 0 1 2 这样去读数据。所以为了访问这样的数据,我们需要一种类似的结构去重复类似的操作。
以上是当时猜的。但后面越想越觉得这个回答有问题,因果倒置了。应该是一个更高效处理类似的逻辑的控制结构。
Looping allows a programmer to execute a block of code multiple times. This can be useful for performing repetitive tasks, such as iterating through a list of items or running a specific process a certain number of times. Looping can also be used to control the flow of a program, such as in a while loop, where a certain condition must be met before the loop will continue to execute. Overall, looping is a powerful tool that allows for efficient and effective program execution.
以上是来自 ChatGPT 的回答。
我是不是在这里直接敲 pip install 命令就好了?
这个问题也很有意思,她问这个问题的时候,我已经安装好了 Jupyter 然后在它的页面里面演示相关的语法一类的东西。但这时候还需要安装如 pandas 一类的 library,于是我切换回命令行的环境去敲命令。此时就有了上面的问题。
我的回答是,Python 也是软件的一种,写代码只是把符合规范的指令告诉这个软件怎么做。这个网页的页面是 Python 的 runtime,而 pip install 是系统的命令,相当于给 Python 这个软件安装插件。所以你必须退回到原来系统环境去给软件安装插件。
我在想,使用电脑和使用电脑进行开发,同样是面对屏幕打字,但差距也是挺大的。
那什么是 runtime?
runtime 直译过来是运行时环境。就是所谓代码的执行环境。根据某种语法写出来的代码就是在这样的环境里面一句接着一句来执行。pip install 这些呢就不是代码,所以它就不能在 runtime 里面执行。
为什么有时候不用 print 就可以输出这个结果
这个问题是在演示 Jupyter 时候问的,如果你在输入一个变量或者一个数字,Jupyter 也能输出其内容。但在最开始的文章里面,也有用到 print 这个函数。
我的回答是,在 Jupyter 的环境里面呢,它提供了一个很方便的特性,就是你输入一个变量或者是一个算式,它直接就给你输出这个结果了。但在实际程序的执行里面,程序是不会给你看到这些信息的,如果你需要看到某个变量的值,你就需要 print 出来。当然 print 只是其中一种将变量的值显示出来的办法。
但往深的讲,这里还涉及到 statement 和 expression 的区别。我之前用 ipython 时的确是留意到它不需要 print 就能打印出结果。但其实它是把 expression 的非 None 结果都显示出来了。另外,它如果 print 又会是另一种形式
一些想法
这个故事实际上发生在 3 月底,当时想着写下来记录下的,结果拖着拖着就到了 6 月底了。老婆的学习也随着海拉鲁新旅程的到来而暂停。这就是不是一家人不进一家门吗?
写这篇文章时我在想,我还没有到那种向非专业的人普及专业问题能简单直接说出来的程度。回想这些问题的时候,总有一种需要查漏补缺的危机感。完全要做跨行学习的话,难度的确是大,有些我们认为属于 1 + 1 = 2 的知识可能还需要额外科普。但在科普过程中,我发现这些 1 + 1 = 2 也有可能先入为主。像别人科普真是一个学习的好方法。
另外,最近看吴恩达的机器学习视频,在里面他会用 Jupyter 去演示相关算法。他还认真说我还挺喜欢 Jupyter 的,经常用。啊真好啊。感慨万千,身处行业顶端的人都会去做这种工作,会去做这些面向小白的科普,十分佩服。
知识需要沉淀,但知识也要与时俱进,愿你我都在终身学习路上。