最常用的两个python标准库
sys(打印环境变量)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan
import sys
print(sys.path)
输出
['D:\\[4]python\\untitled\\day2', 'D:\\[4]python\\untitled', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
os(与系统命令相关的)
import os
cmd_res = os.popen("dir").read() 打印当前的目录
print(cmd_res)
os.mkdir("new dir")
输出为创建了一个名为new dir的目录
.pyc是什么
1Python到底是什么
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
2简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
数据运算
算数运算
比较运算
赋值运算
逻辑运算
成员运算
身份运算
位运算(重要)
例子
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan
a = 50 # 50 = 00110010
b = 8 # 8 = 00001000
c = 0
c = a & b; # 00000000
print (c)
c = a | b; # 00111010
print(c)
c = a ^ b; # 00111010 相同为0,不同为1
print(c)
c = ~a; #11001101 256-51
print(c)
c = a << 2; #11001000
print(c)
c = a >> 2; #00001100
print(c)
输出
0
58
58
-51
200
12
bytes类型
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。bytes和str的转换。
例子:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan
msg = "爱老虎油"
print(msg)
print(msg.encode(encoding='utf-8'))
print(msg.encode(encoding='utf-8').decode())
输出
爱老虎油
b'\xe7\x88\xb1\xe8\x80\x81\xe8\x99\x8e\xe6\xb2\xb9'
爱老虎油
列表
列表的定义
names = ["wangchao","mahan","zhanglong","zhaohu"]
访问列表元素
print(names[0]) #取第一个
输出
wangchao
print(names[-1]) #取最后一个
输出
zhaohu
切片:取多个元素
names = ["wangchao","mahan","zhanglong","zhaohu","zhangsan","lisi"]
print(names[1:4])#取第二到第五个元素
['mahan', 'zhanglong', 'zhaohu']
print(names[1:-1])#取第二到倒数第二个元素,没有-1最后一个。
['mahan', 'zhanglong', 'zhaohu', 'zhangsan']
print(names[:3])#取前三个,0可以不写
['wangchao', 'mahan', 'zhanglong']
print(names[2:])#从第三个到最后一个,不能写-1
['zhanglong', 'zhaohu', 'zhangsan', 'lisi']
print(names[::2])#从0开始到结束,每隔2个取一下
['wangchao', 'zhanglong', 'zhangsan']
追加
names.append("我是小弟")
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
插入
names.insert(2,"强行插入")#在第三个元素前插入
['wangchao', 'mahan', '强行插入', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
修改
names[2]="换个新人"#第三个元素修改
['wangchao', 'mahan', '换个新人', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
删除
del names[2]#删除第三个
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
names.remove("lisi")#删除指定元素
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', '我是小弟']
names.pop()#删除最后一个
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan']
扩展
print(names)
b = [1,2,3]
names.extend(b)
print(names) #扩展列表b进去
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', 'lisi', '我是小弟', 1, 2, 3]
拷贝
names = ["wangchao","mahan","zhanglong","zhaohu","zhangsan",["alex","jack"],"lisi"]
names2 = names.copy()#拷贝
print(names)
print(names2)
names[2]="马汉"
names[5][0]="李杰"
print(names)
print(names2)
输出
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', '马汉', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
#注释说明:names2的['李杰', 'jack']随着小列表里头的内存地址发生了变化。
深拷贝
import copy
names2 = copy.deepcopy(names)
print(names)
print(names2)
names[2]="马汉"
names[5][0]="李杰"
print(names)
print(names2)
输出
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
['wangchao', 'mahan', '马汉', 'zhaohu', 'zhangsan', ['李杰', 'jack'], 'lisi']
['wangchao', 'mahan', 'zhanglong', 'zhaohu', 'zhangsan', ['alex', 'jack'], 'lisi']
#深copy就不会出现这样的问题
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
names = ("wangchao","mahan","zhanglong","zhaohu","mahan","zhangsan")
print(names.index("mahan")) #获取第一个同名的下标
print(names.count("mahan")) #统计个数
变量的修改
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan
name = "alex"
print(name.capitalize()) #首字母大写
names = "my name is alex"
print(names.count("a"))#统计有几个
print(names.center(50,"-"))#把变量names按照50个字节居中
print(names.endswith("ex"))#判断是否有ex这个字符串
print(names[names.find("is")])#在变量中找到is打印首字母
print('+'.join(['1','2','3']))#1+2+3
p = str.maketrans("abcdef","123456")
print("alex li".translate(p))#如果"alex li"里中有abcdef,就把a替换成1,把b替换成2,...没有就不替换
print('1+2+3+4'.split('+'))#按+分开取出里头的元素
输出
Alex
2
-----------------my name is alex------------------
True
i
1+2+3
1l5x li
['1', '2', '3', '4']
字典
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
格式
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}
字典的特性:
1、元素是无序的;
2、key是唯一的,字典天生去重
增加:
info['stu1104']='teacher li'
{'stu1101': 'TengLan Wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
#或者
info.setdefault
修改
info['stu1101']='李老师'
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
删除
字典{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
info.pop('stu1101') #标准删除
{'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
del info['stu1103'] #也是一种删除方法
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1104': 'teacher li'}
info.popitem() #随机删除
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
获取
print(info)
print("stu1101" in info) #标准用法
print(info.get("stu1103"))#获取
print(info['stu1103'])#也是获取
# print(info['stu1105']) #获取一个没有的元素会报错
print(info.get("stu1105"))#用get获取,不会报错,返回none
#输出
{'stu1101': '李老师', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'teacher li'}
True
XiaoZe Maliya
XiaoZe Maliya
None
多级字典嵌套
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:liyanan
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢,"]
}
}
av_catalog["大陆"]["1024"][1] += "用爬虫"
print(av_catalog["大陆"]["1024"])
#输出
['全部免费,真好,好人一生平安', '服务器在国外,慢,用爬虫']
循环dict
for key in info: #方法1
print(key,info[key])
for k,v in info.items(): #方法2,会先把dict转成list,数据量大时莫用
print(k,v)