编程基础
什么是编程?
- 1、把想让计算机所做的事的步骤设计清楚
- 2、用一种计算机能听懂的语言(编程语言)把步骤给翻译下来,这个过程称之为编程
编程语言
- 语言是用来沟通交流的工具,人与人交流使用的是人类的语言。
- 人类与计算机沟通的语言叫做编程语言。
编程语言分类
机器语言:使用二进制指令,相当于直接控制硬件。
- 优点:
- 因为相当于直接控制硬件,所以执行效率最快。
- 缺点:
- 1、二进制指令难以记忆,排错困难。
- 2、实现一个功能需要大量的代码,开发效率很低。
- 3、程序开发要考虑底层硬件细节,针对某硬件平台开发的程序无法移植到其他平台。
汇编语言:使用英文标签对应二进制指令,相当于直接控制硬件。
- 优点:解决了机器语言难以记忆的问题,开发效率近似机器语言。
- 缺点:程序开发也要考虑底层细节,跨平台性和开发效率的问题没有解决。
高级语言:使用近似人类的语言来编程,需要通过转换成二进制指令才能控制硬件。
- 优点:
- 1、编程方式接近人类语言,开发效率更高。
- 2、降低编程门槛。
- 缺点:执行效率低。离计算机硬件更远,需要先转换成二进制指令才能运行。
高级语言分类
高级语言不能被计算机直接识别,需要翻译成二进制指令才能运行。按照翻译方式的不同,大致可分为两类:
分类 | 特点 |
---|---|
编译型 | 编译型语言写的程序若要执行,需先通过编译器将代码翻译成可执行文件,之后的运行直接运行此文件即可。例如C、go。 |
解释型 | 解释型语言需要通过解释器来翻译代码。解释器会逐行读取代码,解释成二进制指令交给计算机运行。例如Python、shell。 |
从开发效率和执行效率两方面进行对比:
比较 | 特定 |
---|---|
开发效率 | 编译型语言在调试代码时,需要将整个文件编译后执行,才能判断最后的结果。如果出现了错误,需要重新编译,编译非常耗时。 解释型语言在调试时,可以运行解释器,进入交互式界面,输入代码马上即能拿到结果。从这方面比较而言解释型语言开发效率更高一些。 |
执行效率 | 解释型语言每次执行程序都需要使用解释器逐行读取内容翻译成二进制指令交给计算机执行。 编译型语言在程序编译完成后,以后的运行直接使用编译后的可执行文件来运行即可,不需要再次通过编译器翻译,这样的执行效率会比解释型语言高。 |
此处效率的比对仅仅是语言本身特点的比对,实际情况中要结合多方面来看待。比如程序员的开发能力,如果是有网络传输的程序还要考虑网速问题。
程序执行的两种错误:
- 1、语法错误
Python解释器在执行程序时,会先检查语法再运行代码。如果有语法错误会直接报
错,而不会运行到错误的那一行再报错。
语法错误属于低级错误,成熟的程序员不应该犯。
- 2、逻辑错误
当程序中出现逻辑错误时,要么解释器执行到错误行时会报错,要么程序的运行经过
并非是我们所预期的。
没有完美的逻辑,逻辑错误只能尽量避免。按经验论平均每1400行代码就会有一个逻辑问
题。
Python语言
Python是一门面向对象,动态解释型和强类型的语言。
Python的语法风格简单,应用面广,在各个领域都有成熟的可调用库。Python也被称为胶水语言,可以调用其他类型的语言。
Python这个词有两个意思。一指Python这门语言的语法,二指解释这门语言语法的解释器。
Python解释器种类
- Cpython:官方推荐解释器,可以转化成C语言能识别的字节码。
- Jpython:使用Java开发,可以转化成Java语言能识别的字节码。
- Ironpython:使用.nek开发,可以转化成.net语言能识别的字节码。
- pypy:支持动态编译。
Python程序执行的两种方式
- 交互式:直接执行解释器即会进入交互式界面,用户输入代码马上就能得到结果。这样写的代码关闭解释器代码就会消失,不会被保存。
- 源文件式:将Python代码写进文件中,可写多行代码,代码可以长期保存便于维护。Python解释器会逐行读取代码。
解释器执行程序的步骤
1、先启动解释器。
2、解释器将代码文件从硬盘读取到内存,此时内容全部为普通字符,没有语法意义。
3、解释器先检查代码文件的语法,然后从左至右、从上往下逐行解释执行。
Python语法
一、注释
注释有两种作用:
- 1、是用来对代码进行解释说明
- 2、注释的行解释器不会执行,这样就能将一些暂时不运行的代码注释掉。
注释的两种方式:
-
1、单行注释,Python中#开头的行就是注释。
单行注释通常加在代码的上一行或接在代码的正后方,如果单行代码过长最好是在上 一行注释。通常用来解释关键代码。
-
2、多行注释,使用三对双引号“”“注释”“”或单引号‘’‘注释’‘’。
多行注释通常是加在一个程序的首部,用来对整个文件进行描述讲解。
二、变量
可变的量。变量存在的意义是为让计算机能够像人一样记忆下事物的状态,并且事物的状态是可以变化。
在计算机中是存取值的抽象概念,变量实质是按照变量所存储数据的大小被分配到的一块内存空间。是操作系统提供给用户存取内存的一种机制。
变量的使用
原则上是先定义,后引用。否则会报错,名字未定义。变量名只要不在等号左边,代表的就是取值操作。
变量的三大组成部分:
- 变量名:通过变量名访问变量值。
- 赋值符号:将变量名与变量值关联。Python以等号“ = ” 为变量赋值符号。
- 变量值:记录事物的状态,也就是存放到内存中的数据。
变量名的命名规则:
前提:变量的命名首先要在保证见名知意的前提下,尽量精简。
- 1、变量名由数字、字母、下划线组成。
- 2、不能以数字开头。
- 3、不能使用该语言的关键字。
另外不要使用中文或拼音。
三、Python关键字:
Python有如下35个关键字或“保留字”,它们不能用作标识符。
# 查看Python关键字。
import keyword
print(keyword.kwlist)
['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']
变量命名风格:
-
驼峰式:
- 由多个单词组成,除首单词外,之后的每个单词首字母大写(如getName,payMoney)。如果定义类名,则每个单词首字母都大写。
-
纯小写加下划线式:
-
Python中变量和函数命名,单词之间以下划线“_”分隔(如my_name)。
在Python中,官方推荐使用下划线式。
-
常量:
常量指一直不变的量,本质上也是对应的一块内存空间。
-
Python中没有真正的常量,为了迎合其他语言全部为大写的变量称之为常量。
-
约定俗成,已定义的常量不要改变。
NAME = 'chirou'
变量值的两大特征
id:反映的是变量的内存地址。id一样,代表内存地址一样,也就说指向的是同一个内存空间,值肯定一样。但值一样,id并不一定一样。
a = "3.14a"
b = a # 这里表示的含义其实是b指向a对应的内存空间,而非a这个变量名。
print(id(a))
print(id(b))
39041024
39041024
使用“ is ”关键字用来判断两边的值id是否相同。
a = "3.1415*abcdef_gh"
b = "3.1415*abcdef_gh"
print(a is b)
True
# True表示相同,False表示不同。
type:变量值的类型
# 引号引起来的都是字符串
a = "ABC"
print(type(a))
# <class 'str'>
四、缩进
Python语言利用缩进表示语句块的开始和结束(越位规则),而非使用大括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的结束。根据PEP 8的规定[42],使用4个空格来表示每级缩进。
使用Tab字符和其它数目的空格虽然都可以被解释器识别,但不符合编码规范,偏向使用Tab字符的程序员可以设置文本编辑器将Tab键转换为4个空格。缩进成为了语法的一部分,并且Python开发者有意让违反了“缩进规则”的程序不能通过解释。
# 使用缩进来表示同级代码块,代码结构更清晰更简洁.
if 10 > 9:
print('hello world')
Python缓存机制
代码块:
- Python是由代码块构造的。块是一个Python程序的文本,它是作为一个单元执行的。
- 一个模块、一个函数、一个类、一个文件等都是一个代码块。
- 同一个文件中的两个函数,也分别是两个不同的代码块。
- 在交互式中输入的每个命令都是一个代码块。
两个机制:
同一代码块下的缓存机制:
Python在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在, 如果存在,会将值重用。换句话说:执行同一个代码块是,遇到初始化对象的命令时,会将初始化的变量和值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录,那么它会重复使用这个字典中的值。
缓存机制的优点:
- 节省内存空间,增加性能。
# 例:
s1 = 'abc'
s2 = 'abc'
print(id(s1))
print(id(s2))
# 在例子中,文件执行时(同一个代码块)会把s1、s2两个变量指向同一个变量
# 满足缓存机制则他们在内存中只存在一个,即:id相同
适用对象
- int :所有数字
- bool :True和False在字典中会以1,0方式存在,并且复用
- str :几乎所有的字符串都会符合缓存机制
不同代码块的缓存机制:也称小数据池
- Python自动将-5 ~ 256的整数进行了缓存,
当你将这些整数复制给变量时,并不会重新创建对象。 - Python会将一定规则的字符串在字符串驻留池中,创建一份
当你将这些字符串赋值给变量时,并不会重新创建值,而是使用在字符串驻留池中创建好的对象。
适用对象:
int:-5 ~ 256 之内的整数
bool:True和False在字典中会以1,0方式存在,并且复用
str:满足一定规则的字符串