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。

适用方面

  • 首选是网络应用,包括网站、后台服务等等;
  • 其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
  • 另外就是把其他语言开发的程序再包装起来,方便使用。

缺点

  1. 第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。(但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,py需要0.1秒)
  2. 第二个缺点就是代码不能加密。如果要发布你的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

+表示列表链接,*表示列表重复操作,和字符串类似。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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%的数据,这还要求了,datalabel是对应的。接下来,讲讲我的做法。创建一个索引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()函数中,默认是把回车键删除,所以最后输入的内容只剩下空的字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值