四方python小讲堂 - 第二期(什么是解释型语言?变量的小知识)
本帖最后由 zhanary 于 2021-5-10 21:13 编辑大家好呀,我是四方,又见面了。第二期新鲜出炉,本鸽子还算及时没有咕咕咕咕。以后也会尽量保证周更,等不及的同学可以先赶超进度往后学,然后跟我的进度复习hhh
之前没看过第一期的朋友可以先去看下,第一期主要讲的是为什么推荐学python、一些安装小技巧和终端下的常用指令,建议大家复习一下终端下的常用指令哦(据我所知阿里一面考过这个)
那么本期的话主要是讲了编译型语言和解释型语言的区别、以及关于变量的小知识
目前我们仍旧在书中第一部分基础知识(我估计第一部分能讲一年,毕竟第二部分就是项目实战了),我们开始进入到第二章变量和简单数据类型了,今天带大家过掉前两个小节,34 - 37页的内容,虽然东西少,但是前期基础一定要深刻的理解才行哦,后面会越学越快的。
进入到正式的单元中,我们就按照书里给的逻辑走,话不多说我们开冲!{:301_998:}
https://static.52pojie.cn/static/image/hrline/5.gif
2.1 运行 hello_world.py 时发生的情况
这一节主要是跟大家描述了一下当我们运行一个python文件时,电脑都做了什么。
这里给大家补充一个知识,python是一门解释型语言,对应的是编译型语言,大家不要被专业术语整蒙圈,其实这个理解起来很简单的。首先我们知道电脑是不能直接明白我们人类的语言的,电脑有自己懂得的机器语言,机器语言呢本质上就是电信号的0、1变换(0就是不通电,1就是通电)所以以前有一个梗是这样的:
“
很久以前,那还是我用win98的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介绍了一个高手来帮我修电脑。
他看了一下电脑,问我有没有98的盘,我说没有。
他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。
他把电话线空着的一头接在电脑的一个插孔内,然后进入了dos,然后就开始在电话上不停的按着键,他按键的速度非常快,但是只按0,1两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键,我渐渐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。
醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在98里面调试,过了一会儿,他说,你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98系统,我后来问我朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯....
”(真正的大佬键盘只有两个按键,0和1){:301_1001:}
扯远了,我们写代码的目的是为了使唤电脑给我们工作,但是语言不通怎么办呢,这时候我们就需要一个翻译来沟通。
编译型语言呢,像是传统的文本翻译员。他等我们把一整篇文章(代码)都写完了,发给翻译大佬(编译器),他会帮我们翻译成一篇机器语言的文章。那我们下次想再使唤电脑做同样的事的时候,可以直接拿翻译好的机器语言给电脑看,就不需要再请翻译了,所以非常的省钱(程序执行效率高)。但是呢他也有自己的缺点,当我们要在不同的地方(linux系统下或者windows系统下)进行翻译,他们的口音是不一样的(不同操作系统的二进制文件不同,二进制就是0和1)那么这时候我们拿着早就翻译好的机器语言,就傻眼了,运气好能被机器看懂,运气不好就得重新请翻译(重新编译对应版本),所以编译型语言的跨平台性差一些。
编译型语言主要有:C、C艹
那对应的解释型语言呢,更像是一个同声传译,我们每说一句(输入一句代码),他就立刻翻译一句机器语言(现有的解释型语言都是采用逐行解释一句、执行一句的模式)。那么相比传统的文本翻译,同声传译显然是贵啊(程序执行效率低)。但是呢他也有自己的好处,比如我们要在不同的地方(linux系统下或者windows系统下)进行翻译,那有不同的口音需求时,同声传译就可以切换自己的口音,更好的传达讯息(跨平台性好)
解释型语言主要有:Python、JavaScript(JS和Java是两种语言,他们的关系就像是雷锋和雷峰塔,牛和牛顿,狗和热狗。。。)
这里呢还有Java这个异类,他兼具了编译型和解释型,他的代码是先是找文本翻译员翻译(编译)成了一种叫字节码的东西。但是字节码是人也看不懂、机器也看不懂的中间产物。然后呢,他在具体要执行的时候,会再请当地(linux或windows等)的同声传译来帮他把字节码翻译(也就是解释)成当地机器看得懂的机器语言
2.2 变量
这里我们要先知道一个小知识点,就是我们的电脑是怎么存东西的。我们可以简单的理解成电脑里有一个一个小格子留着存数据,就像是超市的储物柜一样。当没有人(变量)占用时,这些小柜子就空着但是不会消失,当有人(变量)申请时,这个小柜子就会和这个人(变量)绑定起来,我们就可以凭条在里面存东西(数据)或者取东西(数据)。
电脑的存储这里其实有非常多的学问,像是我们平时经常说我电脑内存多大多大,硬盘多大多大,内存和硬盘既然都是用来存东西的,那为什么还要分开呢?而且为啥内存8个G就很不错了,但硬盘能做出好几个T呢?其实这里都是有很多学问在的,计算机组成原理里有很详细的解释。为了避免讲成俄罗斯套娃,这里我就先不展开说啦,如果以后有机会再给大家掰扯掰扯这部分的内容。(我自己其实也忘的差不多了hhhh,得捡一捡)
那么当我们设置了一个变量时,可以理解为我们以这个名字去申请了一个超市储物柜,比如现在我们申请了一个名叫 sifang 的变量,想在里面存上一条信息,内容是"nb"那么我们只需要用非常简单的一句话
sifang = "nb"
当我们写了这代码时,电脑就知道
1. 我们申请了一个叫 sifang 的变量(变量这个名字是个约定俗成的名词,超市里的叫柜子,电脑里的叫变量,他一般如名字所示一样,存的值(一般情况下)是可以变的,sifang 是他的变量名)
2. 打开这个叫 sifang 的“小柜子”,并在里面存下了“nb”这个信息(在python中双引号里的内容代表这是一段字符串,或者说这是一串字符)
那么我们已知print函数是可以打印消息的,如果我们想打印叫 sifang 这个柜子里的信息,我们只需要
print(sifang)
当我们写了这行代码时,电脑就知道
1. 我们要打印东西,因为我们叫了他的 print 服务
2. 电脑准备好要打印了,但是需要知道我们想打印什么,print 的括号就是他的指令接收处,我们在括号里写着 sifang 这个变量的名字,所以是想打印这个变量
3. 电脑找到了叫 sifang 的这个小柜子(变量),发现里面存着 “nb”,所以他把 nb 打印出来了
一个小问题:为什么print打印出来的不是sifang这几个字而是sifang里存的nb呢?
答:因为sifang是一个变量的名字,我们可以发现他是不带引号的(python其实单引号、双引号、三引号都是可以用来标记字符串的,他们有些许区别,下一期我再讲)如果现在我们传入到print括号里的是带引号的 "sifang" ,那打印出来的就是sifang这几个字,因为此时我们传入的就是一个字符串。大家可以自己敲敲看,加深一下印象。
如图(大家可能会发现这个运行样子怎么不是上期教的那种了,这是python的交互式编程,我们平时写完存在.py文件里再运行的方法叫脚本式编程,交互式编程用的不多,大家平时还是多用脚本式)
当然我们刚才也说了变量变量,他是可以变的(一般情况下)。所以我们其实是可以给他重新赋值的,就像是要求电脑打开柜子,丢掉之前里面的东西,放进去新的内容,这部分大家自己看书就可以啦
然后变量名这里是不能乱起的,首先有一些硬规则,如果你瞎起的话电脑直接撂挑子不干的那种
1. 变量名只能包含字母、数字和下划线;但是也不能以数字开头
所以你说我设置一个变量叫 四方 是不行的啊,电脑不认汉字,但是可以叫sifang
叫52sifang也不行啊,但是可以叫sifang52
2. 变量名里不能有空格
这个应该很好理解,我们给娃起名也没有中间起个空格的
而且python对于空格缩进是非常敏感的,需要注意代码书写规范,这一部分我回头会慢慢给大家渗透
3. 不能将python中的关键字和函数名用作变量名
这个也很好理解,你说假如给变量起名叫print,然后调用print函数让print函数打印print变量,别说电脑,我都晕了。
python里关键字函数啥的也不少,但是其实很少犯这个错,因为写代码的文本编辑器里(比如我之前提到的sublime)都是能高亮函数名啥的,你看变量的色儿不对,就得警觉是不是起重名了
4. 尽量起带含义的名字
这个不仅仅是造福需要读你代码的人,也是造福自己,作为程序员一大痛苦事就是看不懂自己半年前写的代码。。。。
5. 避开长得太像的字母数字
比如1和I,0和O,太考验视力了,除非和交接代码的人有仇,不然尽量不要这么搞
接下来是2.2节的课后题,终于开始有课后题环节了,希望大家不要只看,一定要动手敲,代码这东西看不进脑子,跟学钢琴有点像,唯手熟尔
2-1 简单消息:将一条消息存储到变量中,再将其打印出来。
分析:这个问题是两部分组成的,1. 把一条消息存储到变量中 2. 再把他打印出来。
对于1来说,我们需要和电脑申请一个小柜子,也就是我们需要申请一个变量给他起个名字,然后把自己想存的消息赋值给他
对于2来说,打印用到了print函数,我们把步骤1中的变量传递给print,他就会帮我们打印了
代码如下:
#2-1
sifang = "nb" #申请小柜子(变量),名字叫sifang
print(sifang) #打印出sifang里存的信息
顺便跟我一起复习一下终端指令
2-2 多条简单消息:将一条消息存储到变量中,将其打印出来;再将变量的值修改为一条新消息,并将其打印出来。
分析:这个问题是承接上一个问题2-1的,补充了一个步骤就是我们需要把变量的值修改后再次打印
我相信大家不需要我讲就已经知道怎么做了
代码如下:
#2-2
sifang = "nb"
print(sifang)
sifang = "real nb"#重新打开之前申请的叫sifang的小柜子(变量),把里面的东西换成新的内容
print(sifang) #再次打印sifang里存的信息
https://static.52pojie.cn/static/image/hrline/5.gif
OK~那么到这里,恭喜大家已经和我一起学习了编译型语言、解释型语言和变量的相关知识。话说大家一定要看书呀,我是默认了大家看过书的对应内容的基础上讲的,书在第一期有给出链接。
不知道大家喜不喜欢这样絮絮叨叨的小讲堂,如果喜欢的话欢迎给个币加个热心,也欢迎催我更新~我们下期见哦{:1_919:} 一定要持续更新 zhanary 发表于 2021-5-10 17:32
话说大家谁来教教我在发帖时怎么缩进,我发现Tab键用不了,全靠空格敲缩进
还有咋预览呀。。。愣 ...
没有预览模式,只能发出来再修改,纯文本模式支持tab缩进,也可以使用Markdown编写帖子
例如:
【原创】TP驱动保护分析系列一 定位TenProtect保护
https://www.52pojie.cn/thread-1426244-1-1.html
侧边还带有导航 话说大家谁来教教我在发帖时怎么缩进,我发现Tab键用不了,全靠空格敲缩进{:1_925:}
还有咋预览呀。。。愣是没找到预览按钮,发上来各种格式错乱还得重新编辑审核{:301_983:} 楼主,你能不能做成视频教学呀? 通俗易懂 通俗易懂 如果能坚持更新就好了{:1_932:} windy007 发表于 2021-5-10 20:14
楼主,你能不能做成视频教学呀?
可以呀,不过得等有稳定的读者才会考虑做,毕竟视频做起来挺费劲的。如果做视频的话肯定还是免费分享的~ 苏紫方璇 发表于 2021-5-10 20:20
没有预览模式,只能发出来再修改,纯文本模式支持tab缩进,也可以使用Markdown编写帖子
例如:
【原创 ...
感谢!!!学会了!不过我现在又发现了新问题,我正文里的表情包怎么不能正常显示了。。。{:301_973:} zhanary 发表于 2021-5-11 18:24
感谢!!!学会了!不过我现在又发现了新问题,我正文里的表情包怎么不能正常显示了。。。
这个不太清楚了{:1_909:}