Python简介
①Python前世今生
最新的TIOBE排行榜,Python赶超PHP占据第五!!!
Python可以应用于众多领域:
数据分析 组件集成
网络服务 图像处理
数值计算 科学计算等
Python在互联网企业中的使用情况:
Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA等。
互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
②为什么是Pythonn
C语言: 代码编译得到 机器码
其他语言: 代码编译得到 字节码
Python 和 C
对于使用:Python的类库齐全并且使用简洁
对于速度:Python的运行速度相较与C,绝逼是慢了
Python 和 Java、C#等
对于使用:Linux原装Python,其他语言没有
对于速度:Python在速度上可能稍显逊色
③Python 种类
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Jyhton
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行转换后的程序
IronPython
Python的C#实现,并且它将Python代码编译成C#中间代码(与Jython类似)
PyPy
Python实现的Python
RubyPython、Brython、Pyobjc .



Python 环境搭建
安装
windos - linux 安装相对比较简单
..略..
PS:linux 更新新版本的python后,会导致yum执行异常,只需重新指引原版本号就行
查看默认Python版本 python -V 1、安装gcc,用于编译Python源码 yum install gcc 2、下载源码包,https://www.python.org/ftp/python/ 3、解压并进入源码文件 4、编译安装 ./configure make all make install 5、查看版本 /usr/local/bin/python2.7 -V 6、修改默认Python版本 mv /usr/bin/python /usr/bin/python2.6 ln -s /usr/local/bin/python2.7 /usr/bin/python 7、防止yum执行异常,修改yum使用的Python版本 vi /usr/bin/yum 将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
Python 入门
一、Python 内部执行过程
自己写的.py文件是自定义模块
执行可以通过终端输入和文件两种方式来实现
读文件-->>词法-->>语法分析-->>编译-->>内容-->>执行
二、解释器
像shell一样,使用./脚本名时,其第一行顶格写明指向的解释器。
#!/usr/bin/env python
三、内部编码
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码):2**8=256 无法表示中文
Unicode(统一码、万国码、单一码):最少由 16 位来表示(2个字节),即:2 **16 = 65536
UTF-8,是对Unicode编码的压缩和优化:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存(好处节省磁盘空间)
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),
脚本中编码声明
#!/usr/bin/env python # -*- coding: utf-8 -*- print "你好,世界"
搞清楚了 ASCII、Unicode 和 UTF-8 的关系,我们就可以总结一下现在计算机系统通用的
字符编码工作方式:
在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转
换为 UTF-8 编码。
用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为 Unicode 字符到内存里,编辑完
成后,保存的时候再把 Unicode 转换为 UTF-8 保存到文件:
Python 执行 -->>读进内存 Unicode -->>写入磁盘 UTF-8
四、注释
单行:#被注释内容
多行:"""被注释内容"""
五、捕获脚本传入参数
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
Python内部提供的模块
业内开源的模块
程序员自己开发的模块
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print sys.argv
六、pyc文件
执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
两个命名一样的.py .pyc文件执行顺序
python内部将2文件比较,.py优先
七、变量
1、声明变量
name
=
"abc"
变量名:name
name变量的值:"abc"
变量的作用:昵称,其代指内存里某个地址中保存的内容
变量定义的三条规则:
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
以下关键字不能声明为变量名
['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']
PS 不同大小写的相同昵称的变量代表不用的变量名
2、变量赋值
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "abci" name2 = "123"
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "abc" name2 = name1
变量赋值会重新开通内存空间,变量的值指向内存地址的内容。
除以上情况外,python 自身优化功能:
Python是由C编写的,多个变量指向同一个值时,会经过预先规定好的范围进行优化,指向同一个值不再重新开通内存空间,而是指向同一个内存地址。
>>> a='abc' >>> b='abc' >>> id(a),id(b) (140692465670928, 140692465670928) >>> c=500 >>> d=500 >>> id(c),id(d) (18646952, 18646856) >>> e=10 >>> f=10 >>> id(e),id(f) (18371168, 18371168)
剖析Python源代码
八、用户交互
输入:raw_input() getpass.getpass()
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass # 将用户输入的内容赋值给 name 变量 name = raw_input(">>>") print name # 将用户输入的内容赋值给 name 变量 pwd = getpass.getpass(">>>") print pwd
九、流程控制和缩进
If ….else….
If … elif … elif … else
Split
Strip
Len()
While True:
Break
Continue
多层循环
#!/usr/bin/env python # -*- coding:utf-8 -*- import getpass name = raw_input("请输入用户名:") # 输入alex pwd = getpass.getpass("请输入密码:") if name == "eric" and pwd == "123": print "登录成功,普通,123" elif name == "tony" and pwd == "123": print "登录成功,超级,123" elif name == "alex" and pwd == "123": print "登录成功,超神,123" else: print "登录失败" """ 嵌套 if pwd == "123": if name == "eric": print "eric,普通" elif name == "tony": print " tony,超级" elif name == "alex": print " alex,超神" else: print "登录失败" else: print "登录失败" """ # eric,普通,123 # tony,超级,123 # alex,超神,123
#_*_ coding:utf-8 _*_ import random #导入模块 real_num = random.randrange(10) #设置随机数0~10 #guess_num = raw_input("Please guess the real number:") #输入的是字符串。 #计算机底层会吧字符串变成一个二进制来表示这个字符串,所以所以字符串和数字 #比较是不会出错的,但不能这么比较。 # print type(guese_num) ord(guess_num)#看二进制位 retry_num = 0 #定义输入的次数 while retry_num < 3: #循环每次提示输入,最多重试3次 guess_num = raw_input("Please guess the real number:").strip() if len(guess_num) == 0: #如果输入空格或者回车就重新输入 continue if guess_num.isdigit(): #判断字符串里包含数字是true,然后转成数字 guess_num = int(guess_num) else: print "you need input a integer instead of string" if guess_num > real_num: print "wrong!you need try smaller!" elif guess_num < real_num: print "wrong!you need try bigger!" else: print "you got it!" break #输入正确跳出整个while循环 retry_num +=1 #输入错误循环次数加1 else: #当猜错了执行下面命令 print "The real num is", real_num BUG: 输如“回车”保持,回车是不能转intraw_input后面输入“空格”“回车”会当做一个字符串处理,可以用用字符串内置的方法strip(),默认会把空格和回车都去掉。这里需要判断是不是一个“空格”“或者回车”,每一个字符长度是1,输入空格默认长度也是1
break----continue:
break是负责跳出整个循环,但continue是跳出本次循环,继续下一次循环。就是说,循环过程中,如果遇到continue,那这一次循环本应该执行的后面的代码就不执行了,直接跳过了,直接进行下一次循环了。
'数据类型按特征划分':{ '数字类型':{ '整型':['布尔型','长整型','标准整型'], '非整型':['双精度浮点型','复数','decimal(不是内建类型)'] }, '序列类型':['字符串str','元组tuple','列表list'], '映像类型':'字典dict', '集合类型':['可变集合set','不可变集合frozenset'] }, '数据类型按可变性划分':{ '可哈希的不可变数据类型':['数字类型','字符串str','元组tuple','不可变集合frozenset'], '可变数据类型':['字典dict','可变集合set','列表list'] }
1、数字
2 是一个整数的例子。 长整数 不过是大一些的整数。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是复数的例子。
int(整型)
>>> a = True >>> if a :print "it is ok" ... it is ok True 是1 Flase是0 C语言中需要定义整型类型,如果超出就报错,python可以自动转换。
"hello world"
字符串格式化
_author_ = "xu" name = raw_input("please input your name:") #age = int(raw_input("please input your age:")) age = input("please input your age:") sex = raw_input("please input your sex:") job = raw_input("please input your job:") print '''information of %s staff NAME:%s AGE:('%d') %f %.2f SEX:%s JOB:%s ''' %(name,name,age,age,age,sex,job)
PS: 字符串是 %s;整数 %d;浮点数%f
字符串常用功能:
•移除空白
•分割
•长度
•索引
•切片
4、列表
创建列表:
name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric'])
基本操作:
•索引
•切片
•追加
•删除
•长度
•切片
•循环
•包含
切片:
>>> shopping_list ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift'] >>> shopping_list[0:3] #取0到第3个元素,不包括第4个 ['Iphone', 'Mac', 'Bike'] >>> shopping_list[:3] #同上,取0到第3个元素,不包括第4个,0可以不写 ['Iphone', 'Mac', 'Bike'] >>> shopping_list[2:5] #取第3至第5个元素 ['Bike', 'Coffee', 'Car'] >>> shopping_list[:-3] #取从0至倒数第3个元素 ['Iphone', 'Mac', 'Bike', 'Coffee', 'Car'] >>> shopping_list[-3:] #取最后3个元素 ['Clothes', 'Food', 'Gift'] >>> shopping_list[1:8:2] #从1至8隔一个取一个,后面的2是步长,即每隔几个元素取一个 ['Mac', 'Coffee', 'Clothes', 'Gift'] >>> shopping_list[::2] #从头到位每隔一个取一个 ['Iphone', 'Bike', 'Car', 'Food']
5、元祖
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
基本操作:
•索引
•切片
•循环
•长度
•包含
tuple和list非常类似,但是tuple一旦初始化就不能修改。它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,但不能赋值成另外的元素。因为tuple不可变,所以代码更安全。
只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,) >>> t (1,)
6、字典(无序)
person = {"name": "mr.wu", 'age': 18} 或 person = dict({"name": "mr.wu", 'age': 18})
常用操作:
•索引
•新增
•删除
•键、值、键值对
•循环
•长度
for key in date : print key,date[key] 和下面的到的结果是一样的,但有区别。前者在循环取的时候效率相对高很多。 for key,val in date.items(): print key,val
十一、运算
http://www.runoob.com/python/python-operators.html
十二、文件的基本操作
file_obj = file("文件路径","模式")
很多时候我们写的程序都需要对文件进行读、写操作,比如你要分析日志、存储数据等,和其它语言一样,Python也内置了对文件进行操作的函数,下面一起来学习一下。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)
1. 除了r\w\a三种最常用处理文件的模式之外,还有以下几种:
2. r+ 以读写模式打开,其实跟追加的效果是一样的,即能读,又能写,但写其实是追加内容,但是如果文件不存在的话,不会像a一样创建文件,而是报错
3. w+ 以写读模式打开,
4. a+ 以追加和读的模式打开
5. rb,wb,ab 是指以二进制的模式打开并处理文件,当处理的文件是非文本文件时,就应该以二进制的格式打开文件,但有的同学说了,我不加b也不出错呀,没错,即使不加b,file也能正常处理二进制文件,但是当你的程序涉及到跨平台时,就可能有问题了,因为在Linux和Windows的换行标志位是不一样的,Linux是”\n”,Windows是”\r\n”,所以Windows上的文件在Linux下一般会在换行处显示^M,需要特别转换一下才能正常处理。 当你把Windows的文件copy到Linux并用Python file方法处理时,你在打开模式上加上b,Python就会帮你把^M转成\n,否则你的程序就不知道该在哪换行了喽!所以,我们建议,如果你预计可能会处理Windows上产生的文件,那还是默认就加上b吧。
文件其它方法
来源:https://www.cnblogs.com/jasperhsu/p/4911703.html