python基础知识
python基础
python的诞生
2002年,python 2.x
2008年,python 3.x
python的命名
马戏团的名称
python简介
- 简单、易学
- 持快速开发.
- 跨平台.
- 开源.
- 可扩展.
- 可嵌入.
- 大量的标准库和活跃的交流群.
- 可用于各种各样的开发.
应用领域
系统编程
提供API(应用程序编程接口),方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。
图形界面开发
Python在图形界面开发上很强大,可以用Tkinter/PyQT框架开发各种桌面软件。
科学计算
Python是一门很适合做科学计算的编程语言,从1997年开始,
NASA就大量使用Python进行各种复杂的科学运算,随着
NumPy、SciPy、Matplotlib、Enthought librarys等众多程序
库的开发,使得Python越来越适合做科学计算并绘制高质量
的2D和3D图像。
数据库编程
程序员可通过遵循PythonDB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server 、
Oracle 、 Sybase 、 DB2 、MySQL、SQLite等数据库通信。另外,Python自带有一个Gadfly模块,提供了一个完整的SQL环境。
网络编程
提供丰富的模块支持Sockets编程,能方便快速地开发分布式应用程序。
文本处理
Python提供的re模块能支持正则表达式,还提供SGML、
XML分析模块,许多程序员利用Python进行XML程序的开发。
Web开发
Python拥有很多免费数据函数库、免费web网页模板系统以及与web服务器进行交互的库,可以实现web开发,搭建web框架。目前最火的Python web框架Django, Django官方的标语把Django定义为the framework for perfectionist with deadlines (完美主义者使用的高效率 web框架)。用Python开发的Web项目小而精,支持最新的XML技术,而且数据处理的功能较为强大。
自动化运维
Python是运维人员广泛使用的语言,能满足绝大部分自动化运维需求,包括前端和后端。
金融分析
利用Numpy、Pandas、Scipy等数据分析模块,可快速完成金融分析工作。目前,Python是金融分析、量化交易领域里使用最多的语言。
多媒体应用
Python 的 PyOpenGL 模块封装了“OpenGL应用程序编程接口”,能
进行二维和三维图像处理。
网络爬虫
在爬虫领域,Python几乎是霸主地位,提供了Scrapy 、 Request 、BeautifulSoap、urllib等工具库,将网络中的一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。
游戏开发
在网络游戏开发中Python也有很多应用。相比Lua,Python有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑。另外,Python 更适合作为一种Host语言,即程序的入口点是在Python那一端会比较好,然后用C/C++写一些扩展。Python非常适合编写1万行以上的项目,而且能够很好地把
网游项目的规模控制在10万行代码以内
人工智能
NASA和Google早期大量使用Python,为Python积累了丰富的科学运算库。当AI(Artificial Intelligence,人工智能)时代来临后,Python从众多编程语言中脱颖而出,各种AI算法都基于Python编写。在神经网络、深度学习方面,Python都能够找到比较成熟的包来加以调用。另外,Python是面向、对象的动态语言,且适用于科学计算,这就使得Python在人工智能方面备受青睐。
编程基础
-
指令和程序
-
每台计算机都有自己的指令(Instruction)集合,
每条指令可以让计算机完成一个最基本的操作。 -
程序(Program)则是由一系列指令根据特定规则
组合而成,在计算机上执行程序的过程实质上就
是组成程序的各条指令按顺序依次执行的过程。
高级程序设计语言和低级程序设计语言
- 高级程序设计语言包括Python、C/C++、Java等
- 低级程序设计语言包括汇编语言和机器语言
编程语言 | 表现形式 |
---|---|
python | a=b+1 |
汇编 | mov 0x804a01c,%eax add $0x1,%eax mov %eax,0x804a018 |
机器 | a1 1c a0 04 08 83 c0 01a3 18 a0 04 08 |
解释型和编译型的区别
解释型:程序运行的时候,才对程序逐条翻译和执行
解释(Interpret)是在程序运行时才对源代码进行逐条语句的翻译并运行。
解释型语言编写的程序每执行一次,就要翻译一次,翻译结果不会像编译型语言一样保存在可执行文件中,因此效率较低。
Python是一种解释型语言,但为了提高运行效率,Python程序在执行一次之
后会自动生成扩展名为.pyc的字节码文件;字节码不同于机器语言,但很容
易转换为机器语言。
编译型:翻译成机器码,计算机再执行
高级语言编写的程序称为源代码(Source Code)或源文件。编译(Compile)是将源代码全部翻译成机器指令,再加上一些描述信息,生成一个新的文件。这个新的文件称为可执行文件。一个可执行文件可以在计算机上多次运行,因此,在不修改源代码的情况下,只需要做一次编译即可。
起步
第一个python程序
TempStr=input("请输入带有符号的温度值")
if TempStr[-1] in ['F','f']:
C=(eval(TempStr[0:-1])-32)/1.8
print("转换之后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F=1.8*eval(TempStr[0:-1])+32
print("转后之后的温度是{:.2f}F".format(F))
else:
print("输入错误!")
缩进
缩进:表示程序的框架格式
- 严格明确:缩进是语法的一部分,缩进不正确程序运行错误
- 所属关系:表达代码间包含和层次的唯一手段
- 长度一致: 程序内一致即可,一般用 4个空格或1个TAB
注释
# 我是单行注释
'''
我是多行注释
'''
变量
变量:是指在程序运行过程中值可以发生改变的量,程序中用于保存和表示数据的占位符号。
- Python变量在使用前不需要先定义,为一个变量
赋值后,则该变量会自动创建。 - 使用等号(=,赋值符号)向变量赋值或修改值。
同时定义多个变量
name,age='张三',18
交换两个值
x,y=y,x
变量命名规则
命名规则 : 大小写字母、数字、下划线和汉字等字符及组合如:
-
TempStr , Python_Great , Python程序开发
-
注意事项 : 大小写敏感、首字符不能是数字、不能与保留字相同
- Python 和 python 是不同变量
- 123Python 是不合法的
保留字
保留字:被编程语言内部定义并保留使用的标识符
- Python语言有33个保留字(也叫关键字)if, elif, else, in
- 保留字是编程语言的基本单词,大小写敏感
- if是保留字,If 是变量
33个保留字
and | elif | import | raise | global | |
as | else | in | return | nonlocal | |
assert | except | is | try | True | |
break | finally | lambda | while | False | |
class | for | not | with | None | |
continue | from | def | or | yield | |
if | pass | del |
Python 类型
- Python 是强动态类型语言.
- 动态类型
- 所有的类型检查都在运行时进行.
- 在变量使用前无需声明或定义类型.
- 静态语言
定义变量时必须制定变量类型,如果赋值时,类型不匹配会报错,如Java- Python不允许不同类型间进行混合运算.
- 不同类型进行运算时,需要显式转换.
如: 2 + “four” 不能正常运行 SyntaxError: invalid syntax
python 基础知识
数据类型
基本数据类型: | Number(数字) | String(字符串) | ||
组合数据类型: | List(列表) | Tuple(元组) | Set(集合) | Dictionary(字典) |
数字类型
- Python中有3种不同的数字类型:
- int(整型)、float(浮点型)、complex(复数类型)
- 各类型的构造方法 int( ), float( )和 complex( ).
- 除了复数,所有数值类型均支持常用的数值操作符.
支持混合运算 窄类型会适应宽类型 整数->浮点数->复数
例如: 123+40=127.0(整数+浮点数=浮点数)
整型
- 包括正整数、0和负整数,不带小数点,与数学中整数的概念一致
- 没有取值范围限制(整数无限制)
- pow( x, y )函数:计算 x𝑦,想算多大能算多大
4种进制表示形式
- 十进制: 1010, 99, 1010, 99, 1010, 99, -217
- 二进制,以 0b 或0B 开头: 0b010, 0b010, 0b010, -0B101
- 八进制 ,以 0o 或0O 开头 :0o123, 0o123, 0o123, 0o123, -0O456
- 十六进制,以 0x 或0X 开头: 0x9a, 0x9a, 0x9a, -0X89
布尔类型
Python 语 言 中 提 供 了Boolean(布 尔)类 型,用于表示逻辑值True(逻辑真)和False(逻辑假)
Boolean类型是整型的子类型,在作为数字参与运算时 , False 自 动 转 为 0 ,True自动转为1
使用bool函数可以将其他类型的数据转为Boolean类型,当给bool函数传入下列参数时其将会返回False:
- 定义为假的常量,包括None或False
- 任意值为0的数值, 如0、0.0、0j等
- 空的序列或集合,如''(空字符串)、()(空元组)、[](空列表)等
浮点数
浮点型使用C语言中的double类型实现,与数学中实数的概念一致
- 带有小数点及小数的数字
- 浮点数取值范围和小精度都存在限制, 但常规计算可忽略(取值范围数量级约 −10308至10308,精度数量级 10−16)
查看浮点数的取值范围和精度的代码示例
import sys #导入sys包
sys.float_info #查看当前环境中浮点型数字的取值范围和精度
min和max是浮点数的最小值和最大值,dig是浮点数所能精确表示的十进制数字的最大位数
sys.float_info(max=1.7976931348623157e+308, max_exp=1024,
max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021,
min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-
16, radix=2, rounds=1)
浮点数可采用科学计数法表示
-
使用字母 e或E作为幂的符号,以 10 为基数,格式如下:
e 表示 a*10b
例如: 4.3e-3值为 0.0043,9.6E5 值为 960000.0 -
浮点数间运算存在不确定尾数,不是bug
- 为什么存在不确定尾数?不是bug
浮点数间运算存在不确定尾数
去除不确定位数
round(x, d):对x四舍五入, d是小数截取位数
- 浮点数间运算及比较时,用 round( ) 函数辅助
- 不确定尾数一般发生在10−16左右, round( ) 十 分有效
复数类型
复数由实部和虚部组成,每一部分都是一个浮点数,与数学中复数概念一致,其书写方法如下:
a+bj 或 a+bJ,其中a是实部, b是虚部
- 在生成复数时,也可以使用complex函数,其语法格式如下:
- complex([real[,imag]]其中,real为实部值,imag为虚部值,返回值为real+imag*1j
在空间变化、复变函数相关的科学体系中,非常常用
c1,c2,c3,c4,c5=3+5.5j,3.25e3j,complex(5,-3.5), complex(5),complex()
执行完毕后,c1、c2、c3、c4和c5的值分别是:(3+5.5j)、3250j、(5-3.5j)、(5+0j)和0j,51
数值运算操作符
操作符是完成运算的一种符号体系
与数学中含义一致的符号
以函数形式提供的数值运算功能
数值运算函数
提供了数字类型转换的函数
字符串类型
字符串类型表示
字符串由0个或多个字符组成的有序序列
- 字符串由一对单引号或双引号表示请输入带有符号的温度值 :”、“c” 或者 ‘C’
- 字符串是字符的有序序列,可以对其中的字符进行索引. “请”是 “请输入带有符号的温度值 : ”的第0个字符
字符串有2类4种表示方法:
- 一类:由一对单引号或双表示
“请输入带有符号的温度值 :”或者 ‘C’ - 二类:由一对三单引号或一对三双引号表示,可
多行字符串
''' Python
语言 ''' - Q: 老师,三引号不是多行注释吗? A: 多行用三引号标注的字符串未赋值给任何变
量,可以看作注释。
为什么要提出2类4种表示?
- 如果希望在字符串中包含双引号或单引号呢? '这里有个双引号 ( '' ) '或者 "这里有个单引号 ( ' ) "
- 如果希望在字符串中既包括单引号又有双引号呢?
''' 这里既有单引号 ( ' )又有双引号 ( '' ) ) '''
单引号、双引号、三引号之间的区别
单引号和双引号中的字符串要求写在一行中,二者在使用方法上并没有什么区别
单引号和双引号中的字符串如果分多行写,必须在每行结尾加上续行符“\ ” ;如果希望一个字符串中包含多行信息,则需要使用换行符“\n”
s1='Hello \
World!' #上一行以\作为行尾,说明上一行与当前行是同一条语句
s2="你好!\n欢迎学习Python语言程序设计!" #通过\n换行
print(s1) #输出s1
print(s2) #输出s2
使用三引号创建字符串,则允许直接将字符串写成多行的形式
str='''你好!
欢迎学习Python语言程序设计!
祝你学习愉快!''' #通过一对三引号定义包含多行文本信息的字符串
print(str) #输出str
在一对三引号括起来的字符串中,可以直接包含单引号和双引号,不需要使用转义符
str='''He said:
"It's a book for you."
''' #通过一对三引号定义包含多行文本信息的字符串,其中的单引号和双引号
不需要加转义符
print(str) #输出str
字符串的序号
字符串的使用
字符串切片
使用[ ]获取字符串中一个或多个字符
- 索引:返回字符串中单个字符 <字符串 >[M]"请输入带有符号的温度值:"[0]
- 切片:返回字符串中一段子<字符串 >[M: N]
<字符串 >[M: N],M缺失表示至开头 ,N缺失表示至结尾
"〇一二三四五六七八九十 "[:3] 结果是 "〇一二“
<字符串 >[M: N: K],根据步长K对字符串切片
"〇一二三四五六七八九十 "[1:8:2 ] 结果是 "一三五七 " “〇一二三四五六七八九十 ”[:: -1] 结果是 “十九八七六五
四三二一〇 ”(实现倒序排列)
转义字符
- 转义符“\”
- 转义符表达特定字符的本意
“这里有个双引号 (\”)“结果为 这里有个双引号 ( " )
转义符形成一些组合,表达不可打印的含意
"\b"回退
"\n"换行 (光标移动到下行首 ) "\r"回车 (光标移动到本行首 )
字符串操作符
字符串内置方法
字符串比较
规则:
1)两个字符串按照从左至右的顺序逐个字符比较,如果对应的两个字符相同,则继续比较下一个字符
2)如果找到了两个不同的字符,则具有较大ASCII码的字符对应的字符串具有更大的值。
3)如果对应字符都相同且两个字符串长度相同,则这两个字符串相等。
4)如果对应字符都相同但两个字符串长度不同,
则较长的字符串具有更大的值。
str1='Python'
str2='C++'
str3='Python3.7'
str4='Python'
print('str1大于str2:',str1>str2)
print('str1小于等于str2:',str1<=str2)
print('str1小于str3:',str1<str3)
print('str1大于等于str3:',str1>=str3)
print('str1等于str4:',str1==str4)
print('str1不等于str4:',str1!=str4)
str1大于str2: True
str1小于等于str2: False
str1小于str3: True
str1大于等于str3: False
str1等于str4: True
str1不等于str4: False
字符串格式化
使用format格式化
<模板字符串 >.format(< 逗号分隔的参数 >)
序列类型
序列类型的操作符
操作 | 描述 |
---|---|
x in s | 如果x是序列s的子元素就返回True,否则返回False |
x not in s | 如果x是序列s的子元素就返回False,否则返回True |
s+t | 拼接两个序列 |
s*n | 将序列复制n次 |
s[i] | 索引,返回序列中第i个元素 |
s[i:j]或则s[i:j:k] | 返回序列s从[i,j)的切片,或者s[i,j)步长为k的切片 |
实例
ls=[1,2,3,4,5]
ls[::-1]#倒序
操作方法
函数方法 | 描述 |
---|---|
len(s) | 返回s的长度 |
min(s) | 返回s中最小的元素 |
max(s) | 返回s中最大的元素 |
s.index(i)或者s.index(x,i,j) | 获取下标元素;获取从i到j第一次出现x的下标 |
s.count(x) | 序列s中x出现的次数 |
列表
- 长度没有限制
- 类型没有限制
- 列表的嵌套
- 使用[]或者list()创建
- 对于不包含元素的列表是空列表
list=['dog','cat',123,789]
列表中只有通过list()是创建新的列表,其他将一个列表赋值给另外一个列表,是复制引用
索引
- 通过下标
ls=[1,2,3,4,5,6]
ls[2]#3
切片
ls=[1,2,3,4,5,6]
ls[1:4]#2,3,4
ls[1:-1]#2,3,4,5
ls[:3]#1,2,3
ls[:]#1,2,3,4,5,6
ls[::-1]#6,5,4,3,2,1
注意:通过切片方式返回仍然是一个列表,但是通过下标得到的对应的一个元素
列表类型切片操作方法
函数或者方法 | 描述 |
---|---|
ls[x] =c | 替换x下标位置元素为c |
ls[i:j:k]=lt | lt替换ls切片之后的子列表 |
del s[i] | 删除列表s中第i个元素 |
del s[i:j:k] | 删除列表s中从i到j以步长为k的元素 |
ls+=it | 将it元素增减到ls中去 |
ls*n | 更新ls中的元素,其元素重复n次 |
列表类型函数方法
b | |
---|---|
ls.append() | 末尾添加元素 |
ls.clean() | 清空列表 |
ls.copy() | 复制列表,生成新的列表赋值ls中所有的元素 |
ls.insert(i,x) | 插入元素 ,在i位置插入x |
ls.pop(i) | 弹出末尾,或者删除第i个位置元素 |
ls.remove(x) | 移除第一个出现的x |
ls.reverse() | 反转 |
注意
- ls[::-1]倒序,并未修改列表
- ls.reverse()真正修改
- ls[0]=[]删除元素
- ls[m:n]=[]删除从[m,n)的元素
元组
元组类型和列表类型是类似的,但是其不可以进行修改,其通过()表示
创建
- 使用tuple创建
a=tuple((1,2,3,4,5,6))
- 使用或者不使用()
ts=(1,2,3,4,5,6)
ts=1,2,3,4,5,6
3.创建空的元组
ts=()
元组类型的操作
元组的操作继承了列表的功能规则和列表是一致的
注意
- 元组继承序列类型的全部通用操作
- 元组中元素的索引方式与列表中元素的索引方式完全相同
- 与列表相同,利用下标“[ ]”可以从已有元组中取出其中部分元素形成一个新元组,其语法格式为:t[beg:end], 缺省情况 也与列表相同
应用场景
- 数据保护,防止改变
序列小结
- 序列
- 扩展类型
- 元组
- 字符串
- 序列
- 可变类型
- 列表
- 不可变类型
- 元组
- 字符串
- 扩展类型
集合
- 集合中的元素是不可以被更改的
- 除此之外集合中的元素是无序的
- 且不重复的
- 元素不同类型
创建
- 大括号{}创建
st={1,2,3,4,5,6}
- set()创建
st=set([1,2,3,4,5,6])
- 建立空的结合,必须用set()
st=set()
集合的操作
6个操作符
操作符 | 描述 |
---|---|
SlT | 求并集 |
S-T | 求集合之差 |
S^T | 求补集 |
S&T | 求交集 |
S<=T或者S<T | 返回True或者False,判断子集关系 |
S>=T或者S>T | 返回True或者False,判断包含关系 |
4个增强运算符
操作符 | 描述 |
---|---|
S l=T | 更新s,s等于和T的并集 |
S-=T | 更新s,s等于和T的差集 |
S&=T | 更新s,s等于和T的交集 |
S^=T | 更新s,s等于和T的补集 |
集合方法
操作函数与方法 | 描述 |
---|---|
s.add(x) | 如果x不在集合中将x添加到集合中 |
s.discard(x) | 移除集合中x元素,若x不在集合中不报错 |
s.remove(x) | 移除集合中元素x,若x不在集合中会报错 |
s.clear() | 移除集合中的所有元素 |
s.pop() | 随机删除一个集合元素,如果元素不存在会报错 |
s.copy() | 返回集合s的一个副本 |
len(s) | 返回集合s中的元素个数 |
x in s | 判断x是否在s中,如果在就返回True,否则就返回False |
x not in s | 判断x是否在s中,如果在就返回False,否则就返回True |
set(x) | 将其他类型变量转化为set类型 |
主要应用
- 关系比较
- 数据去重
字典
- 另外一种无序的对象集合类型
- 字典中每个元素是一组映射,其实就是一组键值对
- key必须是唯一的,键不能相同,且不能改变的数据类型,值应该是任意的类型
创建
- {}
s={1:2,"Hello":"World"}
- dict(**kw)来进行创建,传入键值对
dict(t='a',b='b')
- dict(ls)传入元组的列表
dict([(1,2),(3,4),(5,6)])
- dict()空的字典
a=dict()
字典方法
- type()查看对应的类型
type(a)
- 获取对应的值
d={'a':'b','c':'d','e','f'}
d['a']#b
d['北京']='北京工业大学'
常见的操作方法
函数或者方法 | 描述 |
---|---|
del d[k] | 删除字典中键key所对应的值 |
k in d | 判断k是否在字典中 |
d.keys() | 返回字典左右的键的信息 |
d.values() | 返回字典所有的值的信息 |
d.items() | 返回字典中所有的键值对的信息 |
d.get(k) | k存在则返回对应的值,不在返回default的值 |
d.pop(k) | k存在就返回对应的值,否则返回default |
len(d) | 返回字典d中的元素的个数 |