背景
来历
Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC(为非程序员设计的语言,非开放)语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus)。
自从2004年以后,python的使用率呈线性增长。Python 2于2000年10月16日发布,稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。
2018年3月,该语言作者在邮件列表上宣布Python 2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python 2.7有关的支持,则需要付费给商业供应商。
语言风格
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
应用
Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。
适用方面
- 首选是网络应用,包括网站、后台服务等等;
- 其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
- 另外就是把其他语言开发的程序再包装起来,方便使用。
缺点
- 第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。(但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,py需要0.1秒)
- 第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
linux安装python
下载官网,可以看到各个版本的发布时间,最后支持时间
https://www.python.org/downloads/
1.选择一个合适的版本下载,这里选择3.9.1。
1 | wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz |
2.解压
1 | tar -zxvf Python-3.9.1.tgz |
3.编译安装
创建安装目录
1 | sudo mkdir -p /usr/local/python3 |
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)
Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表。一般用configure –prefix= 来制定安装目录,便于后期管理。
1 | ./configure --prefix=/usr/local/python3 |
编译
1 | make |
安装
1 | sudo make install |
建立软链接
1 | ln -s /usr/local/python3/bin/python3 /usr/bin/python3 |
建立pip3(python包管理工具)的软链接
1 | ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 |
将/usr/local/python3/bin 加入环境变量
1 | vim ~/.bash_profile |
输入
1 | export PATH=$PATH:$HOME/bin:/usr/local/python3/bin |
测试是否安装成功
1 | python3 -V |
python语法
基础语法
python是大小写敏感的语言,写错大小写会报错。
输入输出
1 | print('100 + 200 =', 100 + 200) //py把print中的逗号翻译为空格 |
1 | name = input() //输入变量 |
注释
单行注释 #
1 | # 注释xxxxxx |
多行注释用’’’或”””
1 | ''' |
缩进
python中不规定缩进的空格数,但是同一个代码块必须包含相同的缩进空格数。否则将会报错
多行语句
python中如果语句过长需要换行需要用反斜杠将换行符注释掉。
1 | sum = num1 + \ |
基本数据类型
python中变量不需要声明,每个变量使用前必须赋值。
多个变量赋值可以连等,也可以用逗号为多个对象指定不同变量,如:
a, b, c = 1, 2, “hello”
python3有如下六种标准数据类型:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
查看变量类型方法:
1 | type(a) |
数字
有四种数字类型:int、 float、 bool、complex(复数)
数值运算
+ | 加 |
---|---|
- | 减 |
* | 乘 |
/ | 除法,得到浮点数 |
// | 除法,得到整数 |
% | 取余 |
** | 乘方 |
数学函数
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃,使用 (x>y)-(x。 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x ,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。 |
sqrt(x) | 返回数字x的平方根。 |
随机数函数
函数 | 描述 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange (start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed(x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
字符串
字符串截取方式:
1 | str[a:b] |
字符串链接用+
字符串的复制用*
字符串索引方式:
python字符串不能被改变,如a[0] = ‘x’会报错。
列表
列表可以改变,也可以和字符串一样截取。
初始化定长数组:
1 | b =[0 for n in range(10)] #也可以b = [0]*10 |
+
表示列表链接,*
表示列表重复操作,和字符串类似。
删除列表元素
1 | del list[1] |
相关函数和方法
函数 | 作用 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
方法 | 作用 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index,obj) | 将对象插入列表 |
list.pop([index = -1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(key = None, reverse = False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
元组
元组与列表类似,但是元组元素不能修改。元组用()
声明。
集合
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
集合声明
可以看到,集合会自动将重复元素删除,只留下互补相同的元素,和中学数学中学到的集合概念一样。
集合的差、交、并运算。
字典
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
在同一个字典中,键(key)必须是唯一的。
元素是通过键来存取的,而不是通过偏移存取。
字典赋值时,也必须先声明,否则会报错。
(未声明dict)
定义dict后,程序正确执行。
其他操作
用dict构造函数定义字典。
条件控制语句
1、每个条件后面要使用冒号 **:**,表示接下来是满足条件后要执行的语句块;
2、Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else;
3、可以if语句嵌套。
python模块
日期和时间
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
1 | import time |
随机数
1 | import random |
1. 从一个list中随机选取一个元素
1 | import random |
2. 从一个list中随机选取多个元素
1 | import random |
3. 从data和label中随机选取多个元素
在制作数据集时,可能会有只用50%的数据的要求,所以,我们从原数据集中随机抽取30%的数据,这还要求了,data
和label
是对应的。接下来,讲讲我的做法。创建一个索引list,在索引list中选取N个索引,根据这些索引将data和label的数据提取出来。
1 | import random |
linux脚本式编程
方法一:
1 | python3 test.py |
方法二:
先用
1 | which python3 |
查看python3路径
然后在脚本顶部(第一行)添加以下命令让Python脚本可以像SHELL脚本一样可直接执行:
1 | #! /usr/bin/python3 |
然后修改脚本权限,使其有执行权限,命令如下:
1 | $ chmod +x test.py |
执行
遇到的问题
1.输出中文报错。
原因:python默认使用ascii编码,使用中文要在文件顶部写上# coding=UTF-8
2.vscode中英文混合输出时中文显示为ascii码。
原因:python2编译运行代码会出现问题,由于系统中自带了python2,然后vscode又没有使用我安装的python3编译代码,所以需要更改一下vscode的配置。
更改后编译显示正常。
3.for循环直接更改list内容不成功
以下方法不能成功更改列表内容
需要用这种写法
4.在同一行逐字打印
python默认打印换行,但是如果用
1 | print(i, end=' ') |
的话在终端会过一会一起输出,这是因为终端执行默认是把一行的内容缓存到一起,然后才打印。
我们在运行代码时,加上-u
参数,即立即打印不缓存,即可正常。
1 | python3 -u tinyGame.py |
5.vscode一直提示pylint安装不成功
需要换源,换成淘宝源
1.在
/etc/
目录下边创建pip.conf
文件
2.在打开的
pip.conf
文件内写入以下内容:
1 | [global] |
保存退出,可以看到下载速度显著提升。
6.python判断用户键盘输入的是回车后执行逻辑
不能使用
1 | if(input() == '\n'): |
需要使用
1 | if(input() == ''): |
原因:input()
函数中,默认是把回车键删除,所以最后输入的内容只剩下空的字符串。