装饰器
计算一段代码执行时间
import time #time模块可以获取当前时间 #代码运行之前,获取时间 start=time.time() #time模块里的time方法,可以获取当前时间的时间戳 #时间戳是从1970-01-01 00:00:00 中国是UTC+8 到现在(转换成国际时间要减8)的秒数 print('start=',start) x =1 for i in range(1,): x+=i print(x) end=time.time() print('代码运行时间:',end-start) start=time.time() print('hello') time.sleep(3)#休眠代码 print('word') end=time.time() print('代码运行时间:',end-start)
装饰器使用
#装饰器 import time def cal_time(fn): print('fn={}'.format(fn)) def inner(): start=time.time() fn() end=time.time() print('代码耗时',end-start) return inner @cal_time #第一件事调用cal_time立马调用#第二件事,把demo传给fn def demo(): x=0 for i in range(1,10000): x+=1 print(x) #第三件事:当再次调用demo函数时,此时的demo已经不是demo了 #而是inner demo() print('装饰后的demo函数是{}'.format(demo)) #装饰后的demo函数是
.inner at 0x000001A2FF1A7B80>
装饰器的详解
import time def cal_time(fn): print('fn={}'.format(fn)) def inner(x,*args,kwargs): start=time.time() s=fn(x) end=time.time() #print('代码耗时',end-start) return s,end-start return inner @cal_time def demo(n): x=0 for i in range(1,10000): x+=1 return x m=demo(10000,'good',y='hello') print('m的值为',m)#装饰器改变了原有函数传参,可以传多值
#玩游戏代码,现要求有防沉迷系统,使10点后玩不了,所以多传参clock def play_game(name,game,clock): if clock > 22: print('太晚了,不能玩了') print('{}正在玩{}'.format(name,game)) play_game('张三','王者荣耀',12) play_game('李四','英雄联盟',23) print('-------') #以上并非最佳方案,由于开放封闭原则,最好不要动前面完成的代码 #故我i们使用装饰器不改变play_qame函数 def can_play(fn): def inner(x,y,*args,kwargs): #if args[0]>22: clock=kwargs.get('clock',23)#如果有clock,就用clock,如果没有就用默认值23 if clock>22: print('太晚了,睡觉吧') else: fn(x,y) return inner @can_play def play_game(name,game): print('{}正在玩{}'.format(name,game)) play_game('张三','王者荣耀',a='hello',b='good',clock=12) play_game('李四','英雄联盟',23)
模块
- 在python里的一个py文件,就可以理解为模块
- 不是所有的py文件都能作为一个模块来导入
- 如果想要让一个py文件能够被导入,模块名字必须要遵守规则(数字字母下划线)
- python为了开发,提供很多内置模块
- 格式1:import 模块名称
调用:模块名.模块中的函数
import time print(time.time())
- 格式2:from 模块名 import 函数名,导入模块里的一个方法
from random import randint print(randint(0, 2))#不用写random.randint() #并没有导入random,只是拿出了randint
- 格式3:from 模块名 import * 导入这个模块的所有(所有并不是真正的所有)方法
from math import * print(pi)#不用写成math.pi #本质史读取模块中__all__属性,看这个函数中定义了那些属性和变量 #如果模块中没有定义__all__才会导入所有不以_开头的变量 #以一个下划线开始的变量,建议只在本模块里使用,别的模块里不要导入进去 #但是用格式1还是能用,建议别这样 #如果定义了,__all__以外的就使用不了 #比如假设__all__中没有pi则使用pi时就会报错,不可使用 #想使用就得用格式1
- 起别名
import datetime as dt#导入模块并起别名 print(dt.MAXYEAR) #导入某个模块的某个方法,并起一个别名 from copy import deepcopy as dp#from 模块名 import 函数名 as 别名 dp(['hello','good',[1,2,3],'hi'])#深复制
一些模块
os
import os #获取操作系统的名字(windows==>nt或者非windows==>posix) print(os.name) #拿到路径的分隔符 print(os.sep) #windos:\ 非windows:/ #os中的path比较常用 #abspath===>获取文件绝对路径 print(os.path.abspath('模块.py')) #isdir判断是否是文件夹 print(os.path.isdir('模块.py')) #isfile判断是否是文件 print(os.path.isfile('模块.py')) #exists判断是否存在 print(os.path.exists('模块.py')) print('模块.py'.rpartition('.')) print(os.path.splitext('模块.py'))
sys
sys模块:系统相关的功能
import sys print('hello') #查找模块的路径 print(sys.path) sys.stdin #可以像input一样,接收用户的输入,和input相关 sys.stdout #标准输出,修改sys.stdout 可以改变默认输出位置 sys.stderr#修改sys.stderr 可以改变错误的默认输出位置 #退出程序,和内置函数exit一致 sys.exit() print('hehehe')

math
math模块:数学计算相关的模块
import math #求阶乘 print(math.factorial(6)) #向下取整 print(math.floor(12.98)) #向上取整 print(math.ceil(14.22)) #算幂运算 print(math.pow(2,10)) print(math.sin(math.pi/6))
random
random模块:和随机有关的代码
import random #randint(a,b) 用来生成[a,b]的随机整数 print(random.randint(2,9)) #randrange(a,b) 用来生成[a,b)的随机整数 print(random.randrange(2,9)) #random()用来生成[0,1)的随机浮点数 print(random.random()) #choice用来在可迭代对象中随机抽取一个数据 print(random.choice(['aa','ss','dd','ff'])) #sample 用来在可迭代对象中随机抽取n个数据 print(random.sample(['aa','ss','dd','ff'],2))

datetime
datetime模块:主要显示日期时间,这里主要涉及date类,用来显示日期;time类显示时间;datetime类用来显示日期时间;timedelta类用来计算时间
import datetime as dt print(dt.datetime.now())

time
time模块:操作时间,time模块不仅可以显示日期,还可以控制程序,让程序暂停(sleep函数)
import time print(time.time()) print(time.strftime("%Y-%m-%d %H:%M:%S")) print(time.asctime())

calendar
calendar模块:
import calendar c=calendar.calendar(2019)#打印日历 print(c)

hashlib、hmac
hashlib模块和hmac模块:用来加密
import hashlib #hashlib模块主要支持两个算法 md5和sha加密 #加密方式:单向加密:只用加密过程,不能解密md5/sha 对称加密 非对称加密rsa #需要加密的内容必须转换为二进制 x=hashlib.md5()#生成一个md5对象 x.update('abc'.encode('utf8'))#===>x=hashlib.md5('abc'.encode('utf8')) print(x.hexdigest()) #'abc'========>cd24fb0d6963f7d28e17f72 #sha加密 h1=hashlib.sha1('1234'.encode()) print(h1.hexdigest()) h2=hashlib.sha224('1234'.encode())#224位 一个16进制占4位 print(h2.hexdigest()) h3=hashlib.sha256('1234'.encode()) print(h3.hexdigest()) h4=hashlib.sha384('1234'.encode()) print(h4.hexdigest()) import hmac #hmac加密可以指定密钥 h=hmac.new('h'.encode(),'你好'.encode(),digestmod='MD5') result=h.hexdigest() print(result)
uuid
uuid模块:用来生成一个全局唯一的模块
import uuid print(uuid.uuid1())#32个字符 每一个字符有16个选择 #print(uuid.uuid2)python不能用 print(uuid.uuid3(uuid.NAMESPACE_DNS,'lisi'))#生成固定的uuid print(uuid.uuid5(uuid.NAMESPACE_DNS,'lisi'))#生成固定的uuid print(uuid.uuid4())#最常用,随机

pip命令的使用及其配置
安装python时,会同时安装pip软件,可以用来查找下载安装卸载第三方资源包
检查是否配置好pip:


然后windows+R,输入cmd打开

图所示就是环境变量没有配置,在此电脑右击打开属性


然后在用户变量或者系统变量中找到path,编辑

完成后再到命令提示符中查看:
成功了!

注意:有些时候不能在c盘python文件夹scripts中找到pip,建议重装。
使用pip
下载安装包
卸载安装包
其他命令
使用自定义模块
#__name__:当直接运行py时,值时__main__ #如果杂蒽个py文件作为模块导入时,值是文件名 if __name__=='__main__': print('模块中的name',__name__)
包的使用
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204892.html原文链接:https://javaforall.net
