Python3零基础学习笔记九

时间:2021-01-23 06:37:05
time 模块:
    import time
       (UTC coordinated universal time)
       (计算机零时:1970-1-1)
    常用属性:
    time.altzone :夏令时时间与UTC时间差(秒)
    time.daylight:夏令时校正时间
    time.timezone:本地区时间与UTC时间差
    常用函数:
    time.time() 返回从计算机元年至当前时间的秒数的浮点数(UTC时间为准)
    time.sleep(secs) 让程序按给定描述的浮点数睡眠一段时间
    time.gmtime([secs]) 将给定秒数转换为用计算机元年计算的时间
    time.asctime((tuple)) 将描述时间的元组转换成日期时间字符串
    time.asctime((2008,8,8,23,8,8,0,0,0))
    年,月,日,时 分,秒,周,0,0
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
自定义模块:
文件mymod
def fac(n):
print('正在计算',n,'的阶乘')
def sum_fac(n):
print('正在计算',n,'的阶乘的和。')
name1 = 'audi'
name2 = 'tesla'

==========导入模块测试


import mymod 

mymod.fac(10)
mymod.sum_fac(30)
print('mymod.name1 = ',mymod.name1)
============
导入模块时的路径索引顺序:
    1.索引程序的运行时路径(当前路径)
    2.搜索 sys.path里提供的路径
    3.搜索内置模块
    4.import sys  → sys.path 下显示出来的路径,放入自己编写的模块就可以使用了。
    5.搜索模块时先搜索sys.path下的模块,如果没有,搜索内置模块
    6.sys.path是个列表,因此可以添加元素(在该列表中指的是路径) 
      sys.path.append('/user/six/desktop'),然后放入模块
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
模块化编程的优点:
     1.有利于多人合作开发
     2.使代码更加易于维护
     3.提高代码的复用率
     4.模块化编程有助于解决函数名和变量名冲突(重名)问题,模块内的变量的作用域
       为模块内全局。
模块的加载过程:
      1.在模块导入时,所有模块的所有语句都会执行
      2.如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
模块的重新加载:
       import 模块名
       import imp
       imp.reload(模块名)    重新加载已经加载过的模块


(imp模块专门负责导入事宜)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→


模块被导入和执行的过程:
       1.先搜索相关路径赵模块(.py)
       2.判断是否有此模块对应的.pyc文件,如果没有此文件,则用.py文件生成
         相应.pyc文件再进行加载
       3.如果文件已经存在,则判断.pyc文件和.py文件的修改时间,再决定是否重新生成.pyc文件
模块的编译 compile
                          编译                    解释执行
         mymod.py   --->> mymod.pyc  ------>>  python3


      (pyc是生成的机器语言的过度文件)
¥¥¥¥¥
        每次执行程序,设备会自行判断对应的.py和.pyc的生成时间,如果.py文件
        生成时间较早,则.pyc不会改变,此时只能通过imp.reload(xxx)重新加载;
        如果.py生成时间较晚,则重新执行程序的时候会自动更改.pyc文件。


模块的文档字符串:
        模块内的第一行没有赋值给任何变量的字符串为文档字符串 
        此文档字符串可以用help(xxx)查看
示例:(mymod.py)
Help on module mymod:
NAME
    mymod - 文档文件
DESCRIPTION
    此模块有两个函数和两个变量
    此处省略100字
FUNCTIONS
    fac(n)
    sum_fac(n)
DATA
    name1 = 'audi'
    name2 = 'tesla'
FILE
    /Users/six/Desktop/python/mymod.py


模块的文档字符串被绑定在模块的__doc__属性上
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
模块内的__xxx__
__file__属性:
      用来绑定模块队形的文件路径名
      示例:
       >>>    import mymod
       >>>    mymod.__file__
__name__属性:
       用来记录模块自身的名字
       作用:1 记录模块名
            2 用来判断是否为主模块
       __name__说明:
       当此模块作为主模块时(第一个运行的模块)运行时,__name__绑定'__main__'
       当此模块不是主模块时,模块为文件名去掉.py    
模块中的__all__列表
       模块中的__all__列表是一个用来存放可导出属性的字符串列表
       作用:
            当用from import * 来导入模块时,只导入__all__列表内的属性
       示例:mymod2.py
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> from mymod2 import *
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'f3', 'f4', 'fac', 'name1', 'name2']
【【【【【加入__all__】】】】】
>>> from mymod2 import *
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'fac', 'name1']
"""from mymod2 import * """
此中只会出现__all__列表中的属性,只对这一个import语句有用。
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
模块的隐藏属性:
       模块中以'_'开头的属性,在from 模块名 import * 语句导入时,不会导入,通常称这些属性
       为隐藏属性。
       示例:mymod3.py
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
标准库模块:
随机模块 random   
       作用:用于模拟或者生成随机数的模块。
       函数说明:见文BVCV
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→   
包(模块包)package (包是文件夹)
      包是将模块以文件夹的组织形式进行分组管理的方法。
      作用:
      1.将一系列模块进行分类管理,有利于防止命名冲突
      2.可以再需要时家在一个或者部分模块而不是全部模块
      包示例:(文件夹里要有__xx__.py文件才会被系统认为是包。)
mypack/
__input__.py
menu.py
games/
__init__.py
contra.py # 魂斗罗
supermario.py    # 超级玛丽
tanks.py      # 坦克大战
office/
__init__.py
excel.py
word.py
powerpoint.py   
导入包:/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/mypack
    import mypack                      # 导入mypack包
   #想调用menu.py里的show_menu函数
    import mypack.menu              # 导入mypack里的menu模块
    mypack.menu.show_menu       # 调用menu.py里的menu函数
  
  示例:import mypack.games.contra.play()
  语法:import 包名.子包名.模块名 [as 模块新名] 
           (同导入模块一样)
from 包名 import *   #导入包下的所有模块