一、time模块
import time使用前记得import
1、time.time 时间戳
从1970年1月1日0.0开始到现在过去了多少秒
#time.time 时间戳
res = time.time()#从1970年1月1日0.0开始到现在过去了多少秒
print("timeis: %s"%res)
#一般用于计算程序运行时间
for i in range(100000):
pass
resl = time.time()
run = resl - res
print("runTimeis: %s"%run)
2、time.localtime
显示时间,有参数时显示1970-1-1零点过去两分钟(东八区会多八小时
#time.localtime
res = time.localtime()
print(res)
res = time.localtime(120)#1970-1-1零点过去两分钟(东八区会多八小时
print(res)
3、time.gmtime世界协调时,会自动减去8小时
#time.gmtime
var = time.gmtime() #utf世界协调时,会自动减去8小时
print(var)
4、mktime 结构化一个时间戳
#mktime 结构化一个时间戳
res = time.mktime(var)
print(res)
5、time.ctime 返回英式时间 time.strtime 时间格式化
#time.ctime 返回英式时间 time.strtime 时间格式化
res = time.ctime()
print(res)
res = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(res) #2020-03-11 10:39:31
6、time.strptime 结构化时间
#time.strptime 结构化时间
var = time.strptime(res,"%Y-%m-%d %X")
print(var)
7、time.sleep 休眠
#time.sleep
while True:
print("yeyeyeye")
time.sleep(1)
二、异常处理
异常处理
try:
可能发生错误的语句
except 异常类型:
如果发生异常 那么执行此处的语句
目的:当程序中出现异常后也能继续运行
"""
异常处理
try:
可能发生错误的语句
except 异常类型:
如果发生异常 那么执行此处的语句
当程序中出现异常后也能继续运行
"""
try:
print(1/0)
except ZeroDivisionError as e:
print(e) #division by zero
print("除数不能为0")
L = [1,2,3]
try:
print(L[6])
except IndexError as e:
print(e) #list index out of range
print("1"+"1")
异常处理
try:
可能发生错误的语句
except 异常类型:
如果发生异常 那么执行此处的语句
else:
没发生异常执行的语句
"""
异常处理
try:
可能发生错误的语句
except 异常类型:
如果发生异常 那么执行此处的语句
else:
没发生异常执行的语句
"""
L = [1,2,3]
try:
print(L[2])
except IndexError as e:
print(e) #list index out of range
else:
print("写对了。。。")
try:
可能异常的语句
except 异常信息 as e:
异常处理
finally:
无论如何都会运行的语句
文件操作中经常使用finally来关闭文件
"""
try:
可能异常的语句
except 异常信息 as e:
异常处理
finally:
无论如何都会运行的语句
文件操作中经常使用finally来关闭文件
"""
L = [1,2,3]
try:
print(L[2])
except IndexError as e:
print(e) #list index out of range
finally:
print("我一定运行")
所有异常都继承于一个BaseException
如果在补货时不知道是什么错,可以
except BaseException:
一般写Exception就可以了
注意:
1,如果已经捕获到异常后,就不会再捕获了
2,可以捕获嵌套错误
"""
所有异常都继承于一个BaseException
如果在补货时不知道是什么错,可以
except BaseException:
一般写Exception就可以了
注意:
1,如果已经捕获到异常后,就不会再捕获了
2,可以捕获嵌套错误
如
try:
main()
except BaseException:
pass
"""
L = [1,2,3]
try:
print(L[6])
except Exception as e:
print(e) #list index out of range
finally:
print("我一定运行")
三、装饰器
1、装饰器:
在不改变原函数的情况下,给这个函数增加一个新功能
写接口时会用到
实现如下
使用装饰器后,调用func() == 调用inner()
def outer(fn):
def inner():
start = time.time()
fn()
run = time.time() - start
print(run)
return inner
@outer #装饰器 是语法糖
def func():
for i in range(100000):
pass
print("hello")
func() #使用装饰器后,调用func() == 调用inner()
运行原理如下:
import time
def foo(fn):
start = time.time()
fn()
run = time.time() - start
print(run)
def func():
for i in range(100000):
pass
print("hello")
foo(func)
2、当被装饰的函数带参数时
#当被装饰的函数带参数时:
def outer(fn): #接收被装饰的函数
def inner(*args,**kwargs): #接收被装饰的函数的形参
start = time.time()
fn(*args,**kwargs)
run = time.time() - start
print(run)
return inner
@outer
def func(name,user,pwd):
for i in range(100000):
pass郑州人流医院 http://mobile.120zzzzyy.com/
print(user+"说 得了吧"+name,pwd)
func("jack","rose",1234)
3、当装饰器需要有参数时
#当装饰器需要有参数时
def outer(num): #接收装饰器的参数
def middle(fn): #接收被装饰的函数
def inner(*args,**kwargs): #接收被装饰的函数的形参
start = time.time()
for i in range(num):
fn(*args,**kwargs)
run = time.time() - start
print(run)
return inner
return middle
@outer(5)
def func(name,user,pwd):
for i in range(100000):
pass
print(user+"说 得了吧"+name,pwd)
func("jack","rose",1234)
四、主程序调用
在py中,可以通过import与from来进行调用,如果想要实现只能在本文件中能实现的功能,不让调用的文件使用的话,可以使用主程序调用
print("1111111111")
if __name__ == '__main__': #加入这句话可以让这下面的语句只能在本文件中调用
print("hello")
import与from调用的区别为:from导入要从当前打开的路径开始
import 主程序判断
#输出 1111111111 而没有 hello
#导入还可以通过from导入,不过要从当前打开的路径开始
from day14.主程序判断 import *
# import *比较少用,会导致明明覆盖问题
可以看出,通过if语句判断后,其他文件调用时不会打印hello
五、面试题
#面试题
def f(x,l=[]):
for i in range(x):
l.append(i * i)
print(id(l))
print(l)
f(2)
f(3,[3,2,1])
f(3)
f(3,[1,2])
"""
[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]
[1, 2, 0, 1, 4]
"""
可以注意到,当默认参数为空列表的时候,python会开辟一个内存,之后每次当为空列表(即不传值时就会继续使用这个地址(id相同)。所以尽量不要定义空列表的默认参数
简单说就是传递一个参数和传递两个参数的内存地址不一样