第三章、Python入门教程系列——基础知识
本来一直纠结是不是要写这篇教程,这些基本知识本应该穿插在后面的教程中的,如果穿插在教程中会显得一些教程比较乱,所以把一些很基本的知识单独拿出来,在这里做理论的讲解,在后面的教程中都会用到的,由于都是理论的知识可能会有些枯燥,只要有个认识,理解即可。
标识符
标识符(Identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。
每个编程语言都有自己的标识符规则,Python也一样,规则如下:
标识符由字母、数字和下划线组成。 标识符只能由字母或者下划线开头,不能以数字开头。 标识符以下划线开头有特殊的意义。
下面是一些例子:
_abc
aBc
1abc (标识符不能数字开头)
ab@qq (标识符由字母、数字和下划线组成,@符号不是字母、数字和下划线)
Abc
_s#2 (标识符由字母、数字和下划线组成,#符号不是字母、数字和下划线)
关键字与保留字
在很多教程中都没有把关键字和保留字区别说清楚,甚至大部分教程还将两者混为一谈,首先关键字是编程语言本身已经定义好具有特殊功能的标识符,而保留字则是尚未定义具有特殊功能的标识符,但是在将来保留字是可能变成关键字的,所以保留字一般视为和关键字一样,也同样不能用作标识符,这也是很多教程都没有区分关键字和保留字的原因。
简单点来说就是,关键字一定是保留字,保留字在版本迭代中很可能成为关键字,两者都不能用作标识符,都是具有特殊含义的。
Python3 目前总共有35个关键字,如下表:
False | None | True | and | as |
---|---|---|---|---|
assert | async | await | break | class |
continue | def | del | elif | else |
except | finally | for | from | global |
if | import | in | is | lambda |
nonlocal | not | or | pass | raise |
return | try | while | with | yield |
Python是标识符是区分大小写,比如false
和False
是不同的,False
是关键字,不能用作普通标识符,而false
则不是关键字,可以用作普通标识符,但是不推荐这么做,因为很容易让人误解,错以为false
是False
关键字。
变量与常量
变量和常量可以说是用的最多,也是最普遍的东西,无论写什么代码,都会用上。
什么是变量?
我们从字面上理解就是会变的量,变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。这么说很多人有不理解了。举个生活的例子,假如现在要搬家,家里有一堆的衣服,和一堆的游戏机,还有一些搬家用的纸箱子,统统打包带走,大家都会把衣服都折叠的整整齐齐,然后放到一个箱子里,把游戏机也整理好放到另一个箱子里,但是想了下,游戏机很贵的啊,有ps4,nds,xbox呢,如果给其他东西压坏了心会很痛,所以为了告诉搬家工人,这东西很珍贵,就在装游戏机的箱子上标明游戏机,在衣服的箱子上标明衣服。
从例子中,游戏机和衣服就是不同的数据类型,箱子就是个容器,它既可以存储衣服,也可以存储游戏机,而我们给箱子上表名的一些字,相当于给箱子取个名字,方便知道箱子里存储的是什么东西。箱子就相当于变量,箱子上的字就相当于标识符,也就是相当于变量名。
变量命名规则
前面简单的说了,变量名是为了方便我们知道存储的是什么,对于机器来说就是给某块内存空间取了个名字,但本质还是内存的一个地址。既然要取名字,总不能随便乱取吧,要一眼就能看出这个变量存储的是什么,所以就有了命名的规则和规范,规则是强制的,规范是自由的,但大家都这么做,所以为了能给别人阅读代码带来方便,我们也应该这么做。
Python变量名的规则如下:
可以由字母、数字、下画线(_)组成,其中数字不能打头。 不能是 Python 关键字或者保留字
其中第一条就是标识符的规则,由于它是内存空间的别名且用来存储变量,所以这里不再叫标识符,而是叫变量名。第二条就是不能是关键字或者保留字,这点在关键字与保留字章节里说过了,这里就不再阐述。
什么是常量?
前面讲了变量,那么就有对立的常量,常量就是固定不变的量,比如圆周率,PI,这是不会变的,常量也同样会用常量名来存储,但是它存储的数据是个常量,但是在python里并没有常量的说法。所以我们都会用一种大家都习惯的方式去定义,即使没有常量,大家一看到这种定义就是立马知道,这是个常量,不会随意去更改。
常量命名规则
常量名的命名和变量名一样,没什么不同的,常量既然在python里没有为什么还要说常量呢,因为有时候有些数据存储后不希望被修改,虽然python没有常量的说法,但是有很多种方法可以实现,因为很多都还没学,所以这里只介绍最常用的方法,就是名字全部大写,这样做主要就是告诉别人,这是个常量,不要随意修改,但是要修改还是可以的,只是提醒。
命名规范
规范不是强制的,你可以这么做,也可以不这么做,但是大家习惯性都这么做。这不仅仅是变量名,常量名,甚至以后讲的方法名,类名都会有规范,只要涉及到命名的,都会有规范,大家也不用死记,看多了自然就有这种意识了。因为这涉及到个人代码风格或者企业\公司的代码风格,没办法规定出一个全球统一的规范,这主要看你所在的环境是如何而定,但是一些比较流行的规范还是要了解,哪怕以后到公司给你命名规范手册,一看就知道如何命名。
-
名副其实:名字要有意义,也就是不要取什么a啊,b啊这种没一点意义的名字,取a你知道是存什么吗?你知道,别人不知道啊,还要取找a的赋值,会浪费大量的时间,取一些有意义的,比如存储名字,可以用name,年龄可以用age,大家一看就知道是用来存储什么数据的。
-
驼峰命名法:驼峰命名法分为大驼峰和小驼峰,大驼峰就是每个单词首字母大写,比如MyName。小驼峰就是第二个单词开始每个单词首字母大写,比如myName。
-
下划线命名法:如果有多个单词组成,每个单词之间用下划线连接,比如my_name,MY_NAME。
-
匈牙利命名法:就是讲类型和描述组合一起来命名,比如名字是字符串类型(可以先理解为就是字符)strName。
-
其他的:当然还有其他的一些规范,比如变量用名词,类用动词之类的,这里就不去说明,最主要的还是名副其实。
注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。注释只是为了提高可读性,不会被执行,写注释是种好习惯,当代码量大的时候,注释是最好的解释者,可以快速了解到某句或者某块代码的作用以及含义,python注释有3种方式。
单行注释
单行注释使用#,当前行#后面的所有语句都是注释,都不会被执行。
1 | age = 18 # 年龄是18 |
多行注释
python实际上并不存在所谓的多行注释,在每一行注释前加上#就是多行注释了。
1 | # 没有多行注释 |
注释文档
在某些特定的位置,用三引号包括起来的部分,也被当做注释。但是,这种注释有专门的作用,用于提供文档内容。现在看不懂代码没关系,文档注释会单独一章进行讲解,知道有这么一种注释就可以了。
1 | def func(num1:int, num2:int) -> int: |
代码结构
这小节比较重要,主要讲讲python的代码结构,这是很多初学者都会范的错误。
行:Python和其他编程语言不同,没有结尾符号,默认就是一行就是一句代码,如果一句代码分成两行写就会报错,但是由于考虑到特殊情况,比如这句代码特别长,为了方便阅读可以使用行连接符号进行换行写,下面例子讲示范正确的、错误的和换行的写法。
1 | # 正确的写法 |
第二个是明显的错误写法,切记不要犯这种低级错误,换行可以用\符号进行换行,一般不推荐一行写特别长或者换行,除非实在没办法。
缩进:这是初学者出错率最高的,80%的初学者都会出错。Python没有结构代码块的符号(所谓代码块就是多条代码组成一小块,这一小块是独立的)。所以Python采用缩进来表示代码块。部分编辑器有所不同,一个缩进等于8个空格,大部分一个缩进等于4个空格,必须保证所有代码保持同一种缩进,一个Tab键(键盘Q键左边那个)就是一个缩进,推荐使用Tab键缩进,避免使用空格缩进。
1 | # 最外层代码块 |
很多初学者可能看不懂,不用担心,这都是有固定写法的,等学了控制语句后就会明白为什么这么写,现在只要知道缩进的作用就行了。
进制
最后要讲的就是进制,进制是编程中非常重要的一部分。我们生活中常说“锋十进一”就是十进制。十进制是我们生活用的最多的,但是在编程里不仅有十进制,还有二进制、八进制和十六进制。其中二进制和十六进制是用的比较多的。
二进制
二进制是计算机的常用进制,“逢二进一”,也就是只有0和1两个数字,1+1不再等于2,而是要进一位为10,主要是了解,如何将十进制的数转换为二进制,最简单的方法就是不断除2取余数。做个简单的例子,比如97转换成二进制
可以看到将数不断对2求余,整数部分做为下一次的被除数,余数就是二进制的其中一位,最后因为1无法除于2,所以不再计算了,最后从下往上排列余数,1100001,这就是97的二进制。
大家只要知道如何得到的即可,因为很少会自己去算,都有计算器,何必要自己去算,浪费时间。
还有就是二进制转换成十进制,最简单的方法就是把每一位的权相加,我们把1100001变回二进制
从右往左计算,最右边是记作第0位然后是第1位,以此类推,我们只要计算二进制有1的位即可,只要将所有的2的第几位次幂加起来即可,比如第0位有1,那么就是,接着4个0,不需要计算,然后又是1,,最后一个也是1,,最后将所有加起来。
看,已经还原会十进制了,只要记住把每一位的权相加即可
在python里二进制的表示很简单,只要在数字前加个0b或者0B,注意第一个是数字0,很多初学者都会写出字母o,第二个是字母
八进制
学会二进制后,八进制就再简单不过了,只不过是把2变成8,数字从0到8,十进制转八进制就不断除于8。
十进制97转八进制为141
八进制转十进制就8作为底数,然后还要乘与当前的位数的数字,然后加起来。
141八进制转十进制为97
十六进制
十六进制和八进制一样,当数字超过9的时候则用A到F表示,A代表10,F代表16,转换就和八进制一样。
十进制445转十六进制为1BD
1BD十六进制转十进制为445