python的创始人:Guido Van Rossumpython
编程语言主要从如下几个角度进行分类:编译型,静态型,动态性,强类型定义语言和弱类型定义语言linux
(1)编译型:有一个负责翻译的程序来对咱们的源代码进行转换,生成对应的可执行代码,这个过程就是编译(Compile),而负责编译的程序就被称为编译器(Compiler)c++
(2)一般咱们所说的动态语言,静态语言是指动态类型语言和静态类型语言程序员
(3)动态类型语言:是指在运行期间采起作数据类型检查的语言。即在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。典型的是python和Rubyweb
(4)静态类型语言:数据类型是在编译期间检查的,也就是说在写程序的时候要声明全部变量的数据类型。C/C++是静态类型语言的典型表明,其余的静态类型语言还有C#,JAVA正则表达式
网络应用、科学运算、GUI程序、系统管理工具、其余等等算法
Web应用开发 Python常常被用于Web开发。好比,经过mod_wsgi模块,Apache能够运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通讯。一些Web框架,如Django,TurboGears,web2py,Zope等,可让程序员轻松地开发和管理复杂的Web程序。 操做系统管理、服务器运维的自动化脚本 在不少操做系统里,Python是标准的系统组件。 大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,能够在终端下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,好比Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操做系统功能的库。经过pywin32这个第三方软件 包,Python可以访问Windows的COM服务及其它Windows API。使用IronPython,Python程序可以直接调用.Net Framework。通常说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。 科学计算 NumPy,SciPy,Matplotlib可让Python程序员编写科学计算程序。 桌面软件 PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器。 服务器软件(网络软件) Python对于各类网络协议的支持很完善,所以常常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),而且提供了多种工具,被普遍用于编写高性能的服务器软件。 游戏 不少游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。 构思实现,产品早期原型和迭代 YouTube、Google、Yahoo!、NASA都在内部大量地使用Python。
优势:简单、开发效率高、高级语言、可移植性、可扩展性、可嵌入性sql
缺点:速度慢,可是相对的、代码不能加密、线程不能利用多CPU问题shell
优势 简单————Python是一种表明简单主义思想的语言。阅读一个良好的Python程序就感受像是在读英语同样,尽管这个英语的要求很是严格!Python的这种伪代码本质是它最大的优势之一。它使你可以专一于解决问题而不是去搞明白语言自己。 易学————就如同你即将看到的同样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。 免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你能够自由地发布这个软件的拷贝、阅读它的源代码、对它作改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为何Python如此优秀的缘由之一——它是由一群但愿看到一个更加优秀的Python的人创造并常常改进着的。 高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性————因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工做在不一样平台上)。若是你当心地避免使用依赖于系统的特性,那么你的全部Python程序无需修改就能够在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台! 解释性————这一点须要一些解释。一个用编译性语言好比C或C++写的程序能够从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程经过编译器和不一样的标记、选项完成。当你运行你的程序的时候,链接/转载器软件把你的程序从硬盘复制到内存中而且运行。而Python语言写的程序不须要编译成二进制代码。你能够直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,而后再把它翻译成计算机使用的机器语言并运行。事实上,因为你再也不须要担忧如何编译程序,如何确保链接转载正确的库等等,全部这一切使得使用Python更加简单。因为你只须要把你的Python程序拷贝到另一台计算机上,它就能够工做了,这也使得你的Python程序更加易于移植。 面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其余主要的语言如C++和Java相比,Python以一种很是强大又简单的方式实现面向对象编程。 可扩展性————若是你须要你的一段关键代码运行得更快或者但愿某些算法不公开,你能够把你的部分程序用C或C++编写,而后在你的Python程序中使用它们。 丰富的库————Python标准库确实很庞大。它能够帮助你处理各类工做,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其余与系统有关的操做。记住,只要安装了Python,全部这些功能都是可用的。这被称做Python的“功能齐全”理念。除了标准库之外,还有许多其余高质量的库,如wxPython、Twisted和Python图像库等等。 规范的代码————Python采用强制缩进的方式使得代码具备极佳的可读性。 缺点 运行速度,有速度要求的话,用C++改写关键部分吧。 国内市场较小(国内以python来作主要开发的,目前只有一些web2.0公司)。但时间推移,目前不少国内软件公司,尤为是游戏公司,也开始规模使用他。 中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容仍是只能看英语版。 构架选择太多(没有像C#这样的官方.net构架,也没有像ruby因为历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)。不过这也从另外一个侧面说明,python比较优秀,吸引的人才多,项目也多。
Cpython、IPython、PyPy、Jython、IronPython数据库
#安装sqlite-devel yum -y install sqlite-devel #安装依赖 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel #下载安装 wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz mkdir -p /usr/local/python3 tar -zxvf Python-3.6.1.tgz cd Python-3.6.1 ./configure --prefix=/usr/local/python3 make make install #软链接 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 #环境 vim ~/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/python3/bin export PATH source ~/.bash_profile
一、下载安装包 https://www.python.org/downloads/ 2、安装 默认安装路径:C:\python35 3、配置环境变量 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 如:原来的值;C:\python35,切记前面有分号
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个字节保存...
python2.x版本,默认支持的字符编码为ASCll python3.x版本,默认支持的是Unicode,不用声明字符编码能够直接显示中文
单行注视:# 被注释内容 多行注释:""" 被注释内容 """ 注释快捷键:选中被注释的内容,ctrl+?注释选中的内容,再次ctrl+?取消注释
3.关键字
python一些具备特殊功能的标示符,这就是所谓的关键字
关键字,是python已经使用的了,因此不容许开发者本身定义和关键字相同的名字的标示符
and as assert break class continue def del elif else except exec finally for from global if in import is lambda not or pass print raise return try while with yield
能够经过下面的方式查看关键字
import keyword print(keyword.kwlist)
age = 22 print('我今年%d岁'%age)
输出结果:我今年22岁
经常使用的格式化输出符号
变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
关键字不能声明为变量名
1.if-else
if 条件: 知足条件时要作的事情1 知足条件时要作的事情2 知足条件时要作的事情3 ...(省略)... else: 不知足条件时要作的事情1 不知足条件时要作的事情2 不知足条件时要作的事情3 ...(省略)...
实例:
name = input('请输入用户名字:') password = input('请输入密码:') if name == 'root' and password == '123': print('root login success') else: print('用户名或密码错误')
2.elif
if xxx1: 事情1 elif xxx2: 事情2 elif xxx3: 事情3
实例:
score = 77 if score>=90 and score<=100: print('本次考试,等级为A') elif score>=80 and score<90: print('本次考试,等级为B') elif score>=70 and score<80: print('本次考试,等级为C') elif score>=60 and score<70: print('本次考试,等级为D') elif score>=0 and score<60: print('本次考试,等级为E')
3.if嵌套
if 条件1: 知足条件1 作的事情1 知足条件1 作的事情2 ...(省略)... if 条件2: 知足条件2 作的事情1 知足条件2 作的事情2 ...(省略)...
1.while循环
while 条件: 条件知足时,作的事情1 条件知足时,作的事情2 条件知足时,作的事情3 ...(省略)...
实例:求1到100的总和
i = 1 sum = 0 while i <= 100: sum = sum + i i += 1 print("总和为%d"%sum) #总和为5050
2.while循环嵌套
while 条件1: 条件1知足时,作的事情1 条件1知足时,作的事情2 条件1知足时,作的事情3 ...(省略)... while 条件2: 条件2知足时,作的事情1 条件2知足时,作的事情2 条件2知足时,作的事情3 ...(省略)...
实例: 九九乘法表
i = 1 while i<=9: j=1 while j<=i: print("%d*%d=%-2d "%(j,i,i*j),end='') j+=1 print('\n') i+=1
结果:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3.for循环
在Python中 for循环能够遍历任何序列的项目,如一个列表或者一个字符串等。
for 临时变量 in 列表或者字符串等: 循环知足条件时执行的代码 else: 循环不知足条件时执行的代码
实例:
name = 'derek' for i in name: print(i)
结果:
d
e
r
e
k
4.break和continue
break的做用:用来结束整个循环
continue的做用:用来结束本次循环,紧接着执行下一次的循环
(1)实例:break的用法
i = 0 while i < 10: i += 1 if i == 5: break print(i)
结果:
1 2 3 4
(2)实例:continue的用法
i = 0 while i < 10: i += 1 if i == 5: continue print(i)
结果:
1 2 3 4 6 7 8 9 10
要理解深浅拷贝,需先弄懂下面的概念
变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝)
变量是一个系统表的元素,拥有指向对象的链接的空间
对象是被分配的一块内存,存储其所表明的值
引用是自动造成的从变量到对象的指针
在Python中不可变对象指:一旦建立就不可修改的对象,包括字符串,元祖,数字
在Python中可变对象是指:能够修改的对象,包括:列表、字典
1.不可变对象的赋值
a的值发生改变,b不会跟着改变
a = 1 b = a print(a) print(b) a = 3 print(a) print(b) 结果: 1 1 3 1
2.可变对象的赋值
a的值发生改变,b也跟着改变
a = [1,2] b = a print(a) print(b) a[0] = 3 print(a) print(b) 结果: [1, 2] [1, 2] [3, 2] [3, 2]
要想b的值不会改变,就要用到copy模块了
3.深浅拷贝
浅拷贝:只拷贝顶级的对象,或者说:父级对象
深拷贝:拷贝全部对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象
import copy #第一种:若是字典只有顶级对象(没有带嵌套) d = {'name':'derek','age':'22'} c1 = copy.copy(d) #浅拷贝 c2 = copy.deepcopy(d) #深拷贝 print(id(d),id(c1),id(c2)) #5794912 5794984 31939824 三个不一样对象 d['age'] = 25 print(d,c1,c2) #{'name': 'derek', 'age': 25} # {'name': 'derek', 'age': '22'} # {'name': 'derek', 'age': '22'} 源对象修改值的时候,深浅拷贝的对象值没有改变
import copy #第二种,字典中有嵌套 d = {'name':{'first':'zhang','last':'derek'}, 'job':['IT','HR']} c1 = copy.copy(d) c2 = copy.deepcopy(d) print(id(d),id(c1),id(c2)) #31157416 31940256 35946856 d['job'][0] = 'tester' print(d,c1,c2) # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']} # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']} # {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['IT', 'HR']}
源对象修改值的时候,浅拷贝的值跟着改变,深拷贝的值没变
结论: