装饰器(二)&模块(一)
#普通装饰器基本格式
def wrapper(func):
def inner():
pass
return func()
return inner
def func():
pass
func = wrapper(func)
func()
#带参数装饰器基本格式
def w(counter):
def wrapper(func):
def inner(*args,**keargs):
lis = []
for i in range(0,counter):
a=func(*args,**keargs)
lis.append(a)
return lis
return inner
return wrapper
def func(*args,**keargs):
return 8
func = w(3)(func)
func()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 0.装饰器补充
常见的模块(hashlib,random,getpass,time)
默认值参数尽量是不可变数据类型!可变数据类型有坑!面试题
def func(a,b=[]): b.append(a) return b l1 = func(1) l2 = func(2,[11,22]) l3 = func(3) # [1,3] [11,22,2] [1,3] print(l1,l2,l3) #最后输出的时候l1与l3均已运行,b=[1,3]
1
2
3
4
5
6
7
8
9
10def func(a,b=[]): b.append(a) print(b) #函数执行一次输出一次 func(1) func(2,[11,22,33]) func(3) # [1] [11,22,33,2] [1,3]
1
2
3
4
5
6
7
8
9递归
- 函数自己调用自己.效率低
装饰器:
#普通装饰器基本格式
def x(func):
def inner():
return func()
return inner
@x
def index():
pass
#带参数的装饰器基本格式
def x(counter):
def wrapper(func):
def inner(*args,**kwargs):
data = func(*args,**kwargs) # 执行原函数并获取返回值
return data
return inner
return wrapper
@x(counter)
def index():
pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#面试题
# 写一个带参数的装饰器,实现:参数是多少,被装饰的函数就要执行多少次,并返回最后一次执行的结果【面试题】
def xxx(counter):
print('x函数')
def wrapper(func):
print('wrapper函数')
def inner(*args,**kwargs):
for i in range(counter):
data = func(*args,**kwargs) # 执行原函数并获取返回值
return data
return inner
return wrapper
@xxx(5)
def index():
return 8
v = index()
print(v)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1.带参数的装饰器
- flask框架中存在很多带参数的装饰器;面试题
# 2.模块
\n 换行符
\t 制表符table
\r 回到当前的起始位置,再次打印时删除本行内容
print('回到起始位置\r',end='') print('清空原有内容',end='')
1
2r 释义,当文件路径中存在\n或者\t等字符时,当做普通字符处理
v1 = r"D:\code\s21day14\n1.mp4" (推荐) print(v1)
1
2
# 1.os模块
和操作系统相关的数据。
os.path.exists(path) , 如果path存在,返回True;如果path不存在,返回False
os.stat('20190409_192149.mp4').st_size , 获取文件大小
os.path.abspath() , 获取一个文件的绝对路径
path = '20190409_192149.mp4' # D:\code\s21day14\20190409_192149.mp4 import os v1 = os.path.abspath(path) print(v1)
1
2
3
4
5os.path.dirname ,获取路径的上级目录
import os v = r"D:\code\s21day14\20190409_192149.mp4" print(os.path.dirname(v))
1
2
3
4os.path.join ,路径的拼接
import os path = "D:\code\s21day14" # user/index/inx/fasd/ v = 'n.txt' result = os.path.join(path,v) print(result) result = os.path.join(path,'n1','n2','n3') print(result)
1
2
3
4
5
6
7
8os.listdir , 查看一个目录下所有的文件【第一层】
import os result = os.listdir(r'D:\code\s21day14') for path in result: print(path)
1
2
3
4
5os.walk , 查看一个目录下所有的文件【所有层】
import os result = os.walk(r'D:\code\s21day14') for a,b,c in result: # a,正在查看的目录 b,此目录下的文件夹 c,此目录下的文件 for item in c: path = os.path.join(a,item) print(path)
1
2
3
4
5
6
7
# 2.sys模块
python解释器相关的数据。
sys.getrefcount , 获取一个值的应用计数a = [11,22,33] b = a print(sys.getrefcount(a))
1
2
3sys.getrecursionlimit , python默认支持的递归数量sys.stdout.write --> print (进度)import time for i in range(1,101): msg = "%s%%\r" %i print(msg,end='') time.sleep(0.05)
1
2
3
4
5#进度显示 import os # 1. 读取文件大小(字节) file_size = os.stat('20190409_192149.mp4').st_size # 2.一点一点的读取文件 read_size = 0 with open('20190409_192149.mp4',mode='rb') as f1,open('a.mp4',mode='wb') as f2: while read_size < file_size: chunk = f1.read(1024) # 每次最多去读取1024字节 f2.write(chunk) read_size += len(chunk) val = int(read_size / file_size * 100) print('%s%%\r' %val ,end='')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15sys.argv
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 让用户执行脚本传入要删除的文件路径,在内部帮助用将目录删除。 C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py """ import sys # 获取用户执行脚本时,传入的参数。 # C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test # sys.argv = [D:/code/s21day14/7.模块传参.py, D:/test] path = sys.argv[1] # 删除目录 import shutil shutil.rmtree(path)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3.time
- time.time() 获取当前时间
- time.sleep('时间') 休眠时间
# 4.shutil
#删除
import shutil
shutil.rmtree(path)
1
2
3
2
3
# 模块小结
- random
- hashlib
- getpass
- time
- os
- sys
- shutil
上次更新: 2023/04/16, 18:35:33