zoukankan      html  css  js  c++  java
  • 模块:

    #什么是模块? python代码的文件
    #代码的可读性差,且重复的代码多,写代码困难大
    #将一些复杂的需要重复使用的功能进行归类,分别放到同一个py文件中。
    # 需要调用的时候直接拿来用就可以了。

    实验前先建一个xiaomei.py ,作为一个自定义模块。模块内容如下

    print('小司机')
    price = '三十块钱一位'
    def drive():
        print('快上车')

    # import xiaomei
    #一、导入模块时做的事
    #1.看看自己的内存里有没有
        #有就不干活,没有再倒进来
    #2.创建一个命名空间,在这个命名空间中执行代码
    #3.创建了一个xiaomei这个名字,给命名空间中变量和xiaomei绑定在一起
    #4.import方式导入模块中的内容和自己文件中的内容不会冲突

    def drive():pass
    # xiaomei.drive()  #执行模块里的函数
    # print(xiaomei.price)

    #二、import ... as:给模块重命名,重命名之后之前的名字就失效了,新名字可以直接使用
    # import xiaomei as xm  #import的名字太长我嫌弃
    # xm.drive()

    #当import的模块名和我文件中的变量名重名的时候,将模块重命名。保证模块和变量都可以调用(模块要使用新名字调用)
    # import xiaomei as xm  
    # def xiaomei():
    #     print(123)
    # xm.drive()

    调用数据库:
    # if 是mysql数据库:    #当兼容多个模块的相同操作的时候
    #     import mysql as db
    # elif 是oracle数据库:
    #     import oracle as db
    # db.open
    # db.write

    #三、import 多个模块(同时调用多个模块,分别导入)
    # import os,re,time
    #
    # os.getcwd()
    # re.findall()
    # time.time()
    # import os
    # import re
    # import time
    #
    # import requests
    #
    # import xiaomei
    #先导入内置的模块
    #再导入扩展模块 :requests beautifulsoup django selenium paramiko
    #最后导入自定义的模块

    from……import……的用法
    # from xiaomei import drive,price
    # from xiaomei import drive as d,price as p
    # from import的用法 会直接将导入的内容放在全局,如果dirve中用到的变量在模块和代码中都有,但是dirve中用到的变量和drive方法是一种绑定关系,调用时还是要使用自己模块中的变量。
    # 如果有同名,就会发生覆盖,(后出现的覆盖新出现的)

    import的三种方式:
    一、
    # import xiaomei
    这个时候使用 xiaomei 中变量和函数时:
    xiaomei.drive()
    xiaomei.price
    二、
    # from xiaomei import *    #xiaomei 中的函数跟变量都可以直接使用了
    这时候使用能够xiaomei 中的变量和函数
    # drive()
    # print(price)
    三、
    # from xiaomei import drive,price
    # drive()
    # print(price)

    当要使用之歌模块中的多个方法时候,使用第一种,import 模块名
    当只是使用模块中年的一个或二个的时候,使用from模块名 import 函数名
    不推荐使用from import *

    #from .. import *
    #*受到__all__的限制,如果不定义__all__就默认引入所有

    代码执行时,一旦引入了一个模块,这时候模块中的内容改变了,也对代码的执行没有影响。

    把模块当做脚本执行 在自定义模块中添加: if__name__="__main__":

    在自定义模块中调试时,将函数和变量都放到这句话下, 为的是,在直接执行代码的时候,代码能够直接执行,跟不写这句话直接调用没有区别。

    在模块文件中__name__ 的值是 "__main__"

    在程序中调用这个模块时,这句话下面(或者说里面)的代码就不会执行 在程序中__name__ 的值是 'xiaomei'

    总而言之,只要是函数的调用,在模块文件中就该放到if__name__="__main__":下

    当做脚本运行: __name__ 等于'__main__'

    当做模块导入: __name__= 模块名

    模块搜索路径 python解释器在启动时会自动加载一些模块,可以使用sys.modules查看

    在第一次导入某个模块时(比如my_module),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用

    如果没有,解释器则会查找同名的内建模块,如果还没有找到就从sys.path给出的目录列表中依次寻找my_module.py文件。

    所以总结模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

    需要特别注意的是:我们自定义的模块名不应该与系统内置模块重名。

    #执行python解释器,已经在内存中加载了一些内置的模块了 #导入模块的时候,如果模块不存在在sys.modules,才从sys.path给的路径中依次去查找 #sys.path完全可以决定某个模块能不能被找到(除了已经在内存中加载的一些内置模块)

    #import xiaomei #当一个py文件被当做一个模块导入的时候,会自动生成一个pyc文件 #pyc文件是这个代码编译之后的文件,节省了每一次导入代码之后还要编译的时间

  • 相关阅读:
    js 基础(面试前必看)
    typescript 使用的几种情况
    flutter 命令卡主的问题
    React 通过注释自动生成文档
    jest 测试入门(一)
    react hooks 全面转换攻略(三) 全局存储解决方案
    缓存穿透、击穿、雪崩区别和解决方案
    java8 lambda表达式
    maven中snapshot快照库和release发布库的区别和作用
    初识 Nacos 以及安装
  • 原文地址:https://www.cnblogs.com/biluo/p/7862915.html
Copyright © 2011-2022 走看看