一、Python的介绍
1、python的身世与应用
python的创始人为吉多.范罗苏姆(Guido van Rossum),大家也常叫他‘龟叔’,为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
2017年7月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等
目前python主要应用领域:
云计算: 云计算最火的语言,典型应用OpenStack
WEB开发:众多优秀的WEB框架,都可以用Python开发,典型的WEB框架Django
科学运算、人工智能:典型库Numpy,SciPy,Matplotlib,Enthought librarys,Pandas
同样的还有涉及到:金融、图像GUI(画图)、自动化运维……
python发展史
- 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
- 1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
- Python 3.6 - December 16,2016
2、Python是什么编程语言?
编程语言主要从以下几个分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。
最常见的几种语言的类型:
各种语言都有其优点,再回头说说编译型和解释型语言:
编译型:
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。适合大量数据运行!
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型:
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
动态语言和静态语言:
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类
型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
强类型定义语言和弱类型定义语言:
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
通过上面这些介绍,我们可以得出Python是一门动态解释性的强类型定义语言。
3、Python的优缺点
优点:
1.俗称‘胶水语言’,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库。今天我们就讲解其中的一个方面,用Python调用Shell命令。
2.Python 的定位是‘优雅’、‘明确’、‘简单’,所以Python程序看上去总是简单易懂。
3.高级语言、可移植性高、可扩展性(可以把部分代码用C或C++运行)、可嵌入型(可以把Python的程序嵌入到C中)。
缺点:
1.速度慢,Python相对Java和C语言所运行的速度是偏慢的。
2.代码不能加密,代码也是开源的
3.线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法
python2X和python3X的区别:
1.print方法有区别
python 3x print('内容')
python 2x print()或者print '内容'
2.编码方式不一样
python 3x 默认编码:utf-8
python 2x 默认编码: ascii 只包含英文字母和特殊字符以及数字
不支持中文
解决方式: 在头部添加一行代码
#-*- coding: utf-8 -*-
3、input不同
python2X: raw_input(),注意这里在python2中的print()函数,你输入什么类型接受的就是什么类型。
python3X: input()
4、Python的多种解释器
5、Python的安装:略
但是在windows中的命令行中调用一些Python中的脚本时,会出现命令不时内置命令,这时候需要设置环境变量Scrips C:\Users\RootUser\AppData\Local\Programs\Python\Python36\Scripts 当然也要设置Python程序所在目录的位置!
二、Python的基础知识
1、在Windows系统下,一般时在cmd中调用python,打开交互程序,进行编译
2、在linux情况下,上一步中执行 python d:t1.py 时,明确的指出 t1.py 脚本由 python 解释器来执行。如果想要类似于执行shell脚本一样执行python脚本,例: ./t1.py
,那么就需要在 hello.py 文件的头部指定解释器,如下:
#!/usr/bin/env python print("hello world")
3、内容编码:
Python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),而python3对内容进行编码的默认为utf-8。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号
各种编码的字节大小(8bit =1btyes):
4、注释:
当行注释:# 被注释内容
多行注释:'''被注释内容''',或者"""被注释内容"""
5、变量:
变量是什么? 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。
1 name = 'lixing'
变量的作用:昵称,其代指内存里某个地址中保存的内容: (当我们print(变量名)会给我们打印一个变量的地址)
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
6. 变量的赋值:
1 name1 = 'xiaowu' 2 name2 = 'wangli' # 图示如下
1 name1 = 'xiaowu' 2 name2 = name1
可以通过id()的方法打印变量的地址
变量命名的规则:
1、变量由字母、数字、下划线搭配组合而成
2、不可以用数字开头,更不能用纯数字
3、不能使用python中的关键字
4、不能用中文或则拼音、中间不能出现空格
5、名字要有可描述性,不能太长,区分大小写
6、运用驼峰体、和下划线
7、基础数据类型:
什么是数据类型? (给电脑要使用到的数据进行分类) 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分(就像表达方式有很多种,汉语、英语、韩语……,所以在以后学的字符串中可以很好的感受到只有同类型才能运算),你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,今天我们暂只讲3种, 数字、字符串、布尔类型 (注意,一定要知道同类型的数据类型才能相加减和拼接,或则选择转换)
7.1 、整数类型(int) # 在Python3中,不再有long数据类型,全都是int !!!
1 a = 2**64 2 print(type(a)) # 通过 type 可以查看数据类型
7.2 、字符串类型(str)在Python中,加了引号的字符都被认为是字符串!
1 age = '22' 2 age_2 = 22 3 4 print(type(age)) # str 数据类型 5 print(type(age_2)) # int 数据类型
7.3、布尔值(True 、False)
布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断。
1 >>> a=3
2 >>> b=5
3 >>>
4 >>> a > b #不成立就是False,即假
5 False
6 >>>
7 >>> a < b #成立就是True, 即真
8 True
相应的各种操作:
7.4、单引、双引以及多引号的使用:
1 msg = '''
2 今天我想写首小诗,
3 歌颂我的同桌,
4 你看他那乌黑的短发,
5 好像一只炸毛鸡。
6 '''
7 print(msg)
8
9 msg = "My name is Alex , I'm 22 years old!" #那单引号、双引号、多引号有什么区别呢?你需要考虑单双的配合
7.5、字符串拼接:(注意一定是同类型相加)
数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,what ?是的,但只能进行"相加"和"相乘"运算。
1 >>> name
2 'Xiao Zhu'
3 >>> age
4 '22'
5 >>>
6 >>> name + age #相加其实就是简单拼接
7 'Xiao Zhu22'
8 >>>
9 >>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起
7.6、格式化输出:
name = input('请输入您的姓名:') age = input('请输入您的年纪:') hobby = input('请输入您的爱好:') # 法一、简单的格式 # msg = ''' # ==========info of %s ============ # 姓名:%s # 年龄:%d # 爱好:%s # '''%(name,name,int(age),hobby) # print(msg) #法二、字典格式化输出 dic={'name':'jack','age':23,'hobby':'music'} msg1 = ''' ==========info of %(name)s ============ 姓名:%(name)s 年龄:%(age)d 爱好:%(hobby)s '''%dic print(msg1) #法三 注意当出现两个%,表示百分之几的时候如何处理,需要两个% msg2 = ''' ==========info of %s ============ 姓名:%s 年龄:%d 爱好:%s 我已经完成我目标的0.1%% '''%(name,name,int(age),hobby) print(msg2) # 法四 format方法, 当{}里没有数字时,会依次填充format中的数据,如果有则会按照索引填充 msg3=''' ==========info of {1} ============ 姓名:{3} 年龄:{0} 爱好:{1} 我已经完成我目标的0.1%% '''.format(name,name,int(age),hobby) print(msg3) # 法五,使用数字来填充,必须全部填充完 msg4=''' ==========info of {1}============ 姓名:{1} 年龄:{0} 爱好:{2} 我已经完成我目标的0.1%% '''.format(name,name,int(age),hobby) print(msg4) # 法六 括号内可以填写数据类型 msg5 = '我的姓名%s,我的年龄%s,我已经完成5%%'%('王里',23) print(msg5) # 法七 键值对映射 s = '我叫{name},今年{age},爱{hobby}'.format(age18,name='MT',hobby='打怪') print(s)
7.7、基本运算符:(图说明问题)
具体的讲解逻辑运算符的规则:
第一种:(优先级的讲解)(括号)> not > and > or
也就是说,在一道题中含有多个等级的运算,应该先算等级高的。转化为同一等级在从左至右运算。
两边都是bool值时: or 是要有一个为真,则全真;and 必须全真才为真,一假全假;
第二种:
两边都是数字时: (非0的所有数字都是真)
x or y , x为真,值就是x,x为假,值是y;x and y, x为真,值是y,x为假,值是x。也就是说or时,第一个正确就拦截下了,
、and 则正确了还得取下一个。
第三种:混合型(要注意优先级)
print(1 > 2 or 3 and 4) #4 print(2 or 2 > 3 and 4) #2 print(1 > 2 or 3 and 4) #4 print(6 or 2>1) #6 print(3 or 2>1) #3 print(0 or 5<4) #False print(5<4 or 3) #3 print(2>1 or 6) # True print(3 and 2>1) #True print(0 and 3>1) #0 print(2>1 and 3) #3 print(3>1 and 0) #0 print(3>1 and 2 or 2<3 and 3 and 4 or 3>2) #2
注意: in,not in :判断子元素是否在原字符串(字典,列表,集合)中:
1 print('喜欢' in 'dkfljadklf喜欢hfjdkas') # 返回一个布尔值 2 print('a' in 'bcvd') 3 print('y' not in 'ofkjdslaf')
练习题:
例1、1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 #True 过程解析: 1.先判断and部分 4 > 5 and 2 > 1 and 9 > 8 进一步分解结果为 False and True and True 最终结果为False,在继续左右2边的判断 1 > 1 or 3 < 4 or True or 7 < 6 进一步结果为 False or True or True or False 最终结果为True 例2、print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #False 例3、8 or 3 and 4 or 2 and 0 or 9 and 7 #8