一、WHAT'S PYTHON ?
1、python 简介
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议 。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
2、谁在用 python
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
3、python 的种类
- Cpython
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
- Jyhton
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
- IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
- PyPy(特殊)
Python实现的Python,将Python的字节码字节码再编译成机器码。
- RubyPython、Brython ...
4、python 优缺点
优点:
* Simple Elegant Clear (简单、优雅、明确)
* 强大的第三方库
* 易移植
* 面向对象
* 可扩展
缺点:
* 速度慢(相对环境)
* 代码不能加密
二、PYTHON BASE
1、安装 python 环境
For Linux:
如果是ubuntu14.04+的版本,那么默认的python就是2.7+啦
1 tom@python:~$ cat /etc/issue 2 Ubuntu 14.04.3 LTS \n \l 3 4 tom@python:~$ python -V 5 Python 2.7.6
如果是centos6系列,那么请升级你的默认python到2.7+
1 1、安装gcc,用于编译Python源码 2 yum install gcc 3 2、下载源码包,https://www.python.org/ftp/python/ 4 3、解压并进入源码文件 5 4、编译安装 6 ./configure 7 make all 8 make install 9 5、查看版本 10 /usr/local/bin/python2.7 -V 11 6、修改默认Python版本 12 mv /usr/bin/python /usr/bin/python2.6 13 ln -s /usr/local/bin/python2.7 /usr/bin/python 14 7、防止yum执行异常,修改yum使用的Python版本 15 vi /usr/bin/yum 16 将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
For Windows:
1 1、下载安装包 2 https://www.python.org/downloads/ 3 2、安装 4 默认安装路径:C:\python27 5 3、配置环境变量 6 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 7 如:原来的值;C:\python27,切记前面有分号
2、python 代码的执行过程
Call :滕兰老师说要把第一次交给“hello world”
#!/usr/bin/env python # coding:utf-8print 'hi,yue bu ?'
python 文件中的代码会由解释器进行语法/词法的分析,没有问题后进行编译调入内存执行。
python在执行.py的文件时会生成一个同名.pyc的文件,这个文件是源文件编译后的字节码文件,源文件编译成自解码后再转为机器可读的二进制码交给CPU处理。
3、什么是解释器?
解释器(Interpreter),又译为直译器,能够把高级编程语言转译运行。说白了就是一翻译(也许是最近抗战片看多了,总会联想到穿着一半日本军装的汉奸翻译* *)
4、内容编码
python解释器在读取.py文件中的代码时,会对内容进行编码(默认是ASCII)
ASCII
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
1 >>> a = 'doudou' 2 >>> type(a) 3 <type 'str'>
UNICODE
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。Unicode的出现是因为ASCII的表示空间有限。
1 >>> name = u'小花' 2 >>> type(name) 3 <type 'unicode'> 4 >>> name 5 u'\u5c0f\u82b1' 6 >>> len(name) 7 2
UTF-8
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。针对unicode的可变长度的字符编码,在内存中字符是Unicode进行处理的,硬盘存储的时再转为utf-8。
1 >>> name 2 u'\u5c0f\u82b1' 3 >>> name =name.encode('utf-8') # 使用encode将unicode转为utf-8 4 >>> name 5 '\xe5\xb0\x8f\xe8\x8a\xb1' 6 >>> len(name) 7 6 8 >>> name = name.decode('utf-8') # 使用decode将utf-8转为unicode9 >>> name 10 u'\u5c0f\u82b1' 11 >>> len(name) 12 2
ps:在写脚本的时候默认是ASCII的编码方式,解释器读入内存的时候会转换为Unicode进行处理,如果出现中文就会提示不能识别,所以我们在写脚本的时候如果有中文,就要指定源文件以什么样的编码方式存储。
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 count = 0
5、编程风格
python 的代码编写会遵循Simple、Elegant、Clear的风格。
缩进统一
1 开头行不能有空格 2 不同级别代码缩进不同 3 同一级别代码缩进必须相同
6、注释
对编写的代码文件要一定的注释,保证简单、易读,方便他人方便自己。
单行注释:# *****
1 # copy and rename
多行注释/格式化输出:’’’ ****** ‘’’
1 ''' 2 copy 3 and 4 rename '''
三、流程控制
1、python模块的调用与传参的捕获
Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:
- Python内部提供的模块
- 业内开源的模块
- 程序员自己开发的模块
Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 import sys 5 print sys.argv
2、用户交互(输入内容)
raw_input、input
需求:要求用户输入用户名密码,正确后输出欢迎信息。
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 user_name = 'tom' 5 user_password = '123' 6 input_name = raw_input('User Name:') # raw_input() 默认把输入的内容当作字符串来处理 7 input_password = input('Password:') # input() 会将输入的内容保留原格式输出 8 if input_name == user_name and input_password == user_password: 9 print "Welcome to Linux!" 10 else: 11 print "Login invalid"
getpass 用户输入内容不可见
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 import getpass # 调用getpass模块 5 user_name = 'tom' 6 user_password = '123' 7 input_name = raw_input('User Name:') 8 input_password = getpass.getpass('Password:') # 引用功能,使用输入内容不可见 9 if input_name == user_name and input_password == user_password: 10 print "Welcome to Linux!" 11 else: 12 print "Login invalid"
3、if ...elif ...break/continue...else、while
需求:要求用户输入用户名密码,正确后输出欢迎信息,输错三次后退出。
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 import getpass 5 count = 0 6 user_name = 'tom' 7 user_name1 = 'doudou' 8 user_password = '123' 9 while count < 3: # while 条件 10 input_name = raw_input('User Name:') 11 input_password = getpass.getpass('Password:') 12 if input_name == user_name1: 13 print "This user is not available." 14 continue # continue 中断本次循环 15 elif input_name == user_name and input_password == user_password: 16 print "Welcome to Linux!" 17 break # break 退出循环 18 else: 19 print "Login invalid" 20 count += 1 # 一定要注意代码块的区分与缩进 条件+1
四、数据类型
1、数据类型分类
>>>单值:
数字:(digital)
整型:(integer)
长整型:(long)
符点型:(float)
复数:(complex)
字符串:(string)
布尔值:(boolean)
>>>集合:
列表:(list)
元组:(tuple)
字典:(dict)
哈希表:(hash)
2、变量:(variable)
变量,不只是一个可变化的量,它是一段内存空间的命名,指向内存地址的符号链接
1 变量标识符命名规范: 2 1、标识符的第一个字符必须是字母(大小写字母)或”_”(下划线) 3 2、标识符的其它部分可以由字母、”_”、数字(0-9)组成 4 3、标识符严格区分大小写 5 4、以下关键字不能被定义为变量['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']
定义变量与输出变量:
1 >>> a = 'source' 2 >>> a 3 'source'
变量有意思的指向
1 >>> a = 'job' 2 >>> b = 'name' 3 >>> a = b 4 >>> a 5 'name' 6 >>> b 7 'name' 8 >>> b = 'age' # 当变量b重新定义的时候,而a并没有跟着b变化而变化,原因是:当a=b时,a的值是b所指向内存空间中的‘name’,所以当b重新定义新值的时候,a依然指向‘name’ 9 >>> a 10 'name' 11 >>> b 12 'age'
3、字符串(string)
占位符:
1 >>> name = 'how old are you %s' % '24' # %s (str) %d (digital) 2 >>> name 3 'how old are you 24' 4 >>> mame = 'i am %s ,%d years old.' % ('xiaohua',24) # 多个占位符,需要在后面按顺序指定多个参数,只在内在中开辟一块空间。 5 >>> name 6 'how old are you 24' 7 # 也可以这样表示 8 >>> name = 'i am %s,%d years old.' 9 >>> name % ('xiaohua',24) 10 'i am xiaohua,24 years old.' 11 # 也可以这样表示,三种方式执行过程一样 12 >>> name = 'i am {0},age {1}' 13 >>> name.format('xiaohua',24) 14 'i am xiaohua,age 24'
索引/切片:
1 >>> name 2 'soure' 3 >>> name[0] 4 's' 5 >>> name[:0] 6 '' 7 >>> name[0:] 8 'soure' 9 >>> name[-1] 10 'e'
长度:len()
1 >>> len(name) 2 5 3 >>> print name[-1] 4 e 5 >>> print name[len(name)-1] # 最后一个值可以用len()做运算得到 6 e
去除空格:strip()
1 >>> name 2 ' home ' 3 >>> print name.strip() # strip() 去除字符串两端的空格 4 home 5 >>> print name.lstrip() # lstrip() 去除字符串左端的空格 6 home 7 >>> print name.rstrip() # rstrip() 去除字符串右端的空格 8 home
分割:split()
1 >>> names = 'xiaohua,xiaoli' 2 >>> names 3 'xiaohua,xiaoli' 4 >>> names.split(',') 5 ['xiaohua', 'xiaoli'] # 字符串分割后得到一个列表 6 >>> names.split('h') 7 ['xiao', 'ua,xiaoli'
4、列表:(list)
列表是数据的集合,列表内的元素可以被查询、修改
1 >>> b = ['job', 'salary', 'name',12,'shop','xyz','copy'] # 列表中的元素可以修改,支持增删改查
# 或 b = (['job', 'salary', 'name',12,'shop','xyz','copy']) 列表的创建会调用([])来完成 2 >>> b 3 ['job', 'salary', 'name',12,'shop','xyz','copy']
长度: len() 可以查看列表中元素的个数
1 >>> len(b) 2 3
索引:NAME[N] 可以查看元素在列表中的位置
1 >>> b[0] 2 'job' 3 >>> b[1] 4 'salary' 5 >>> b[-1] # -1就是倒数喽 6 'copy'
切片(slice) 切片指从列表中取出多个元素
1 >>> b[0:3] # 取从0到第3个元素,不包括第4个 2 ['job', 'salary', 'name'] 3 >>> b[:3] # 与上面一至 4 ['job', 'salary', 'name'] 5 >>> b[2:5] # 取从第3到第5个元素 6 ['name', 12, 'shop'] 7 >>> b[0:-3] # 取从第1至倒数第3个元素(之间) 8 ['job', 'salary', 'name', 12] 9 >>> b[-3:] # 取倒数第3个至最后一个元素 10 ['shop', 'xyz', 'copy'] 11 >>> b[1:8:2] # 取第1到最后,每隔一个取一个元素,最后:2是步长,以第隔几个元素取一个 12 ['salary', 12, 'xyz'] 13 >>> b[::2] # 从头到尾每隔一个取一个 14 ['job', 'name', 'shop', 'copy']
增加:NAME.append() 在列表后添加一个元素
1 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy'] 2 >>> b.append('sese') 3 >>> b 4 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy', 'sese']
删除1:NAME.pop() 删除列表中最后一个元素
1 >>> b.pop() 2 'sese' 3 >>> b 4 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy']
删除2:NAME.remove() 删除列表中一个元素,如果有相同元素,从左向右删除
1 >>> b.remove('xyz') 2 >>> b 3 ['job', 'salary', 'name', 12, 'shop', 'copy']
删除3:del NAME[索引]
1 >>> del b[3:7] # 删除3到7的元素(不包括7) 2 >>> b 3 ['shop', 'salary', 'name', 'copy', 'NAME', 12]
修改:NAME.insert(索引,新值 ) 修改目标位置的元素
1 >>> b 2 ['job', 'salary', 'name', 12, 'shop', 'copy'] 3 >>> b.insert(3,'NAME') 4 >>> b 5 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy']
查询:NAME.index() 查询元素在列表中的索引位置
1 >>> b.index('shop') 2 5
联结:‘’join
1 >>> name_list 2 ['xiaohua', 'xiaoming', 'old', 'yound', 'boy', 'doudou'] 3 >>> '_'.join(name_list) # join 用来指定列表内元素的联结方式,只对字符串生效 4 'xiaohua_xiaoming_old_yound_boy_doudou'
包含:''in
1 >>> 'doudou' in name_list 2 True # in 返回一个bool值,多用来做判断
统计:NAME.count() 统计元素在列表中的个数
1 >>> b.append('copy') 2 >>> b.count('copy') 3 2
合并:NAME.extend(NAME2) 将列表2合并到列表1中
1 >>> b1 = ['haha','heihei'] 2 >>> b .extend(b1) 3 >>> b 4 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy', 'copy', 'haha', 'heihei']
排序:NAME.sort()
1 >>> b 2 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy', 'copy', 'haha', 'heihei'] 3 >>> b.sort() 4 >>> b 5 [12, 'NAME', 'copy', 'copy', 'haha', 'heihei', 'job', 'name', 'salary', 'shop']
反转:NAME.reverse()
1 >>> b 2 [12, 'NAME', 'copy', 'copy', 'haha', 'heihei', 'job', 'name', 'salary', 'shop'] 3 >>> b.reverse() 4 >>> b 5 ['shop', 'salary', 'name', 'job', 'heihei', 'haha', 'copy', 'copy', 'NAME', 12]
循环: for
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 name_list = ['xiaohua','xiaoli','xiaoping'] 5 for item in name_list: 6 if item == 'xiaohua': 7 print 'yuanlaizoushiniya!' 8 continue # 当次循环不再继续 9 elif item == 'xiaoli' 10 print 'shaobing' 11 break # 退出循环 12 else: 13 pass # 写也可以,不写也可以
5、元组(tuple)
1 >>> name_tuple = (12,14,15,16,18) # 元组里的元素一旦初始化后,但不能修改 2 >>> name_tuple 3 (12, 14, 15, 16, 18) 4 >>> name_tuple = tuple((12,14,15,16,18)) 5 >>> name_tuple 6 (12, 14, 15, 16, 18)
索引/切片
1 >>> name_tuple[0] 2 'xiaohua' 3 >>> name_tuple[0:] 4 ('xiaohua', ['old', 'age', 14])
长度: len()
1 >>> name_tuple = ('xiaohua',['old','age',14]) 2 >>> name_tuple 3 ('xiaohua', ['old', 'age', 14]) 4 >>> len(name_tuple)
包含:in
1 >>> 'age' in name_tuple 2 False
循环:for 与列表中的循环一样
6、字典(dict)
1 # 字典使用key/value的格式来存储数据,每一个key/value是一个键值对,键值对是唯一的,字典支持增删改查 2 >>> name_dict = {'name':'xiaoping','age':18,'job':'it'} 3 >>> name_dict 4 {'job': 'it', 'age': 18, 'name': 'xiaoping'}
items()/keys()/values()
1 #!/usr/bin/env python 2 # coding:utf-8 3 4 name_dict = {'name':'xiaoping','age':18,'job':'it'} 5 6 for k,v in name_dict.items(): # .items() 表示字典里所有的元素 7 print k,v 8 name_dict = {'name':'xiaoping','age':18,'job':'it'} 9 print name_dict.keys() # .keys() 表示字典里所有的key 10 name_dict = {'name':'xiaoping','age':18,'job':'it'} 11 print name_dict.values() # .values() 表示字典里所有的value
字典是无序输出的
1 tom@python:/data/python/day1$ python dict.py 2 job it 3 age 18 4 name xiaoping
五、运算
六、文件的基本操作
过程:
找到文件--打开文件--文件操作(读/写)--关闭文件
使用方式:
1 open/file(PATH,MODE)
模式:
1 r, 只读,以只读的方式打开文件,读取内容。 2 w, 只写,如果文件已经存在,会将文件覆盖,如果不存在,将会创建新文件。 3 a, 追加,如果文件已经存在,内容会追加到末尾,如果不存在,将会创建新文件。 4 w+, 读写,如果文件已经存在,会将文件覆盖,如果不存在,将会创建新文件。
读取
1 read() # 一次性全部读入内存 2 readlines() # 逐行读入内存 3 for line in FILE: # 每次循环,只读一行
read() 全部读入到内存
1 file_obj = file('/data/python/day1/tt.txt','read') 2 print file_obj.read() 3 file_obj.close() 4 # 输出 5 tom@python:/data/python/day1$ python file.py 6 job,12,home 7 copy,sel,45
readlines()逐行读取入到内存。
1 file_obj = file('/data/python/day1/tt.txt','read') 2 print file_obj.read() 3 file_obj.close() 4 #输出后是一个列表,每个元素后面都带一个换行符 5 tom@python:/data/python/day1$ python file.py 6 ['job,12,home\n', 'copy,sel,45\n']
写入
1 write_list.write() # 可以一次性写入 2 write_list.writelines() # 也可以逐行写入
write()例子
1 write_obj = file('./name.txt','w') 2 write_obj.write(str_list) 3 write_obj.close()
计算器链接:http://www.cnblogs.com/wupeiqi/articles/4949995.html
参考链接:http://www.cnblogs.com/wupeiqi/articles/4906230.html