zoukankan      html  css  js  c++  java
  • 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途

    模块的四种形式

    Nike推荐的学数据分析与算法的书《利用python进行数据分析》

    模块

    相当于应用软件

    1. 系统自带应用软件
    2. 需要下载的应用软件
    3. 自定义的软件

    模块的四种形式

    1. 内置模块:python解释器自带的模块,

    2. pip、pycharm安装的模块

    3. 自定义模块——》自定义代码

      什么是模块?

      模块——》实现功能——》代码——》

    4. 包(模块)

    import和from...import

    导入模块

    1. 开辟内存空间,内存空间命名为time
    2. 把time。py代码读入内存名称空间然后运行
    3. 通过time.方法名使用模块中的方法

    from 模块名 import方法名

    1. 开辟内存空间,内存空间命名为time
    2. 把time。py代码读入内存名称空间然后运行
    3. 把sleep()读入当前文件名.py文件中(就是当前文件),因此可以直接使用方法名

    如果想使用多个方法:

    1. from 模块 import 方法1,方法2
    2. from 模块 import * 这种方式会将模块所有的方法全部导入,容易与主程序变量名发生冲突,最好不要使用。

    import的优缺点

    优点:永远不会和变量名冲突

    缺点:每次导入多输几个字

    from 模块名 import 方法名的优缺点

    优点:少输几个字

    缺点:易发生冲突

    自定制模块

    自己写的一个.py文件就是一个自定义的模块,文件名就是模块名。模块名不要和python自带模块冲突。

    用途:分文件存储代码——》函数与函数之间分开——》让代码块更加清晰——》不同的模块干不同的事情

    循环导入问题

    模拟问题的发生:

    1. 在pycharm里创建两个文件,m1.py、m2.py

    2. m1里写下如下文件

    print('from m1.py')
    from m2 import x 
    y = 'm1'
    
    
    1. m2里写下如下文件
    print('from m2.py')
    from m1 import y
    

    如果运行m1文件就会报错‘cannot import name 'x'’

    解决方案

    方案一

    将对自定义的模块调用都放入函数中,这样就只有使用模块时才会调用模块,从而避免两个程序以相互调用的逻辑出现。

    #m1.py
    print('from m1.py')
    def func1():
        from m2 import x
        print(x)
        
    y = 'm1'
    
    #m2.py
    print('from m2.py')
    def func1():
        from m1 import y
        print(y)
    x = 'm2'
    

    方案二

    将对模块的导入放要调用的变量下面(以后都用方案一)

    # m1.py
    print('from m1.py')
    y = 'm1'
    from m2 import x
    
    # m2.py
    print('from m2.py')
    x = 'm2'
    from m1 import y
    

    模块的搜索路径

    模块的搜索顺序可以通过在主程序内读入一个模块,让主程序调用模块运行一段时间,在这段时间内将此模块删除来判断程序对模块路径的搜索顺序。(为了防止不必要的错误发生,以后程序的文件名尽量用英文命名)

    1. 内存

    2. 内置

    3. 自定义

      内存——》内置——》自定义

    Python文件的两种用途

    python文件共有两种用途,一是执行文件,二是本当做模块导入。

    编写好的一个python文件可以有两种用途:

    1. 脚本,用来被执行
    2. 模块,用来被导入

    if _name_ == '__main__':的使用

    if __name__ == '__main__':用于当调用模块时,不想让模块中的某个函数或者代码执行,也可以用于只让某个函数或者代码块执行。__name__是每个文件独有的,当该文件作为执行文件运行时,__name__等于'__main__';当该文件作为模块文件导入时,__name__等于文件名,if只是一个普通的判断语句。

  • 相关阅读:
    sql之Replace
    虚拟主机的IIS连接数和访问流量限制各是什么
    SQL COUNT() 函数
    bzoj3163 Eden的新背包问题
    THUPC2018 城市地铁规划
    HNOI 2017 礼物
    NOI 模拟赛
    PKUSC2018 Slay The Spire
    NOI 模拟赛
    NOI 模拟赛
  • 原文地址:https://www.cnblogs.com/ghylpb/p/11592034.html
Copyright © 2011-2022 走看看