我是python小白 发表于 2019-4-22 20:25:50

递归和time

本帖最后由 我是python小白 于 2019-4-22 20:37 编辑

递归
递归调用:一个函数,调用自身,称为递归调用

递归函数:一个会调用自身的函数称为递归函数

方式:

1、写出临界调条件

2、这这一次和上一次的关系

3、假设当前函数已经能用,调用自身计算上一次的结果,在求出本次的结果。

入一个数(大于等于1),求1+2+3+............+n的和
def sum(n):
    if n == 1:
            return 1
    else:
               return n + sum(n-1)
栈和堆队列
栈:

栈的特点:先进后出

压栈(向栈里存数据)

出栈:在栈里取数据

队列:

队列的特点:先进先出

#模拟
import collections
#创建一个队列
queue = collections.deque()
print(queue)
#进队
queue.append("a")
queue.append("b")
queue.append("c")
#出队
res1 = queue.popleft()
#这个出的是a
目录遍历:
递归遍历目录:

import os

def getAllDirRE(path):
    #得到当前目录下所有文件
    filesList = os.listdir(path)
    #处理每个文件
    for fileName in fileList:
      #使用绝对路径
      fileAbsPath = os.path.join(path, fileName)
      if os.path.isdir(fileAbsPath):
            print("目录:", fileName)
            getAllDir(fileAbsPath)
      else:
            print("文件", fileName)


getAllDir(r"c:\user\xlg\t\r\e\s\day\dir")
"栈模拟递归遍历,(深度遍历)"
def getAllDirDE(path):
    stack = []
    stack.append(path)
   
    #处理栈,当栈为空的时候结束循环
    while len(stack) != 0:
      #从栈里取出数据
      dirPath = stact.pop()
      #目录下所有文件
      fileList = os.listdir(dirpath)
      #处理每一个文件,如果是普通文件则打印出来,如果是目录文件则将该目录的地址压栈
      for fileName in filesList:
            filrAbspath = os.path.join(dirpath, fileName)
                if os,path.isdir(fileAbsPath):
                #目录就压栈
                print("目录:", fileName)
                stack.append(fileAbsPath)
            else:
                #打印普通文件
                print("普通:" + fileName)
         
队列模拟递归,广度遍历
import os,collections

def getAllDirQUE(path):
    queue = cllections.deque()
    #进队
    queue.append(path)
    while len(queue) != 0:
      #出队数据
      dirpat = queue.popleft()
      #找出所有的文件
      fileList = os.listdir(dirPath)
      for fielName in fileList:
            #绝对路径
            fileAbsPath = os.path.join(dirpath, fileName)
            if os.path.isdir(fileAbsPath):
                print("目录:",fileName)
                queue.append(fileAbspath)
            else:
                print("文件:", fileName)
Time模块
utc世界协调时间:格林尼治天文时间,世界标准时间,在中国来说就是utc+8

DST(夏令时):是一种节约能源而认为规定时间制度,在夏季调快一小时

时间表示形式:

1.时间轴:以整型或浮点型表示时间的一个以秒为单位的时间间隔,这个时间间隔的基础值是从1970年1月1日,开始算起

2、元组:一种python的整数结构表示,这个元组9个整型内容




ear



onth



ay



ours



inutes



econds



eekday



ulia day



lag(1或-1或0)
3、格式化字符串

|格式|      含义|




-|---|
|%a| 本地(locale)简化星期名称|

|%A|本地完整星期名称|

|%b| 本地简化月份名称|

|%B| 本地完整月份名称|

|%c| 本地相应的日期和时间表示|




%d| 一个月中的第几天(01 - 31)|



%H| 一天中的第几个小时(24 小时制,00 - 23)|



%l| 一天中的第几个小时(12 小时制,01 - 12)|                     |       |



%j| 一年中的第几天(001 - 366)|                                  |       |



%m| 月份(01 - 12)|                                          |       |



%M| 分钟数(00 - 59) |                                           |       |
|%p| 本地 am 或者 pm 的相应符|




%S| 秒(01 - 61)    |



%U| 一年中的星期数(00 - 53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第 0 周 | *注3* |



%w| 一个星期中的第几天(0 - 6,0 是星期天)|
|%W| 和 %U 基本相同,不同的是 %W 以星期一为一个星期的开始|

|%x| 本地相应日期   |

|%X| 本地相应时间|




%y| 去掉世纪的年份(00 - 99)    |                              |       |
|%Y| 完整的年份|




%z| 用 +HHMM 或 -HHMM 表示距离格林威治的时区偏移(H 代表十进制的小时数,M 代表十进制的分钟数) |
|%Z| 时区的名字(如果不存在为空字符) |

|%%| %号本身   |

#返回当前时间戳,浮点数心事,不需要参数
c = time.time()
print(c)
#将时间戳转换utc时间元组
c = time.gmtime(c)
#将时间戳转换成本地时间元组
b =time.localtime(c)
#将本地时间元祖转成时间戳
m = time.mktime(b)
#将时间元组转成字符串
s = time.asctime(b)
#将时间戳转为字符串
p = time.ctime(c)
#将时间元组转换成给定的字符串,参数2是一个本地时间元组,默认是当前时间
q = time.strftime("%Y-%m-%d %H:%M:%S",b)
#将时间字符串转为时间元组
tome.strptime(q,"%Y-%m-%d %x")
#延迟一个小时,整型或者浮点型
time.sleep(4)
#返回当前程序的cpu执行时间,Unix形式始终返回全部的运算时间,window从第二次开始,都是以第一个调用次函数的开始时间戳作为基数。
y1 = time.clock()
time.sleep(2)
y2 = time.clock()
print("%d", y2)
DATAtime
datatime比time高级不少,可以理解为datetieme基于time进行封装提供了更为实用的函数,datetime模块的借口更直观,跟容易调用

模块中的类:




atatime 同时又时间和日期



imedelta 主要用于计算时间跨度



zinfo时区相关



ime只关注时间



ata只关注日期
#获取当前时间
d1 = datetime.datetime.now()
#获取指定时间
d2 = datetime.datetime(1999, 10, 1, 10, 25, 28,11111111)
#将时间转为字符串
d3 = d1.strftime('%y-%d %x')
#将格式化字符串转为datetime对像
#转换格式要与字符串一致
d4 = datetime.date.strptime(d3, "%y-%m-%d %x")
#时间计算
d5 = d1- d2
#间隔天数和秒数
print(d5)
#间隔的天数
print(d5.day)
#间隔天数除外的秒数
print(d7.seconds)
calendar(日历)
日历模块:

#使用
#返回指定某年某月的日历
print(calendar.month(2017,7))
#返回指定年的日历
print(calendar.caalendar(2017))
#闰年返回True,否则返回False
print(calendar.isleap(2000))
#返回某个月的weekday的第一天和这个月所有的天数
print(calendar.monthrange(2017,5))
#返回某个月以每一周为元素的列表
print(calendar.monthcalendar)

cwhsmile 发表于 2019-4-23 00:03:28

time.clock()已经不建议使用了,改用time.perf_counter()或者time.time.process_time()

我是python小白 发表于 2019-4-24 13:01:35

cwhsmile 发表于 2019-4-23 00:03
time.clock()已经不建议使用了,改用time.perf_counter()或者time.time.process_time()

谢谢你的建议。
页: [1]
查看完整版本: 递归和time