一、Python 语言介绍1、Python 发展历史2、Python 简介3、Python 特点4、Python 的能力二、Linux 编译安装Python31、源码安装1、安装依赖软件包2、下载3、解压安装4、配置共享库文件5、测试python36、测试 pip32、 配置使用国内源安装第三方模块1、创建配置文件补充内容四、变量1、变量的声明2、变量命名规则3、变量命名潜规则4、变量赋值5、Python 中的变量是什么6、变量的多元赋值7、Python 中对象(变量的值)都有三个特性五、运算符1、算数运算2、比较运算3、赋值运算4、逻辑运算5、成员运算六、流程控制语句1、判断2、嵌套3、循环4、迭代6、作业
一、Python 语言介绍
1、Python 发展历史
Python 是由 Guido van Rossum (吉多·范罗苏姆)在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。Python 本身也是由诸多其他语言发展而来的,这包括 ABC、lisp、perl、C、C++、Unix shell 和其他的脚本语言等等。像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。现在 Python 是由一个核心开发团队在维护,Guido van Rossum(吉多·范罗苏姆) 仍然占据着至关重要的作用,指导其进展。
2、Python 简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议。
3、Python 特点
-
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
-
2.易于阅读:Python代码定义的更清晰。
-
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
-
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
-
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
-
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
-
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
-
8.数据库:Python提供所有主要的商业数据库的接口。
-
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
-
10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
4、Python 的能力
2019年最新的TIOBE排行榜显示,Python 仅次于 C 排行在第三位。
编程语言TIOBE排行榜
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
二、Linux 编译安装Python3
1、源码安装
1、安装依赖软件包
yum -y install gcc gcc-c++ zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel libffi-devel # python3.7版本安装
前提条件是:你的系统已经安装了开发工具包。
2、下载
curl -o python3.6.5.tgz https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz // 或者 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
3、解压安装
tar -xf Python-3.6.5.tgz cd Python-3.6.5/
进入目录后,执行下面的命令
修改文件 Python-3.6.5/Modules/Setup.dist
, 去掉如下几行的注释 :
readline readline.c -lreadline -ltermcap SSL=/usr/local/ssl _ssl _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L$(SSL)/lib -lssl -lcrypto
或者在 shell
命令提示符下执行如下命令:
sed -ri 's/^#readline/readline/' Modules/Setup.dist sed -ri 's/^#(SSL=)/\1/' Modules/Setup.dist sed -ri 's/^#(_ssl)/\1/' Modules/Setup.dist sed -ri 's/^#([\t]*-DUSE)/\1/' Modules/Setup.dist sed -ri 's/^#([\t]*-L\$\(SSL\))/\1/' Modules/Setup.dist
开始编译安装
./configure --enable-shared --prefix=/usr/local/python3 make -j 2 && make install
--enable-shared 指定安装共享库,共享库在使用其他需调用python的软件时会用到,比如使用
mod_wgsi
连接Apache与python时需要。
4、配置共享库文件
为所有用户设置共享库目录
用 vim 编辑器打开配置文件 /etc/profile.d/python3.sh
vim /etc/profile.d/python3.sh
在文件末尾写上如下内容:
# python3.6 共享库目录 export PATH=$PATH:/usr/local/python3/bin
编辑文件 /etc/ld.so.conf.d/python3.conf
,并且添加如下内容:
/usr/local/python3/lib
保存退出文件后, 执行如下命令 加载配置信息使其生效
ldconfig
执行如下命令,使环境变量生效
source /etc/profile.d/python3.sh
5、测试python3
$ python3 Python 3.6.3 (default, Dec 17 2017, 04:11:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print('qf') qf >>> exit()
输入
exit()
即可退出 python3
6、测试 pip3
一般情况下你不需要执行下面的安装命令。
[root@newrain ~]# pip3 -V pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)
假如上面显示的含有 python3.6 就没问题了,说名 pip3 安装的模块会安装到上面显示的目录下
2、 配置使用国内源安装第三方模块
1、创建配置文件
配置 pip3 使用国内源
mkdir ~/.pip vi ~/.pip/pip.conf # Windows 下使用 pip.ini (1):在windows文件管理器中,输入 %APPDATA% (2):会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件
写入如下内容:
[global] timeout = 6000 index-url=https://mirrors.aliyun.com/pypi/simple
豆瓣源: https://pypi.douban.com/simple/
阿里源: https://mirrors.aliyun.com/pypi/simple
清华: https://pypi.tuna.tsinghua.edu.cn/simple
阿里云: http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学: http://pypi.hustunique.com/
山东理工大学: http://pypi.sdutlinux.org/
补充内容
一,我们操作代码的方式 终端 文件 终端 字符串需要用引号
文件 文件名以.py结尾 解释器申明 终端执行文件
输入命令的执行流程 属于代码-->解释器--->语法词法分析
在 /root 目录下创建 hello.py 文件,内容如下:
print("hello,world")
执行 hello.py 文件,即: python /root/hello.py
二、解释器
上一步中执行 python3 /root/hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。
如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py
,那么就需要在 hello.py 文件的头部指定解释器,如下:
#!/usr/bin/env python3 print("hello,world")
如此一来,执行: ./hello.py
即可。
ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py
#!/usr/bin/env python3 print("hello,世界")
三、内容编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。 显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多 UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话: 报错:ascii码无法表示中文
四、注释
-
Shell 注释方法:
-
单行注释: # 被注释内容
-
多行注释: <<! 备注释内容 !
-
-
Python 注释方法
-
单行注释:# 被注释内容
-
多行注释:""" 被注释内容 """
-
五、执行脚本传入参数
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
-
Python内部提供的模块
-
业内开源的模块
-
程序员自己开发的模块(温馨提示,python的模块可以是c语言等)
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print(sys.argv)
六、输入
#!/usr/bin/env python # -*- coding: utf-8 -*- # 将用户输入的内容赋值给 name 变量 name = input("请输入用户名:") # 打印输入的内容 print(name)
四、变量
1、变量的声明
python语言是动态语言
-
变量不需要事先声明
-
变量的类型不需要声明
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的 类型
是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是其指向的具体的值。
2、变量命名规则
可以包含以下字符
-
大小写字母(a-z,A-Z)
-
变量名区分大小写; a 和 A 是不同的变量
-
数字(0-9)
-
下划线(_) 不可以以数字开头
3、变量命名潜规则
-
不要以单下划线和双下划线开头;如:_user或 __user
-
变量命名要易读;如:user_name,而不是username
-
不用使用标准库中(内置)的模块名或者第三方的模块名
-
不要用这些 Python 内置的关键字:
>>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] > 上面打印出来的数据在 Python 中被称为列表, 列表是 Python中一种数据结构。关于数据结构,后面的章节会详细说明。 >列表的都是 Python3 中的关键字。 #可以使用一下方法验证,返回 True 就是 Python 的关键字 >>> keyword.iskeyword('del') True >>>
4、变量赋值
python 中使用等号 =
对变量进行赋值,。
等号左边被称为变量名,等号右边称为变量的值,确切的说是对象
n = 5
5、Python 中的变量是什么
在 python 中究竟该如何正确理解变量的赋值过程呢?
s = 'hello'
以上的变量赋值,应该说成把变量分配给对象更合理。
hello
这个字符串对象会在内存中先被创建,之后再把变量名 s
分配给这个对象。
所以要理解 Python 中的变量赋值,应该始终先看等号右边。
对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。
变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字。 比如: 张三 和 小张 指的都是同一个人
请看下面的代码示例:
a = 1 b = a a = 2 print(b) # b 会是 ?
a = 1
时如下图:
b = a
时如下图:
a = 2
时如下图:
上面的 b = a
我们称它为 传递引用,此时对象会拥有两个名称(标签) ,分别是 a
和 b
6、变量的多元赋值
在 Python3 中你可以这样给变量赋值
In [2]: x, y, z = 1, 2, 3 In [3]: x Out[3]: 1 In [4]: y Out[4]: 2 In [5]: z Out[5]: 3
当然也可以这样
In [10]: a, b, c = 'abc' In [11]: a Out[11]: 'a' In [12]: b Out[12]: 'b' In [13]: c Out[13]: 'c'
假如你需要对一个序列类型中的数据进行一一解开赋值,那就需要等号左边的变量名和序列类型数据中的元素个数相同。
这种多元赋值方式在 Python 中也可以称为元组解包。
7、Python 中对象(变量的值)都有三个特性
# 唯一标识,是对象在内存中的整数表示形式,在 CPython 中可以理解为# 内存地址 # 可以用 id 这个函数查看 id(10) # 直接给一个对象 id(n) # 给你变量名 # 类型, 对象都有不同的类型,用 type 这个函数查看 type(10) type(n) # 值,对象本身 10
五、运算符
1、算数运算
#!/usr/bin/python3 a = 21 b = 10 c = 0 c = a + b print ("c 的值为:", c) c = a - b print ("c 的值为:", c) c = a * b print ("c 的值为:", c) c = a / b print ("c 的值为:", c) c = a % b print ("c 的值为:", c) # 修改变量 a 、b 、c a = 2 b = 3 c = a**b print ("c 的值为:", c) a = 10 b = 5 c = a//b print ("c 的值为:", c) 去掉小数部分,不是四舍五入
c 的值为: 31 c 的值为: 11 c 的值为: 210 c 的值为: 2.1 c 的值为: 1 c 的值为: 8 c 的值为: 2
2、比较运算
运算符 | 描述 | 实例 |
---|---|---|
== | 等于-比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于-比较两个对象是否不相等 | (a != b) 返回 true。 |
<> | 不等于-比较两个对象是否不相等 | (a <> b) 返回 true。这个运算符类似 !=。已废弃 |
> | 大于-返回x是否大于y | (a > b) 返回 False。 |
< | 小于-返回x是否小于y。 | (a < b) 返回 true。 |
>= | 大于等于-返回x是否大于等于y | (a >= b) 返回 False。 |
<= | 小于等于-返回x是否小于等于y | (a <= b) 返回 true。 |
3、赋值运算
运算符 | 描述 | 例子 |
---|---|---|
= | 简单赋值运算符 | c = a + b |
+= | 加法赋值运算符 | c += a |
-= | 减法赋值运算符 | c -= a |
*= | 乘法赋值运算符 | c *= a |
/= | 除法赋值运算符 | c /= a |
%= | 取模赋值运算符 | c %= a |
请注意,这只是一个基于图片信息的简化
#!/usr/bin/python3 a = 21 b = 10 c = 0 if ( a == b ): print ("a 等于 b") else: print ("a 不等于 b") if ( a != b ): print ("a 不等于 b") else: print ("a 等于 b") if ( a < b ): print ("a 小于 b") else: print ("a 大于等于 b") if ( a > b ): print ("a 大于 b") else: print ("小于等于 b") # 修改变量 a 和 b 的值 a = 5; b = 20; if ( a <= b ): print ("a 小于等于 b") else: print ("a 大于 b") if ( b >= a ): print ("b 大于等于 a") else: print ("b 小于 a")
1 - a 不等于 b 2 - a 不等于 b 3 - a 大于等于 b 4 - a 大于 b 5 - a 小于等于 b 6 - b 大于等于 a
4、逻辑运算
#!/usr/bin/python3 a = 10 b = 20 if ( a and b ): print ("变量 a 和 b 都为 true") else: print ("变量 a 和 b 有一个不为 true") if ( a or b ): print ("变量 a 和 b 都为 true,或其中一个变量为 true") else: print ("变量 a 和 b 都不为 true") # 修改变量 a 的值 a = 0 if ( a and b ): print ("变量 a 和 b 都为 true") else: print ("变量 a 和 b 有一个不为 true") if ( a or b ): print ("变量 a 和 b 都为 true,或其中一个变量为 true") else: print ("变量 a 和 b 都不为 true") if not( a and b ): print ("变量 a 和 b 都为 false,或其中一个变量为 false") else: print ("变量 a 和 b 都为 true")
1 - 变量 a 和 b 都为 true 2 - 变量 a 和 b 都为 true,或其中一个变量为 true 3 - 变量 a 和 b 有一个不为 true 4 - 变量 a 和 b 都为 true,或其中一个变量为 true 5 - 变量 a 和 b 都为 false,或其中一个变量为 false
5、成员运算
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回True,否则返回False。 | x在y序列中,如果x在y序列中返回True。 |
not in | 如果在指定的序列中没有找到值返回True,否则返回False。 | x 不在 y序列中,如果x不在y序列中返回True。 |
#!/usr/bin/python3 a = 10 b = 20 list = [1, 2, 3, 4, 5 ]; if ( a in list ): print ("变量 a 在给定的列表中 list 中") else: print ("变量 a 不在给定的列表中 list 中") if ( b not in list ): print ("变量 b 不在给定的列表中 list 中") else: print ("变量 b 在给定的列表中 list 中") # 修改变量 a 的值 a = 2 if ( a in list ): print ("变量 a 在给定的列表中 list 中") else: print ("变量 a 不在给定的列表中 list 中")
1 - 变量 a 不在给定的列表中 list 中 2 - 变量 b 不在给定的列表中 list 中 3 - 变量 a 在给定的列表中 list 中
六、流程控制语句
1、判断
基本的语法格式:
#if 条件语句: # 注意这里必须以英文的冒号结束 # 条件语句为真时,执行的语句 n = input("输入数字>>:") n = int(n) # input 接收到的数据,都是字符串类型 if n == 5: print('相等') n = input("输入数字>>:") n = int(n) if n == 5: print('相等') else: # else 后边必须有英文的冒号 print('No') #_*_ coding:utf-8 _*_ n = input("输入数字>>:") # 必须输入数字来测试 if not n: # 如果为空 print("空值") # 输出 空值 else: #否则 n = int(n) # n 转化为整型 if n == 5: # 如果等于5 print('ok') # 输出ok elif n > 5: # 如果 大于5 print('大了') # 输出大了 else: # 否则 print('小了') #输出小了
2、嵌套
n = input("输入数字>>:") if n.isdigit(): f_n = int(n) if f_n == 5: print('ok') elif f_n > 5: print('大了') else: print('小了') else: print('请输入数字')
3、循环
while True: n = input("输入数字>>:") n = int(n) if n == 5: print('相等') break elif n > 5: print('大了') else: print('小了')
4、迭代
-
什么是迭代
迭代 是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。
每一次对过程的重复被称为一次“迭代”。
-
for 循环(英语:for loop)
是一种编程语言的迭代陈述,能够让程式码反复的执行。
它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器。
这使得for循环能够知道在迭代过程中的执行顺序,记住上次被循环元素的位置。
for i in 'hello world': print(i)
range(n)
产生一个可被循环的整数序列,默认序列的元素从 零 开始
产生的元素数量是 n
个
for i in range(5): print(i)
break 和 continue
for i in range(0, 10): print(i) if i < 3: inp_num = int(input(">>:").strip()) # inp_num = int(inp_num) if inp_num == 15: print('You get it') break elif inp_num > 15: print("高了") else: print("低了") else: print("Game over") break for i in range(2, 10, 2): print("循环到", i) if i == 4: continue print(i) if i == 6: break
6、作业
1、使用while循环输出 1 2 3 4 5 6 8 9 10
2、求1-100的所有数的和
3、输出 1-100 内的所有奇数
4、求1-2+3-4+5 ... 99的所有数的和
5、用户登陆(三次机会重试)
6、打印九九乘法表 shell python
扩展
windows
linux
yum安装的直接使用
然后更换源
cd
vim .pip/pip.conf
[global]
index-url = Simple Index
[install]
trusted-host=mirrors.aliyun.com
就可以使用pip了
编译安装会出现三个问题
在linux中本身就有python2,但是各个版本不兼容,所以这里下载的是python3
问题一
原因
解决方法
在里面写lib的绝对路径
然后ldconfig执行一下
然后再执行 。。。。。/python3就可以了
问题二
直接执行命令不好使
解决方法:修改PATH环境变量
写入:
export PATH=$PATH:/usr/local/python3/bin
然后执行命令: source /etc/profile.d/python3.sh
问题三
如果直接下载就用的国外的源,毕竟这也是人家国外开发的,所以要更改国内的源,这里我们使用aliyun的
法一
法二(永久)
永久修改
cd进入家目录,创建一个隐藏文件
mkdir .pip
进入里面创建一个文件
vim pip.conf
[global]
index-url = Simple Index
[install]
trusted-host=mirrors.aliyun.com