一、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相同)。所以尽量不要定义空列表的默认参数

  简单说就是传递一个参数和传递两个参数的内存地址不一样