zoukankan      html  css  js  c++  java
  • 22_模块01

    一、定义
        
        1、Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。
        模块导入的方式:(1) import 模块    (2) from xxx import 模块
    1 import module1[, module2[,... moduleN]]
    2 模块名.函数名  #调用
    3 
    4 from modname import name1[, name2[, ... nameN]]
    5 
    6 from modname import *     # 把一个模块的所有内容全都导入到当前的命名空间也是可行
        2、模块搜索路径顺序
            (1)、当前目录
            (2)、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
            (3)、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
            模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录
     
    二、collections模块
     
        1、Counter 计数器
     1 low:
     2 s = "alex like pig"
     3 dic = {}
     4 for el in s:
     5     dic[el] = dic.get(el, 0) + 1
     6 print(dic)
     7 
     8 
     9 nb:
    10 s = "alex like pig"
    11 print(Counter(s)) # 获取到的结果可以像字典⼀样进⾏使⽤ [key]
        2、 deque 双向队列
     
        (重点)说双向队列之前我们需要了解两种数据结构. 1. 栈, 2. 队列
          (1) 栈: FILO. 先进后出 -> 砌墙的砖头, 老师傅做馒头
          (2)队列: FIFO. 先进先出 -> 买火?票排队, 所有排队的场景
        
    栈的编写
     1 class StackEmptyError(Exception):
     2     pass
     3 class StackFullError(Exception):
     4     pass
     5 class Stack:
     6     def __init__(self, size):
     7         self.size = size
     8         self.lst = []
     9         self.index = 0
    10 
    11     def push(self, el):
    12         if self.index > self.size:
    13             raise StackFullError('stack is Full')
    14         else:
    15             self.lst.insert(self.index, el)
    16             self.index += 1
    17             
    18     def pop(self):
    19         if self.index > 0:
    20             self.index -= 1
    21             ret = self.lst[self.index]
    22             return ret
    23         else:
    24             raise StackEmptyError('the stack is empty')
    25     
    26     def clear(self):
    27         self.lst.clear()
    28         self.index = 0
    29     def max(self):
    30         return self.size
    31     def now(self):
    32         return self.index

    队列:python提供了queue模块

    1 import queue
    2 q = queue.Queue()
    3 q.put("李嘉诚")
    4 q.put("张开")
    5 q.put("张毅")
    6 print(q)
    7 print(q.get())
    8 print(q.get())
    9 print(q.get())

    注意: 如果队列没有元素了. 再也就拿不出来元素了. 此时程序会阻塞

    1 from collections import deque
    2 q = deque()
    3 q.append("张开") # 右侧添加
    4 q.append("包尔")
    5 q.appendleft("赵廷") # 左侧添加
    6 q.appendleft("还我圆圆")
    7 print(q)
    8 print(q.pop()) # 右侧删除
    9 print(q.popleft()) # 左侧删除
        3、namedtuple 命名元组
     1 from collections import namedtuple
     2 # 定义了个元组, 如果灵性够好, 这其实就是创建了个类
     3 nt = namedtuple("point", ["x", "y"])
     4 p = nt(1, 2)
     5 print(p)
     6 print(p.x)
     7 print(p.y)
     8 结果:
     9 point(x=1, y=2)
    10 1
    11 2
        4、OrderedDict   defaultdict
     
        python3.6使用了新算法,来自pypy,节约了20-30%内存,字典查询快是用空间换取了时间。ordeeddict更加浪费空间
    1 from collections import defaultdict
    2 dd = defaultdict(list) # 默认值list
    3 print(dd['娃哈哈']) # [] 当key不存在的时候. 会⾃动执⾏构造⽅法中传递的内容
     
    三、time 时间模块(重点)
     
        1、时间戳 
    1 import time
    2 print(time.time()) # 1538927647.483177 系统时间 
            (1)时间戳(timestamp). 时间戳使的是从1970年01月01日 00点00分00秒到现在共经过了多少秒... 使float来表示
            (2) 格式化时间(strftime). 这个时间可以根据我们的需要对时间进任意的格式化.
            (3) 结构化时间(struct_time). 这个时间主要可以把时间进分类划分. 比如. 1970年01月01日 00点00分00秒 这个时间可以被细分为年...
     
        2、格式化时间
     1 s = time.strftime("%Y-%m-%d %H:%M:%S") # 必须记住
     2 print(s)
     3 
     4 %y 两位数的年份表示(00-99 5 %Y 四位数的年份表示(000-9999 6 %m 月份(01-12 7 %d 月内中的天(0-31 8 %H 24时制时数(0-23 9 %I 12时制时数(01-1210 %M 分钟数(00=5911 %S 秒(00-5912 %a 本地简化星期名称
    13 %A 本地完整星期名称
    14 %b 本地简化的月份名称
    15 %B 本地完整的月份名称
    16 %c 本地相应的期表示和时间表示
    17 %j 年内的一天(001-36618 %p 本地A.M.或P.M.的等价符
    19 %U 一年中的星期数(00-53)星期天为星期的开始
    20 %w 星期(0-6),星期天为星期的开始
    21 %W 年中的星期数(00-53)星期一为星期的开始
    22 %x 本地相应的日期表示
    23 %X 本地相应的时间表示
    24 %z 当前时区的名称
    25 %% %号本身
     
        3、结构化时间
    print(time.localtime())
     
        4、时间戳<——>格式化时间(所有的转化都要通过结构化时间来转化)
    1 t = time.localtime(1888888888) # 结构化时间
    2 s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化这个时间
    3 print(s)
    1 s = "2020-10-01 12:18:12"
    2 t = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 转化成结构时间
    3 print(time.mktime(t)) # 转换成时间戳

        5、时间差计算

    1 import time
    2 true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d%H:%M:%S'))
    3 time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d%H:%M:%S'))
    4 dif_time=time_now-true_time
    5 struct_time=time.localtime(dif_time)
    6 print(struct_time)
    7 print('过去了%d年%d?%d天%d?时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour,struct_time.tm_min,struct_time.tm_sec))

    四、random模块

     1 import random
     2 print(random.random()) # 0-1小数
     3 print(random.uniform(3, 10)) # 3-10小数
     4 print(random.randint(1, 10)) # 1-10整数 [1, 10]
     5 print(random.randrange(1, 10, 2)) # 1-10奇数 [1,10)
     6 print(random.choice([1, '周杰伦', ["盖伦", "胡辣汤"]])) # 1或者23或者[4,5])
     7 print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2个组合
     8 lst = [1, 2, 3, 4, 5, 6, 7, 8]
     9 random.shuffle(lst) # 随机打乱顺序
    10 print(lst)
    五、os模块(所有和操作系统相关的内容都在os模块)
     1 os.makedirs('dirname1/dirname2') 可生成多层递归目录
     2 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
     3 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
     4 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
     5 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表形式打印
     6 os.remove() 删除一个文件
     7 os.rename("oldname","newname") 重命名文件/目录
     8 os.stat('path/filename') 获取文件/目录信息
     9 os.system("bash command") 运行shell命令,直接显示
    10 os.popen("bash command).read() 运行shell命令,获取执行结果
    11 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    12 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
    13 
    14 # os.path
    15 os.path.abspath(path) 返回path规范化的绝对路径
    16 os.path.split(path) 将path分割成目录和文件名二元组返回
    17 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
    18 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    19 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
    20 os.path.isabs(path) 如果path是绝对路径,返回True
    21 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
    22 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
    23 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    24 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
    25 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
    26 os.path.getsize(path) 返回path的大小
    27 # 特殊属性:
    28 os.sep 输出操作系统特定的路径分隔符, win下为"\",Linux下为"/"
    29 os.linesep 输出当前平台使用的行终止符, win下为"
    ",Linux下为"
    "
    30 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
    31 os.name 输出字符串指示当前使用平台。 win->'nt'; Linux->'posix'
    32 
    33 os.stat() 属性解读
    34 stat 结构:
    35 st_mode: inode 保护模式
    36 st_ino: inode 节点号。
    37 st_dev: inode 驻留的设备。
    38 st_nlink: inode 的链接数。
    39 st_uid: 所有者的⽤户ID。
    40 st_gid: 所有者的组ID。
    41 st_size: 普通⽂件以字节为单位的⼤⼩;包含等待某些特殊⽂件的数据。
    42 st_atime: 上次访问的时间。
    43 st_mtime: 最后⼀次修改的时间。
    44 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参⻅平台的⽂档)
     
    六、sys模块(所有和python解释器相关的都在sys模块)
    1 sys.argv 命令行参数List,第一个元素是程序本身路径
    2 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)  sys.exit(-1)
    3 sys.version 获取Python解释程序的版本信息
    4 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    5 sys.platform 返回操作系统平台名称
  • 相关阅读:
    学生管理系统(2:添加主界面窗口)
    Qfile
    QButtonGroup
    comboBox
    QLineEdit
    QMessageBox
    实现简单的计算器(控制器代码)
    实现简单的计算器(计算功能模块实现)
    网络编程基础【HTML编程】
    网络编程基础【正则表达式】
  • 原文地址:https://www.cnblogs.com/hq82/p/9758330.html
Copyright © 2011-2022 走看看