Python知识总结
一、python简介
1、Python简介
Python是一种解释型、交互式、面向对象、是初学者的语言。
2、python特点
①易于学习
②易于阅读
③易于维护
④一个广泛的标准库
⑤互动模式
⑥便携式
⑦可扩展
⑧数据库
⑨GUI编程
⑩可扩展性
3、python支持tab补全功能:
>>> import readline,rlcompleter
>>> readline.parse_and_bind(\'tab: complete\')
可以将上面两句写入一个py文件,直接import即可
Ipython要想保存命令历史,必须安装sqlite-devel
4、python安装
#tar -jxvf Python-3.4.3.tar.bz2
#cd Python3.4.3
#./configure [--prefix=/usr/local/python3]
#make && make install
注意:①python为系统依赖包,只能更新,不能删除,而且yum的版本必须 和python配套,升级python之后,必须给yum指定使用低版本的。相应操作如下:
#mv /usr/bin/python /usr/bin/python-2.6.bak 备份
#ln -s /usr/local/bin/python3.4 /usr/bin/python 创建软连接
#python –V 执行版本扫描
②修改yum配置文件,使其正常工作
#vim /usr/bin/yum
将其中的/usr/bin/python修改为/usr/bin/python2.6
③如果上述设置完毕还有报错,记得修改环境变量
#vim /etc/profile
5、python运行脚本
5.1、执行方式
#python
5.2、注意事项:
①在python3.0以上版本中,print变成了函数。所以必须使用print()格式执行,而以前版本不用括号
>>> print(\'hello man\')
②在交互模式下使用python时注意:只能够输入python命令;在脚本中打印语句是必须的,而在交互脚本中可以自动打印表达式效果,不需要输入完成的打印语句
>>> print (2**10)
③在交互模式下,需要执行符合语句,需要加入":",代表语句没有执行完毕。而且必须用一个空行来代表结束符合语句
>>> for i in range(4):
... print(i)
...
0
1
2
3
4
④要保证缩进统一,否则出错
5.3、python脚本运行
①bash bang介绍
#!/usr/bin/python
#!/usr/bin/env python(建议使用这种格式,不容易出现python校本不能执行的问题)
二、python编程
1、变量的定义
1.1、变量的命名规则
①变量名只能用字母和下划线(_)开头
②变量名可以由字母、数字和下划线组成
③变量名大小写敏感,入lamp和LAMP不是同一个变量名
1.2、变量的赋值
①赋值操作
变量名 = 变量值
②给变量赋值字符串,需要用引号将字符串包含,否则报错
>>> name = wdd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name \'wdd\' is not defined
③增量赋值
>>> x = 1
>>> x = x+1
>>> x
2
④多重赋值
>>> x=y=z=2
>>> x
2
>>> y
2
>>> z
2
>>>
⑤"多元赋值"
>>> x,y,z=1,2,3
>>> x
1
>>> y
2
>>> z
3
2、数据类型
2.1、数值型
①整形
>>> 123+321
44
②浮点型
>>> 3.14*3
9.42
2.2、字符串型
①字符串定义
>>> name = \'wdd\'
>>> name
\'wdd\'
>>> print(name)
wdd
>>> dir(name) #查看字符串支持的方法帮助
[\'__add__\', \'__class__\', \'__contains__\', \'__delattr__\', \'__doc__\', \'__eq__\', \'__format__\', \'__ge__\', \'__getattribute__\', \'__getitem__\', \'__getnewargs__\', \'__getslice__\', \'__gt__\', \'__hash__\', \'__init__\', \'__le__\', \'__len__\', \'__lt__\', \'__mod__\', \'__mul__\', \'__ne__\', \'__new__\', \'__reduce__\', \'__reduce_ex__\', \'__repr__\', \'__rmod__\', \'__rmul__\', \'__setattr__\', \'__sizeof__\', \'__str__\', \'__subclasshook__\', \'_formatter_field_name_split\', \'_formatter_parser\', \'capitalize\', \'center\', \'count\', \'decode\', \'encode\', \'endswith\', \'expandtabs\', \'find\', \'format\', \'index\', \'isalnum\', \'isalpha\', \'isdigit\', \'islower\', \'isspace\', \'istitle\', \'isupper\', \'join\', \'ljust\', \'lower\', \'lstrip\', \'partition\', \'replace\', \'rfind\', \'rindex\', \'rjust\', \'rpartition\', \'rsplit\', \'rstrip\', \'split\', \'splitlines\', \'startswith\', \'strip\', \'swapcase\', \'title\', \'translate\', \'upper\', \'zfill\']
>>> name.replace(\'wdd\',\'shuaige\') #把wdd替换为shuaige
\'shuaige\'
>>> name.replace(\'w\',\'cool\') 把w替换为cool
\'cooldd\'
>>> help(name.replace) #查看具体的方法帮助
②字符串中单双引号
在字符串中单双引号一致,用于包含字符串
>>> persion = \'name\',\'height\'
>>> persion
(\'name\', \'height\')
>>> info="I\'m a good man" #在双引号中嵌套单引号,不用转义符
>>> info
"I\'m a good man"
>>> print(info)
I\'m a good man
③在字符串中调用特殊字符
如果使用转义符\,将使特殊字符失去含义,系统中特殊的转义字符如下:
转义符 |
作用 |
\\ |
保留反斜杠 |
\, |
保留单引号 |
\b |
退格 |
\n |
换行 |
\t |
水平制表符 |
\v |
垂直制表符 |
>>> name = \'my\tname\tis\tjack\'
>>> name #直接输出变量name,转义符无法识别
\'my\tname\tis\tjack\'
>>> print(name) #调用print函数,可以正常使用
my name is jack
④raw转义符抑制
在某些特定情况下可能不需要使用转义符,如在windows中使用系统文件
>>> path = \'c:\new\text.txt\'
>>> print(path)
c:
ew ext.txt # 系统会把\n和\t识别为转义符,导致命令失败
>>> path = r\'c:\new\text.txt\'
>>> print(path) #使用raw字符串关闭转义机制
c:\new\text.txt
⑥三重引号编写多行字符串
>>> info = """my name is
... jack, I\'m a honest
... man"""
>>> info #直接调用变量不能正确显示
"my name is\njack, I\'m a honest\nman"
>>> print(info) #需要使用print函数显示
my name is
jack, I\'m a honest
man
注意:不要和注释搞混,注释没有赋值
⑦、字符串的序列操作
变量中的值在索引中0保存第一个值,1保存第二个值
>>> name = \'jack\'
>>> len(name)
4
>>> name[0]
\'j\'
>>> name[1]
\'a\'
>>> name[2]
\'c\'
>>> name[3]
\'k\'
索引也可以反向索引,就是-1代表最后一个值,-2代表倒数第二个值
>>> name[-1]
\'k\'
>>> name[-2]
\'c\'
字符串也支持分片操作,就是取出变量中的一部分内容
>>> name[1:3]
\'ac\' #取出变量中第一位到第三位结束(不包含第四位)的内容
>>> name[2:4]
\'ck\'
>>> name[1:] #取出变量从第一位到变量结束
\'ack\'
>>> name[:2] #取出变量从开头·到第一位结束(不包含第二位)
\'ja\'
3、列表
列表也是序列的一种,支持对序列的所有操作。列表于数组有些类似,但比数组强大得多。列表没有数据类型的限制,可以在一个列表中定义不同类型的对象。此外列表没有固定的大小,可以按照需要增加和减小列表的大小。并且列表中的值是可以改变的。
1、列表操作
- 表的定义
>>> info = [\'jack\',\'22\',\'M\']
>>> info
[\'jack\', \'22\', \'M\'] #此列表中的值既有字符串也有整型
>>> len(info) #查看列表长度
- 列表的序列操作
>>> info[0] #取出列表值第一位
\'jack\'
>>> info[:-1] #从列表开头取值到倒数第二位(不包含倒数第一位)
[\'jack\', \'22\']
>>> info[0:] #从列表开头取到最后一位
[\'jack\', \'22\', \'M\']
- 表的特殊方法
列表中的值是可以改变的,并且列表的大小也是可以改变的
>>> info = [\'jack\',\'22\',\'M\']
>>> info[0]=\'mark\' #改变列表中0的值
>>> info
[\'mark\', \'22\', \'M\']
>>> help(info) #查看列表可以使用的方法
>>> info.append(\'American\') #追加
>>> info
[\'mark\', \'22\', \'M\', \'American\']
>>> info.pop(1) #删除第一位的值
\'22\'
>>> info
[\'mark\', \'M\', \'American\']
>>> info.insert(1,22) #在第一位插入新值22
>>> info
[\'mark\', 22, \'M\', \'American\']
>>> digit=[1,3,2,5,4]
>>> digit
[1, 3, 2, 5, 4]
>>> digit.sort() #排序
>>> digit
[1, 2, 3, 4, 5]
>>> digit.reverse() #进行序列翻转
>>> digit
[5, 4, 3, 2, 1]
2、列表嵌套
列表有一个特性,支持任意的嵌套、能够以任意的组合对其进行嵌套,并可以多个层次进行嵌套。这个特性可以实现数据矩阵,或者多维数组
>>> m=[[1,2,3],[4,5,6],[7,8,9]]
>>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> m[1][2]
6
>>> m[1][2]=10 #查看第二个子列表中的第三个值
>>> m[1][2] #改变第二个子列表中的第三个值
10
4、元组(tuple)
元组可以看成是一个不可改变的列表,元组也可以支持序列操作。可以方便地存储与提取一组值
>>> information=(\'lusi\',18,\'F\')
>>> information
(\'lusi\', 18, \'F\')
>>> information[0] #提取第一个值
\'lusi\'
>>> information[1] #提取第二个值
18
注意:元组中的值不能改变,只能给整个元组重新赋值(字符串也不能改变值,只能重新定义)
>>> id(information)
3073641204L #元组中的内存ID号
>>> information=("sdf","ahlk",67)
>>> info=(1,2,3) #给元组重新赋值之后,ID号会改变,代表是个新的元组出现
>>> id(info)
3074861852L
>>> a=(1,) #定义只有一个元素的元组时,需要加逗号,否则会被识别为整形
>>> type(a)
<type \'tuple\'>
>>> b=(1)
print print(
>>> print(type(b))
<type \'int\'>
>>> t=(1,2,3) #可以把元组中的值赋予多个变量(像变量的多元赋值)
>>> t
(1, 2, 3)
>>> a,b,c=t
>>> a
1
>>> b
2
>>> c
3
5、字典
字典编写在{}中,用"键:值"的方式进行赋值。字典中数据成对保存,适合保存二维数据,字典的值也可以改变。但是字典的顺序并不可靠,也就是我们建立字典时的顺序和我们输出字典时候的顺序不一定一致。
①字典的定义
>>> info={"name":"jack","age":20,"sex":"M"} #定义字典
>>> info #查看字典
{\'age\': 20, \'name\': \'jack\', \'sex\': \'M\'}
>>> info[\'name\'] #查看字典某一个键的值
\'jack\'
>>> info[\'country\']=\'American\' #在字典中添加新的"键:值"
>>> info
{\'country\': \'American\', \'age\': 20, \'name\': \'jack\', \'sex\': \'M\'}
②字典中键的排序
字典的顺序并不可靠,也就是我们建立字典时的顺序和我们输出字典时的顺序不一定一致
>>> info={"name":"jack","age":20,"sex":"M"}
>>> info #字典输出的顺序并不一定
{\'age\': 20, \'name\': \'jack\', \'sex\': \'M\'}
>>> for key in sorted(info): #for循环,info中有几个值,循环几次
... print(key, \'is\', info[key]) #sorted函数把info变成列表,并用sort排序,然后用for循环输出,注意缩进
...
(\'age\', \'is\', 20)
(\'name\', \'is\', \'jack\')
(\'sex\', \'is\', \'M\')
6、文件型
文件类型是python对电脑上外部文件的主要接口。如果要创建有一个文件对象,需要调用内置的open函数,以字符串的形式传递给它一个外部的文件名和一个处理模式的字符串。
>>> f = open(\'test\',\'w\')
#使用open函数,定义文件名和处理模式,会在linux当前目录中建立该文件
支持的模式:
\'r\' 默认以读形式打开
\'w\' 首先清除文件在打开进行写入
\'x\' 创建一个新文件并且打开他进行写入
\'a\' 打开写入,追加到一个存在的文件末尾
>>> dir(f) #查看该对象支持的方法
[\'__class__\', \'__delattr__\', \'__doc__\', \'__enter__\', \'__exit__\', \'__format__\', \'__getattribute__\', \'__hash__\', \'__init__\', \'__iter__\', \'__new__\', \'__reduce__\', \'__reduce_ex__\', \'__repr__\', \'__setattr__\', \'__sizeof__\', \'__str__\', \'__subclasshook__\', \'close\', \'closed\', \'encoding\', \'errors\', \'fileno\', \'flush\', \'isatty\', \'mode\', \'name\', \'newlines\', \'next\', \'read\', \'readinto\', \'readline\', \'readlines\', \'seek\', \'softspace\', \'tell\', \'truncate\', \'write\', \'writelines\', \'xreadlines\']
>>> f.write(\'my name is jack\n\') #通过write方法向文件中写入数据
>>> f.write(\'my age is 22\n\')
>>> f.close() #关闭对文件的写操作
>>> f.close()
>>> t = open(\'test.txt\', \'r\') #使用r处理模式,打开文件
>>> test = t.read() #赋予变量
>>> test #直接调用变量不能正确查看内容
\'my name is jack\nmy age is 22\n\'
>>> print(test) #使用print函数显示内容
my name is jack
my age is 22
7、布尔值
就是判断表达式是否为真
>>> 1 == 2
False
>>> 1 < 2
True
>>> 1 > 2
False
>>> 1 <= 2
True
8、查看变量类型
>>> name = \'jack\'
>>> age = 20
>>> type(name)
<type \'str\'>
>>> type(age)
<type \'int\'>
>>> age = \'18\' #加入引号,变成字符串
>>> type(age)
<type \'str\'>
9、python的注释
①# 注释一句话
②\'\'\'
内容 #注释一段内容
\'\'\'
10、模块
每一个义扩展名py结尾的python源码文件都是一个模块,其它脚本可以通过导入这个模块,使用整个模块中的所有的内容。模块中国可以包含函数和其他的脚本内容。
- 模块的搜索路径
模块的搜索,先搜索本地位置,再按照sys.path的环境变量进行搜索
导入模块时,不需要写后缀名
>>> import myhello
需要把自己保存脚本的路径加入python的path路径,否则不能正确导入
# cd /usr/local/python27/lib/python2.7/site-packages/
# vim my.pth
/root #把自己的python脚本目录放入此目录中以.Pth结尾
- 取帮助
>>> help(\'modules\')
#查询系统支持的所有模块,包含系统内置模块和用户导入模块
>>> help(\'sys\') #查看模块具体帮助
>>> import math #引入数学计算模块
>>> dir(math) #查看此模块支持的函数
>>> help(math) #查看此模块具体的注释
>>> help(math.sin) #查看此模块中函数的注释
>>> math.pi #调用模块中一个函数
3.141592653589793
③python模块的导入方法
import 模块
import 模块名 as 新名 #给模块起一个别名
from 模块名 import 变量名
- Reload模块
导入的模块在python中是直接运行的,但是导入比较耗费资源,所以只能执行一次(除非退出重新进入会话)
如果想要重复导入模块并执行,需要使用reload
>>> import imp #在python中,reload不再是内置函数,所以必须导入
>>> imp.reload(myhello) #在模块中,调用reload函数
或者
>>> from imp import reload #从模块中导入reload函数
>>> reload(myhello)
hello
<module \'myhello\' from \'myhello.pyc\'>