• 14、模块、调用、循环导入的问题、模块的搜索路径与优先级、开发规范


    一、模块

    1、什么是模块

    ​ 模块就是一系列功能的集合体

    ​ 模块大致分为四种类别:

    1、一个py文件就是一个模块,文件名叫test.py,模块名叫test
    
    2、一个包含有__int__.py文件的文件夹称之为包,包也是模块
    
    3、使用c编写并链接到python解释器的内置模块
    
    4、已被编译为共享库或者DLL的C或者C++的拓展
    

    ​ 模块有三种来源:

    ​ 1、自带的模块

    ​ 2、第三方模块:pip3 install requests

    ​ 3、自定义模块

    2、为何要用模块

    ​ 1、(自定义模块、第三方模块)拿来主义,为了提高开发效率

    ​ 2、自定义模块是为了解决代码冗余问题

    3、如何用模块

    ​ 模块都是用来被导入使用的,不是用来运行的

    ​ 首次导入模块发生的3件事情

    1、执行py文件
    
    2、产生py文件的名称空间,将py文件运行过程中产生的名字丢到该文件的名称空间中
    
    3、在当前文件中产生一个名字,该名字指向2中产生的而名称空间
    

    ​ 之后的导入,都是直接引用首次导入产生的名称空间,不会重复执行代码

    二、模块的import引用

    ​ 强调用:模块名.名字,指名道姓的问某一个模块要名字对应的值,不会与当前名称空间的名字发生冲突

    ​ 强调2:无论是查看还是修改,都是以原模块为基准的,与调用位置无关

    拓展:
    可以以逗号为分隔符,在一行导入多个模块。
    建议还是分开写如下
    import time
    import foo
    import m
    
    
    import time,foo,m		#不建议
    
    导入模块的规范
    I、python内置模块
    II、第三方模块
    III、程序员自定义模块
    
    例:
    import time
    import sys
    
    import 第三方1
    import 第三方2
    
    import 自定义模块1
    import 自定义模块2
    import 自定义模块3
    
    import...as...
    
    如果文件名过长,可以起别名
    import foooooooooooooo as f #f=fooooooooooooo
    f.get()
    

    5、模块是第一类对象

    6、自定义模块的命名应该采用纯小写加下划线的风格

    7、可以在函数内导入模块去使用

    def func():
    	import foo
    

    三、一个py文件有两种用途

    1、被当成程序运行

    2、被当作模块导入

    二者的区别:

    1、当文件被运行时,__name__的值为__main__
    2、当文件被当作模块导入时,__name__的值为**
    
    打main+回车
    

    四、from+import

    用import导入模块优缺点:

    优点:肯定不会与当前名称空间中的名字冲突

    缺点:加前缀显得麻烦

    from...import...导入也发生了三件事

    1、产生一个模块的名称空间

    2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去

    3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址

    from foo  import  x
    from foo  import  get
    from foo  import  change
    

    优点:不用加前缀,代码更精简

    缺点:容易与当前名称空间混淆

    拓展
    一行导入多个名字(不推荐)
    from foo import x, get, change
    
    用*导入所有的名字(极其不推荐)
    from foo import *
    
    香是挺香的,但是非常容易发生冲突
    

    五、循环导入的问题

    尽量不要出现循环导入,把两个功能放到第三方去。

    如果发生了循环导入,解决方法如下:

    def f():   #定义一个函数来导入,定义阶段不会执行,
    					放在开头增加可读性
    	from m2 import y
    	print(y)
    

    六、模块的搜索路径与优先级

    1、内存中已经导入好的

    2、内置的

    3、sys.path #这是一个列表,记录的元素都是文件夹。临时加。

    import sys
    sys.path.append(r'D:python17day02')
    

    七、开发规范
    https://www.jianshu.com/p/94f88ce945a2

  • 相关阅读:
    如何关闭和打开oracle 10g自动收集统计信息功能
    ORA00600:internal error code,arguments
    ORA01033: ORACLE initialization or shutdown in progress
    ORA01652:unable to extend temp segment by num in tablespace name
    ORA01578:Oracle data block corrupted
    ORA03113:endoffile on communication channel
    ORA01650:unable to extend rollback segment NAME by NUM intablespace NAME
    ORA01628:max # of extents num reached for rollback segment num
    C# 项目中的 bin 目录和 obj 目录的区别,以及 Debug 版本和 Release 版本的区别
    管理 Hadoop 集群的5大工具
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14231255.html
Copyright © 2020-2023  润新知