模块2复习
Posted 绿洲2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块2复习相关的知识,希望对你有一定的参考价值。
1、 函数即变量;
2、 高阶函数:a,把一个函数名当做实参传给另一个函数;b,返回值中包含函数名;
生成器:
1、 只有在调用时才会生成相应的数据;
2、 只记录当前位置;
3、 只有__next_()方法(只能生成下一个数据,不能往后生成上一个数据)。
Fibonacci(菲波拉契数列)
a,b=b,a+b 相当于:
T=(b,a+b)
a = t[0]
b = t[1]
但不必写出临时变量T
4、__next_ (遇到yield时保存当时状态并返回,下一次执行_next_时从yield开始但并不传参) ,send 则除了会从yield开始,还会传参给yield)
5、__next__(fib(6)) 等同于 next(fib(6))
0822:
一、lambda :简单的三元运算就行如:
cale = lambda n:3 if n<4 else n
print(cale(1))
(2)但它可以结合其它模块来用(如下的函数将range()里的值取出,交给lamba处理):
Res = filter(lambda n:n>5,range(10))
for i in Res
print (i)
(3)map:
print ("_____3______")
Res3 = map(lambda n:n*n,range(10))
for i in Res3:
print (i)
(4)累加:
print ("_____4______")
res4 = functools.reduce(lambda x,y:x+y,range(10))
print(res4)
(5)判断变量是否存在:
print(globals())
08.23:
print ("______6,排序_____")
a = {6:2,8:0,1:4,-5:6,6:99,4:22}
print( sorted(a.items()) ) #按字典k来排序
print( sorted(a.items(),key=lambda x:x[1]) ) #将字典k对应的值来排序
print( sorted(a) ) #仅排序k值
print ("______7,次方_____")
print(pow(3,3)) #3的3次方
print ("______8,zip_____")
a = [1,2,3,4,5,6]
b = ["a","b","c","d"]
for i in zip(a,b): #将a.b.按最少的那一组一一对应地组合,map则没有的那个标计为none
print(i)
print ("_____9,decorator_____")
__import__(\'decorator\')
0825:
Json :不同语言的转换与交互(以前用xm),python与java的类完全不同;
print ("_____10,序列化_____")
#序列化:
info = {\'name\':\'alex\',\'age\':22}
f = open("test.txt","w")
f.write(str(info))
f.close()
#反序列化:
f = open("test.txt","r")
data = eval( f.read() )
f.close()
print(data[\'age\'])
print(data)
print ("_____10,json:序列化与反序列化_____")
#序列化:(然后可写入或读取内容)
import json
info = {\'name\':\'alex\',\'age\':22}
f = open("test.txt2","w")
print(json.dumps(info))
f.write(json.dumps(info))
f.close()
#反序列化:
import json
f = open("test.txt2","r")
data = json.loads(f.read())
print(data["age"])
08.28:
一、模块:本质上就是.py结尾的文件。
2、导入模块的方法:
(1) import module_name ;
(2) from module_name import *
(3) 、from module_name import def_name as xxx_name #从某模块名导入函数名,并用别名命名。
(4) from module_name import def_name 与import module_name.def_name的意思相同:
导入函数或变量。
二、包:本质上就是从逻辑上组织模块,就是一个目录(必须带有 _init_.py的文件)
总结:(1)导入包的本质就是执行包下面的_init_.py文件;
(2)导入模块的本质就是把python文件解释一遍:
Import module_name --------à module_name.py---------àmodule_name.py的路径,以下方法导入上一层目录的py函数:
X = os.path.dirname(os.path.abspath(_file_)) #这是file当前文件的目录,再往上一层目录,则应如下:
X= os.path.dirname(os.path.dirname(os.path.abspath(_file_)))
sys.path.append(x) #加入系统变量里去;
import module_name #导入上一层目录下的模块名。
From filename import package_test #导入上一层目录某文件夹下的包,
Package_test.test1.test() #并执行该包下test1文件的test函数
From filename import module_name #导入上一层目录某文件夹下的模块(即某py文件)
From module_name import def_name #导入模块内的函数名,放在文件最上面,这样不用每次在引用函数时module_name.def_name() 进行引用函数了。
导入包:
Import package_name #等于run _init_.py 导入包与模块名的方法一样,但执行的过程不同。
二、模块的分类:
标准库,开源,自定义模块。
1、时间截:
import time
x = time.time()
print(x)
2、 #显示本地时间(元组的格式):
3、 (1)
y = time.localtime()
print(y)
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=29, tm_hour=7, tm_min=55, tm_sec=22, tm_wday=1, tm_yday=241, tm_isdst=0)
(2)
u = time.strftime("%Y-%m-%d %H:%M:%S",y)
print(u) #自定义格式并显示当前时间
2017-08-29 07:55:22
(3)
o = time.strptime(\'2017-08-29 07:55:22\' ,"%Y-%m-%d %H:%M:%S")
print(o) #将时间按自定义的格式显示为元组
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=29, tm_hour=7, tm_min=55, tm_sec=22, tm_wday=1, tm_yday=241, tm_isdst=-1)
中国为UTC+8
(4)
#显示UTC时间(元组的格式,标准时间):
z = time.gmtime()
print(z)
09.01:
1、random模块:
import random #获得随机数。
I = [1,2,3,4,5,6]
random.shuffle(I)
print(I)
#示例2(仅数字):
import random
checkcode=\'\'
#每次获得一个数字:
print("-------------")
current=random.randint(0,9)
print(current)
#将随机数字追加到列表中(5次),并打印:
for i in range(5):
current=random.randint(0,9)
print(current)
checkcode+=str(current)
print(checkcode)
#示例3:
x = random.randrange(0,99)
print(x)
#示例4(数字加字母):
import random
checkcode=\'\'
for i in range(5):
current=random.randint(0,5)
if current ==i:
tmp = chr(random.randint(65,99))
#checkcode+=str(tmp)
else:
tmp=random.randint(0,9)
checkcode+=str(tmp)
print(checkcode)
2、 os模块:
>>> os.getcwd() #当前目录。
\'C:\\\\Users\\\\Administrator\'
>>> os.chdir("c:\\\\") #切换目录到c:\\。
>>> os.getcwd()
\'c:\\\\\'
>>> os.makedirs(r"c:\\a\\b\\c\\d") #递归地创建目录。
>>>
>>> os.removedirs(r"c:\\a\\b\\c\\d") #递归地删除空文件夹。
>>>
>>> os.mkdir(r"c:\\a") #一级级地创建或删除非空目录(相当于linux下的mkdir与rmdir)
>>> os.mkdir(r"c:\\a\\b")
>>> os.rmdir(r"c:\\a\\b")
>>> os.name #显示操作系统名。
>>> os.listdir(r"d:") #列出d盘的目录
>>> os.environ #显示环境变量
>>> os.system(\'dir\') #执行系统自带的命令。
>>> os.path.abspath(\'Drivers\') #显示某文件的绝对路径。
\'c:\\\\Drivers\'
>>> os.path.exists(r\'c:\') #判断路径是否存在。
True
3、 shutil模块:
import shutil
f1 = open("本节笔记",encoding="utf-8")
f2 = open("笔记2","w",encoding="utf-8")
shutil.copyfileobj(f1,f2) #拷贝本节笔记里的内容到笔记2
shutil.copystat(src,dst) #拷贝状态信息,包括mode等
shutil.copy(src,dst) #拷贝文件和权限;
shutil.copy2(src,dst) #拷贝文件和状态;
shutil.copyfile("笔记2","笔记3")
shutil.copymode("笔记2","笔记4")
shutil.
4、 Json,pickle,shelve模块:用于字符串和python数据类型间进行转换;
pickle :用于python特有的类型和python的数据类型间进行转换。
他们各有四大功能:dumps,dump,load,loads
Shelve:是一个简单的kv,将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
#示例:
import shelve
d = shelve.open(\'test\') #打开一个文件;
print(d.get("age")) #取出里面的age的值。
5、Xml 模块:(www.cnblogs.com/alex3714)
没有json以前,用xml进行接口开发,示例:
import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
root = tree.getroot()
print(root.tag)
#遍历xml文档:
for child in root:
print(child.tag,child.attrib)
for i in child:
print(i.tag,i.text,i.attrib)
#只遍历year节点:
for node in root.iter(\'year\'):
print(node.tag,node.text)
#修改;
略
6、pyyaml模块:用于处理ymal文档格式,只是需要安装一个模块.参考文档:http://pyyaml.org/wiki
7、configparser模块:用于生成和修改常见的配置文档。
8、hashlib,hmac加密模块:
# md5不支持反解
import hashlib,hmac
m = hashlib.md5() #用md5加密
n = hashlib.sha256() #sha256加密,也可以是sha512
m.update(b"hello")
print(m.hexdigest()) #加密“hello"
m.update("你在哪里?".encode(encoding="utf-8"))
print(m.hexdigest()) #加密“hello你在哪里?”(不是“你在哪里?”),与m.update("hello你在哪里?".encode(encoding="utf-8"))相同
h = hmac.new(b"123123",b"I love you") #若要中文加密需加encode(encoding="utf-8")
print(h.digest())
9、re正则表达式模块:
以上是关于模块2复习的主要内容,如果未能解决你的问题,请参考以下文章