zoukankan      html  css  js  c++  java
  • Python之旅的第14天(模块和包、random、time模块的引入)

    课程内容开始紧张起来啦,但是讲真,今天视频教程里新换的老师废话是真的多,节奏明显不行啊,导致今天看了好久,能总结的东西却没多少。

    模块和包(modue)

      模块和的概念:在实际开发过程中,可能会有很多的方法函数,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

      使用模块之后,代码的可维护性就大大地提高。

      模块三种:Python标准库中、第三方、自定义部分

      同时,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

    模块的导入:

      import语句:直接导入型:import 对应模块文件名     

         位置导入模式:from 包名 import 模块名

      这个声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表。 From…import* 语句

       From…import* 语句

      这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。

    包(package):

      如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

      举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

      现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名:

      

      引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,view.py模块的名字就变成了hello_django.app01.views,类似的,manage.py的模块名则是hello_django.manage。

    关于昨天:if __name__ == '__main__'的

      如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。      

      这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

    模块部分进行测试的引入:

      

       bin.py中内容为:

    from ceshi.ceshi1 import main
    main.run()

      ceshi包内的ceshi1包内的main.py文件: 

    def run():
        print('main def start')
        return 'main def start'

      这里需要注意的是,当python执行import,导入一个模块时,其默认路径是执行语句所在路径,此时执行语句bin存在与“模块和包”子路径内,则导入main.py文件时导入路径为

      from ceshi.ceshi1 import main   与执行文件在同一子目录下的文件,解释器是可以进行对应查找的。

    time模块:

    import time
    #直接获得时间戳的方法,得到自1970年1月1日零时到现在的秒数
    # print(time.time())   #输出结果:1583596680.7545578
    
    #获得当前本时区内的结构化时间
    # print(time.localtime())
    #输出结果:time.struct_time(tm_year=2020, tm_mon=3, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=46, tm_wday=6, tm_yday=68, tm_isdst=0)
    #同时localtime()也是可以提供一个时间戳参数,将其转化为秒的模式
    # print(time.localtime(1583596680.7545578))
    #输出结果:time.struct_time(tm_year=2020, tm_mon=3, tm_mday=7, tm_hour=23, tm_min=58, tm_sec=0, tm_wday=5, tm_yday=67, tm_isdst=0)
    
    #关于gmtime,与localtime作用一样,只是输出的是格林尼治时间
    
    #mktime,将结构化时间转换为时间戳的形式
    # time1 = time.localtime(1627348349)
    # print(time.mktime(time1))
    #最终输出结果还是传入的时间戳:1627348349.0
    
    #将结构化的时间转换为字符串时间
    # res = time.strftime('%y-%m-%d %X',time.localtime())
    # print(res)    #得到现在时间:20-03-08 00:07:54
    
    #将字符串子时间重新转回结构化时间:
    # print(time.strptime(res,'%y-%m-%d %X'))
    #得到:time.struct_time(tm_year=2020, tm_mon=3, tm_mday=8, tm_hour=0, tm_min=11, tm_sec=56, tm_wday=6, tm_yday=68, tm_isdst=-1)
    
    #time.asctime(结构化时间参数)和time.ctime(时间戳)
    #上面两种方法都是获得系统内设定好格式的字符串时间
    #不输入参数为默认现在的时间
    # print(time.asctime())   #Sun Mar  8 00:14:29 2020
    # print(time.ctime())     #Sun Mar  8 00:14:29 2020
    
    #time.sleep()就不多说了

    datetime模块:(就是显示当前时间的东东)

    import datetime
    print(datetime.datetime.now())
    #2020-03-08 00:17:25.004714

    random模块:

    import random
    #random.random产生0-1之间的随机浮点数
    # print(random.random())    #0.5627726637846672
    #random.randint(s,e) 产生s-e之间的整数,范围是s=< x =<e
    # print(random.randint(1,3))
    #random.randrange(s,e) 产生s-e之间的整数,范围是s=< x <e,不包含e
    # print(random.randrange(1,3))
    #random.choice(列表) 随机在列表参数总选取一个元素
    # print(random.choice([1,2,3,4]))
    #random.sample(list,个数) 随机在列表内选取几个元素
    # print(random.sample([1,2,3,4],3))   #输出结果是 [1, 3, 4]
    #random.shuffle(list)打乱原有列表顺序
    # res = random.shuffle([1,2,3,4,5])
    # print(res)
    
    #利用以上random模块的方法,实现一个产生随机验证码的函数
    def yanzhengma():
        res = ''
        for i in range(4):
            num = str(random.randint(0,9))
            zimu = chr(random.randint(65,122))
            a = random.choice([num,zimu])
            res += a
        return res
    
    print(yanzhengma())

    以上就是今天的内容了,里面关于执行路径、__name__ = '__main__'的解释还是比较绕圈圈的,没事的时候还是得回头看看,不然肯定忘的干干净净。

      

  • 相关阅读:
    连锁超市价格表 超市商品价格目录表
    无线路由器后台破解无需密码登录, 什么是网桥,怎么设置网桥
    做技术安卓开发程序员怎么赚钱
    QQ怎么 发送 已经录好的视频
    win 10 文件夹 背景 没效果
    夏婉安
    Navicat Premium 激活码 序列号。破解版。
    韩梦飞沙Android应用集合 想法
    安卓 开机 动画 酷派大神F1开机动画 美化 自定义 修改
    android 视频 2017
  • 原文地址:https://www.cnblogs.com/xiaoyaotx/p/12439477.html
Copyright © 2011-2022 走看看