一、初识
开发语言:
高级语言:Python Java PHP C# Go Ruby C++ ... => 字节码
低级语言:C 汇编 => 机器码
语言之间的比较:
PHP类:适用于写网页吗,局限性。
Python Java:既可以写网页,也可以写后台功能。
— Python 执行效率低,开发效率高。
— Java 执行效率高,开发效率低。
Python种类:
Cpython
JPython
IronPython
JavaScriptPython
RubyPython
...
PYPY 这是用CPython开发的Python
1、Python的历史
1989年,Python之父Guido van Rossum在阿姆斯特丹为了打发圣诞节的闲暇时间,开发了一门解释型编程语言。国内社区通常将Guido van Rossum简称为“龟叔”,“龟”的发音取自Guido中 “Gui”。
2、Python的特点
Python之所以受到大家的欢迎,是因为它有很多优秀“品质”。
1 简单、易学、免费、开源:Python简单、易学。我们可以自由发布其复制版本,阅读、修改其源代码,将其(部分)用于新软件中。
2 解释型:Python是边解释边执行的,Python解释器会将源代码转换为中间字节码形式,然后将其解释为机器语言并执行。
3 可移植:Python解释器已被移植在许多平台上,Python程序无须经过修改就可以在多个平台上运行。
4 代码规范:Python所采用的强制缩进的方式,使得其代码具有极佳的可读性。
5 面向对象:与C++和Java等相比,Python以强大而简单的方式实现了面向对象编程。
6 胶水语言:标准版本的Python调用C语言,并可以借助C语言的接口驱动调用所有编程语言。
7 丰富的库:Python的标准库种类繁多,可以帮助处理各种工作,我们不需要安装就可以直接使用这些库。
8 动态类型:Python不会检查数据类型,在声明变量时不需要指定数据类型。
编写和运行Python程序主要有两种方式:
1 交互方式;
2 文件方式。
两种方式有什么区别?
交互方式指我们每写-行Python代码,就可以敲回车键来运行代码,在学习Python的基本语法并运行一些简单的程序时,这是不错的选择。
文件方式指先编写好Python代码文件(*.py),然后通过Python指令运行它,如果程序比较复杂,则一般采用文件方式。
3、Python的变量
3.1 标识符
标识符就是变量、函数、属性、类、模块等可以由程序员指定名称的代码元素。
构成标识符的字符均遵循一定的命名规则。
Python3 的字符采用双字节Unicode编码。
Python中标识符的命名规则如下。
1 区分大小写:Myname与myname是两个不同的标识符。
2 首字符可以是下画线(_)或字母,但不能是数字。
3 除首字符外的其他字符必须是下画线、字母和数字。
4 关键字不能作为标识符。
5 不要使用Python的内置函数作为自己的标识符。
User_Name
_sys_val
3.2 关键字
关键字是由语言本身定义好的有特殊含义的代码元素。
在Python中只有33个关键字,在这33个关键字中,只有 False、None和True的首字母大写,其他关键字全部小写。
3.3 变量
在Python中为一个变量赋值的同时就声明了该变量,该变量的数据类型就是赋值数据所属的类型,该变量还可以接收其他类型的数据。
greeting = 'Hello Word'
Student_score = 7.0
我们学习Java和C等编程语言时,将变量声明为一种数据类型后,该变量就不能接收其他类型的数据了。Python却可以,这样不会为我们编程带来麻烦吗?
这种灵活性使得Python变得简单,但也给开发人员带来很多麻烦。我原本想将True赋值给X,却不小心将它赋值给y。由于Python默认所有变量都可以接收不同类型的数据,所以我不容易发现这个错误,也不容易排查,这种Bug会导致之后产生很严重的Bug。
3.4 语句
Python代码是由关键字、标识符、表达式和语句等构成的,语句是代码的重要组成部分。在Python中,一行代码表示一条语句,在一般情况下语句结束时不加分号。示例代码:
greeting = 'Hello Word'# 语句结束时可以加分号,但不符合Python编程规范
Student_score = 7.0; # Python链式赋值语句可以同时给多个变量赋相同的数值
a = b = c = 10
3.5 代码注释
在使用#(井号)时,#位于注释行的开头,#后面有一个空格,接着是注释的内容。代码注释示例如下:
位于行的开头
# coding = utf-8 ## 单行注释# 这是一个证数变量 ## 单行注释
student_score = 7.0print(student_score) # 打印y变量 ## 在一条语句的末端注释
代码第1行# coding=utf-8的注释很特殊,它有什么意思吗?
这个注释是告诉Python解释器该文件的编码集是UTF-8,可以避免产生代码中有中文等亚洲文字时无法解释文件的问题。该注释语句必须被放在文件的第1行或第2行才能有效。
它还有替代写法:# _*_coding: utf-8 _*_。
3.6 模块
在Python中一个模块就是一个文件,模块是保存代码的最小单位,在模块中可以声明变量、函数、属性和类等Python代码元素。
一个模块可以访问另外一个模块中的代码元素,但是需要导入语句的帮助,导入语句有下面三种形式。
import<模块名>:通过这种方式会导入m2模块的所有代码元素,在访问时需要加前缀“m2.”
from<模块名>import<代码元素>:通过这种方式会导入m2中的x变量,在访问时不需要加前缀“m2.”
from<模块名>import<代码元素>as<代码元素别名>:与②类似,在当前m1模块的代码元素(x变量)与要导入的m2模块的代码元素(x变量)名称有冲突时,可以给要导入的代码元素(m2中的x)一个别名x2
4、Python的数据类型
在Python中所有的数据类型都是类,每个数据值都是类的“实例”。在Python中有6种主要的内置数据类型:数字、字符串、列表、元组、集合和字典。列表、元组、集合和字典可以容纳多项数据,在本书中把它们统称为容器类型的数据。
4.1 数字类型的数据
Python中的数字类型有4种:整数类型、浮点类型、复数类型和布尔类型。需要注意的是,布尔类型也是数字类型,它事实上是整数类型的一种。
4.1.1 整数类型
Python中的整数类型为int类,整数类型的范围可以很大,表示很大的整数,只受所在计算机硬件的限制。
4.1.2 浮点类型
浮点类型主要用来存储小数数值,Python的浮点类型为float类。Python只支持双精度浮点类型,而且是与本机相关的。
4.1.3 复数类型
整数和浮点数(小数)在数学中被统称为实数。与实数对应的是复数,复数在数学中被表示为:a+bi,其中a被称为实部,b被称为虚部,i被称为虚数单位。复数在数学、理论物理学和电气工程等方面应用广泛,例如向量就可以使用复数表示。
4.1.4 复数类型
Python中的布尔类型为bool类,bool是int的字类,它只有两个值:True和False。
Python中的数据类型转换很灵活任何类型的数据都可以通过bool(函数转换为布尔值,那些被认为"没有的""空的"值会被转换为False,反之被转换为True。
4.1.5 数字类型的相互转换
很多数字类型的数据都可以被转换为布尔值,Python中的很多数据类型都可以相互转换,但是具体情况比较复杂,本章重点介绍数字类型之间的相互转换。在Python的数字类型中,除复数外,其他三种数字类型如整数、浮点和布尔都可以相互转换,分为隐式类型的转换和显式类型的转换。
4.1.5.1 隐式类型的转换
数字之间可以进行数学计算,在进行数学计算时若数字类型不同,则会发生隐式类型的转换。
目录
一、初识
1、Python的历史
2、Python的特点
3、Python的变量
3.1 标识符
3.2 关键字
3.3 变量
3.4 语句
3.5 代码注释
3.6 模块
4、Python的数据类型
4.1 数字类型的数据
4.1.1 整数类型
4.1.2 浮点类型
4.1.3 复数类型
4.1.4 复数类型
4.1.5 数字类型的相互转换
4.1.5.1 隐式类型的转换
4.1.5.2 显式类型的转换
4.2 容器类型的数据
4.2.1 序列
4.2.1.1 序列的索引操作
4.2.1.2 加和乘操作
4.2.1.3 切片操作
4.2.1.4 成员测试
4.2.2 列表
4.1.5.2 显式类型的转换
表达式1.0 +1中的整数1被隐式转换为浮点数1.0,但在很多情况下我都希望浮点数1.0被转换为整数1,该怎么办?在这种情况下就需要使用转换函数进行显式转换了。
除复数外,三种数字类型如整数、浮点和布尔都有自己的转换函数,分别是int()、foat()和bool()函数。
4.2 容器类型的数据
Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。
4.2.1 序列
序列(sequence)是一种可迭代的、元素有序的容器类型的数据。
序列包括列表(list)、字符串(str)、元组(tuple)和字节序列(bytes)等。
4.2.1.1 序列的索引操作
序列示例:Hello字符串。
序列中的元素都是有序的,每一个元素都带有序号,这个序号叫作索引。索引有正值索引和负值索引之分。
我们是通过下标运算符访问序列中的元素的,下标运算符是跟在容器数据后的一对中括号([]),中括号带有参数,对于序列类型的数据,这个参数就是元素的索引序号。
4.2.1.2 加和乘操作
加(+)和乘(*)运算符也可以用于序列中的元素操作。加(+)运算符可以将两个序列连接起来,乘(*)运算符可以将两个序列重复多次。
4.2.1.3 切片操作
序列的切片(Slicing)就是从序列中切分出小的子序列。
切片运算符的语法形式为[start:end:step]。其中,start是开始索引,end是结束索引,step是步长(切片时获取的元素的间隔,可以为正整数,也可以为负整数)。
注意:切下的小切片包括start位置的元素,但不包括end位置的元素,start和end都可以省略。
下面对字符串变量a进行切片操作[1:3],开始索引为1,结束索引为3,省略步长(默认值为1)。
下面对字符串变量a进行切片操作[0:3:2],开始索引为0,结束索引为3,步长为2。
4.2.1.4 成员测试
成员测试运算符有两个:in和not in,in用于测试是否包含某一个元素,not in用于测试是否不包含某一个元素。
4.2.2 列表
列表(list)是一种可变序列类型,我们可以追加、插入、删除和替换列表中的元素。
4.2.2.1 创建列表
创建列表有两种方法。
1 list(iterable)函数:参数iterable是可迭代对象(字符串、列表、元组、集合和字典等)。
2 [元素1,元素2,元素3,⋯]:指定具体的列表元素,元素之间以逗号分隔,列表元素需要使用中括号括起来。
4.2.2.2 追加元素
列表是可变的序列对象,列表可以追加元素。
1 在列表中追加单个元素时,可以使用列表的append(x)方法。
2 在列表中追加多个元素时,可以使用加(+)运算符或列表的extend(t)方法。
本节的append(x)被称为方法,list(iterable)被称为函数,在Puthon中方法和函数是有区别的。方法隶属于类,通过类或对象调用方法,例如在list.append(x)中,list是列表对象;函数不隶属于任何类,直接调用即可,例如list(iterable)。
4.2.2.3 插入元素
想向列表中插入元素时,可以使用列表的list.insert(i,x)方法,其中,i指定索引位置,x是要插入的元素。
4.2.2.4 替换元素
想替换列表中的元素时,将列表下标索引元素放在赋值符号(=)的左边,进行赋值即可。
4.2.2.5 删除元素
想在列表中删除元素时,可使用列表的list.remove(x)方法,如果找到匹配的元素x,则删除该元素,如果找到多个匹配的元素,则只删除第一个匹配的元素。
4.2.3 元组
元组(tuple)是一种不可变序列类型。