zoukankan      html  css  js  c++  java
  • Python之旅.第四章.模块与包

    包:

    包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来

    需要强调的是:

    1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

    2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

    为什么要使用包:

    包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来

    随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

    导入包:

    1 产生一个包的名称空间
    2 执行包下的__init__.py文件,将产生的名字存放于包的名称空间中
    3 在当前执行文件中拿到一个名字aaa,该名字指向包的名称空间

    print(aaa.m1) #aaa.m1 就是问aaa.__init__.py要一个名字m1

    1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:

    凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

    2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

    3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

    包的导入之import:

    import 包名

    包的使用之from ... import ...:

    from 包名 import 模块

    需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

    绝对导入和相对导入:

    我们的最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

    绝对导入:以glance作为起始

    相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

    强调:
    1、在导入时带点的,点的左边必须是一个包,这是导入包特有的语法
    2、包内,模块直接的导入应该使用from。。。import 。。。
    3、from 。。。 import。。。,import后必须是一个明确的名字,没有任何的前缀
    from a.b.c.d.f import g.h.x #错误

    1、f左边必须都是包
    2、import后的名字不能有任何前缀

    包以及包所包含的模块都是用来被导入的,而不是被直接执行的。而环境变量都是以执行文件为准的

    time模块:

    时间分为三种形式:
    1、时间戳
    time.time()#获得时间秒数
    print(time.time())
    start_time=time.time()
    time.sleep(3)
    stop_time=time.time()
    print(stop_time-start_time)


    2、格式化的字符串
    time.strftime(格式化):根据你输入的格式化,得到你想要的时间
    print(time.strftime('%Y-%m-%d %H:%M:%S %p')) #年月日时分秒 上下午判断
    print(time.strftime('%Y-%m-%d %X %p'))

    3、struct_time对象
    time.localtime(): #本地时区的struct_time

    print(time.localtime()) # 上海:东八区
    print(time.localtime().tm_year)

    print(time.localtime().tm_mday)

    print(time.gmtime()) # UTC时区
    struct_time
    
    

    datatime模块:

    # print(datetime.datetime.now()) #返回具体时间
    #print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 年-月-日
    # print(datetime.datetime.now() )
    # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
    # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
    # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
    # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
    
    # c_time  = datetime.datetime.now()
    # print(c_time.replace(minute=3,hour=2)) #时间替换

    shutil模块:

    高级的 文件、文件夹、压缩包 处理模块

    shutil.copyfileobj(fsrc, fdst[, length])
    将文件内容拷贝到另一个文件中

    压缩文件:

    import shutil
    import time
    ret = shutil.make_archive(
    "day15_bak_%s" %time.strftime('%Y-%m-%d'),
    'gztar',
    root_dir=r'D:codeSH_fullstack_s1day15'
    )

    解压文件:

    import tarfile
    t=tarfile.open('day15_bak_2018-04-08.tar.gz','r')
    t.extractall(r'D:codeSH_fullstack_s1day16解包目录')
    t.close()

    randon模块:

    1.print(random.random())#(0,1)----float 大于0且小于1之间的小数

    2.print(random.random())#(0,1)----float 大于0且小于1之间的小数

    3.print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]

    4.print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合

    5.print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716

    6.item=[1,3,5,7,9]

      random.shuffle(item) #打乱item的顺序,相当于"洗牌"

    进度条功能:

    def progress(percent,width=50): #定义一个输出格式方法:传入百分比和进度条长度
    if percent > 1: #判断进度条是否大于百分之100
    percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent) * '#')# ([%-50s] 具体#号的数量,总长度*传来的百分比)
    print(' %s %d%%' %(show_str,int(100*percent)),end='') #输出, 为顶头 ,%s传入的星,%d为百分比,end=''去除换行

    import time
    recv_size=0 #下载文件变量
    total_size=8097 #被下载文件
    while recv_size < total_size: #循环,下载文件小于被下载文件
    time.sleep(0.1) #time.sleep方法:暂停0.1秒
    recv_size+=100 #累计下载量
    percent=recv_size / total_size #累计下载/总文件量,得到百分比
    progress(percent) #将百分比的值传入输出功能

    随机生成验证码:

    import random 

    def make_code(n=5): #随机验证码功能
    res='' #定义一个加载验证码的变量
    for i in range(n): #循环
    s1=str(random.randint(0,9)) #随机取出一个值
    s2=chr(random.randint(65,90)) #随机取出一个值并转化成字母
    res+=random.choice([s1,s2]) #随机取一个值 自加
    return res

    print(make_code(10)) #输出


  • 相关阅读:
    Kali学习笔记38:文件上传漏洞
    Kali学习笔记37:APPSCAN
    Kali学习笔记36:AVWS10的使用
    Kali学习笔记35:使用VBScript、PowerShell、DEBUG传输文件
    Kali学习笔记34:配置TFTP和FTP服务
    《day13--异常的进阶和包的使用》
    《java作业》
    《day12---异常》
    《AppletButtonEvent.java》
    《CheckboxDemo.java》
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8745541.html
Copyright © 2011-2022 走看看