python 基础学习
作者:互联网
图片显示不全请到我的个人github博客查看,有时间再更新图片。
背景
来历
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/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXMdUdwq-1608884425017)(python-学习-基础学习/image-20201215141014778.png)]
1.选择一个合适的版本下载,这里选择3.9.1。
wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-trjLSUVE-1608884324976)(python-学习-基础学习/image-20201215141615480.png)]
2.解压
tar -zxvf Python-3.9.1.tgz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4EF3yESl-1608884324978)(python-学习-基础学习/image-20201215141917396.png)]
3.编译安装
创建安装目录
sudo mkdir -p /usr/local/python3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdFzB3ms-1608884324980)(python-学习-基础学习/image-20201215143206557.png)]
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)
Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表。一般用configure --prefix= 来制定安装目录,便于后期管理。
./configure --prefix=/usr/local/python3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpmk2pTB-1608884324982)(python-学习-基础学习/image-20201215143525653.png)]
编译
make
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kk9NWUWi-1608884324983)(python-学习-基础学习/image-20201215145333244.png)]
安装
sudo make install
建立软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
建立pip3(python包管理工具)的软链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2Q7DLvm-1608884324984)(python-学习-基础学习/image-20201215150717817.png)]
将/usr/local/python3/bin 加入环境变量
vim ~/.bash_profile
输入
export PATH=$PATH:$HOME/bin:/usr/local/python3/bin
测试是否安装成功
python3 -V
pip3 -V
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1DEagL7u-1608884324985)(python-学习-基础学习/image-20201215150010869.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MeJwcjH-1608884324985)(python-学习-基础学习/image-20201215150704069.png)]
python语法
基础语法
python是大小写敏感的语言,写错大小写会报错。
输入输出
print('100 + 200 =', 100 + 200) //py把print中的逗号翻译为空格
print( x, end=" " ) //输出默认换行,不换行需要加上end=""
print( x, end="," ) //或者用end在输出的末尾添加不同的字符
name = input() //输入变量
name = input('please enter your name: ') //带提示的输入
注释
单行注释 #
# 注释xxxxxx
多行注释用’’'或"""
'''
注释1
注释2
'''
缩进
python中不规定缩进的空格数,但是同一个代码块必须包含相同的缩进空格数。否则将会报错
多行语句
python中如果语句过长需要换行需要用反斜杠将换行符注释掉。
sum = num1 + \
num2 + \
num3
基本数据类型
python中变量不需要声明,每个变量使用前必须赋值。
多个变量赋值可以连等,也可以用逗号为多个对象指定不同变量,如:
a, b, c = 1, 2, “hello”
python3有如下六种标准数据类型:
- **不可变数据(3 个):**Number(数字)、String(字符串)、Tuple(元组);
- **可变数据(3 个):**List(列表)、Dictionary(字典)、Set(集合)。
查看变量类型方法:
type(a)
isinstance(a, int)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kt7KUdDQ-1608884324986)(python-学习-基础学习/image-20201215161510545.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtQLerHs-1608884324987)(python-学习-基础学习/image-20201215161532281.png)]
数字
有四种数字类型: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]范围内。 |
字符串
字符串截取方式:
str[a:b]
字符串链接用+
字符串的复制用*
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRtZfBYM-1608884324988)(python-学习-基础学习/image-20201215162831539.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-By4bYc9n-1608884324989)(python-学习-基础学习/image-20201215162842085.png)]
字符串索引方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UoncJmzo-1608884324990)(https://static.runoob.com/wp-content/uploads/123456-20200923-1.svg)]
python字符串不能被改变,如a[0] = 'x’会报错。
列表
列表可以改变,也可以和字符串一样截取。
初始化定长数组:
b =[0 for n in range(10)] #也可以b = [0]*10
+
表示列表链接,*
表示列表重复操作,和字符串类似。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yAf3C1xI-1608884324991)(python-学习-基础学习/image-20201215171211961.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFmYrCF5-1608884324992)(python-学习-基础学习/image-20201215171222202.png)]
删除列表元素
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)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
集合声明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-em3uTsuI-1608884324993)(python-学习-基础学习/image-20201215175508478.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upQv48oe-1608884324993)(python-学习-基础学习/image-20201215175532649.png)]
可以看到,集合会自动将重复元素删除,只留下互补相同的元素,和中学数学中学到的集合概念一样。
集合的差、交、并运算。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0C3dx00-1608884324994)(python-学习-基础学习/image-20201216092226486.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygyK6XaA-1608884324995)(python-学习-基础学习/image-20201216092247025.png)]
字典
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
在同一个字典中,键(key)必须是唯一的。
元素是通过键来存取的,而不是通过偏移存取。
字典赋值时,也必须先声明,否则会报错。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wTtQAOoH-1608884324996)(python-学习-基础学习/image-20201216093121003.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFOTeKV6-1608884324996)(python-学习-基础学习/image-20201216093132877.png)]
(未声明dict)
定义dict后,程序正确执行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKzAvt6y-1608884324997)(python-学习-基础学习/image-20201216093209927.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DMIXC8EO-1608884324998)(python-学习-基础学习/image-20201216093221614.png)]
其他操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HVZ5IG9u-1608884324999)(python-学习-基础学习/image-20201216093538056.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CEjYzSAD-1608884325000)(python-学习-基础学习/image-20201216093648125.png)]
用dict构造函数定义字典。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6F6t1ATl-1608884325000)(python-学习-基础学习/image-20201216094212726.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Kh8OdAj-1608884325001)(python-学习-基础学习/image-20201216094225663.png)]
条件控制语句
1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块;
2、Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else;
3、可以if语句嵌套。
python模块
日期和时间
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
import time
随机数
import random
1. 从一个list中随机选取一个元素
import random
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
random.choice(data) # 随机选取一个元素
2. 从一个list中随机选取多个元素
import random
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
sample_num = 5
random.sample(data, sample_num) # 结果['a', 'd', 'b', 'f', 'c'],每次运行结果不同。
3. 从data和label中随机选取多个元素
在制作数据集时,可能会有只用50%的数据的要求,所以,我们从原数据集中随机抽取30%的数据,这还要求了,data
和label
是对应的。接下来,讲讲我的做法。创建一个索引list,在索引list中选取N个索引,根据这些索引将data和label的数据提取出来。
import random
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
label = [0, 1, 2, 3, 4, 5, 6, 7]
sample_num = int(0.5 * len(data)) # 假设取50%的数据
sample_list = [i for i in range(len(data))] # [0, 1, 2, 3, 4, 5, 6, 7]
sample_list = random.sample(sample_list, sample_num) #随机选取出了 [3, 4, 2, 0]
sample_data = [data[i] for i in sample_list] # ['d', 'e', 'c', 'a']
sample_label = [label[i] for i in label] # [3, 4, 2, 0]
linux脚本式编程
方法一:
python3 test.py
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1t36Z5Lu-1608884325002)(python-学习-基础学习/image-20201216094953594.png)]
方法二:
先用
which python3
查看python3路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKz3USJm-1608884325003)(python-学习-基础学习/image-20201216100316992.png)]
然后在脚本顶部(第一行)添加以下命令让Python脚本可以像SHELL脚本一样可直接执行:
#! /usr/bin/python3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QIkaWsGW-1608884325004)(python-学习-基础学习/image-20201216100450600.png)]
然后修改脚本权限,使其有执行权限,命令如下:
$ chmod +x test.py
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKJt8Ph9-1608884325004)(python-学习-基础学习/image-20201216095227092.png)]
执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRhfyWz5-1608884325005)(python-学习-基础学习/image-20201216100518745.png)]
遇到的问题
1.输出中文报错。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LpYLezKO-1608884325007)(python-学习-基础学习/image-20201215170810402.png)]
原因:python默认使用ascii编码,使用中文要在文件顶部写上# coding=UTF-8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2hdEnvCD-1608884325007)(python-学习-基础学习/image-20201215170929958.png)]
2.vscode中英文混合输出时中文显示为ascii码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gBdyZ9Fj-1608884325008)(python-学习-基础学习/image-20201216091806856.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7HXwkFg-1608884325009)(python-学习-基础学习/image-20201216091716442.png)]
原因:python2编译运行代码会出现问题,由于系统中自带了python2,然后vscode又没有使用我安装的python3编译代码,所以需要更改一下vscode的配置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjcnuVY2-1608884325009)(python-学习-基础学习/image-20201216092015590.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lr2Ntj9c-1608884325011)(python-学习-基础学习/image-20201216092047062.png)]
更改后编译显示正常。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PsJUrajY-1608884325012)(python-学习-基础学习/image-20201216092126921.png)]
3.for循环直接更改list内容不成功
以下方法不能成功更改列表内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PeO2CuGX-1608884325012)(python-学习-基础学习/image-20201217102735505.png)]
需要用这种写法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NSMcPXH-1608884325013)(python-学习-基础学习/image-20201217102924217.png)]
4.在同一行逐字打印
python默认打印换行,但是如果用
print(i, end=' ')
的话在终端会过一会一起输出,这是因为终端执行默认是把一行的内容缓存到一起,然后才打印。
我们在运行代码时,加上-u
参数,即立即打印不缓存,即可正常。
python3 -u tinyGame.py
5.vscode一直提示pylint安装不成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RorKqOUe-1608884325014)(python-学习-基础学习/image-20201217150308466.png)]
需要换源,换成淘宝源
1.在
/etc/
目录下边创建pip.conf
文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MyGToht-1608884325015)(python-学习-基础学习/image-20201217151439419.png)]
2.在打开的
pip.conf
文件内写入以下内容:
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
保存退出,可以看到下载速度显著提升。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cU4loh0t-1608884325016)(python-学习-基础学习/image-20201217153017125.png)]
6.python判断用户键盘输入的是回车后执行逻辑
不能使用
if(input() == '\n'):
print('hello')
需要使用
if(input() == ''):
print('hello')
原因:input()
函数中,默认是把回车键删除,所以最后输入的内容只剩下空的字符串。
标签:img,python,源站,基础,学习,外链,防盗链,图片 来源: https://blog.csdn.net/weixin_43916065/article/details/111688255