zoukankan      html  css  js  c++  java
  • Python 模块详解及import本质

    同在当前目录下的模块和包导入

    模块定义

    • 本质就是.py结尾的python文件. 用来从逻辑上组织python代码(变量,函数,类,逻辑)
    • 文件名: test.py;  对应的模块名 : test

    模块导入方式

    • import module_name
      • 调用时需要加module_name. (有点类似java中的类名.调用)
    • import module1_name, module2_name
      • 调用时需要加module_name (有点类似java中的类名.调用)
    • from module_name import * 
      • 不建议用这种方法. 若导入的包中变量名或方法名与当前文件的变量名或方法名一样, 这样会有冲突. 当前文件中同名的方法会覆盖导入文件中的同名方法.
      • 调用时可以直接调用变量名或方法名, 不需要加module_name. (有点像java中调用同一个类中的方法, 直接用就行, 不用加类名.)
    • from module_name import logger as logger_alex (导入和当前文件中方法同名的方法时可以起个别名logger_alex,以避免和当前文件中的方法冲突)
      • 调用时可以直接调用变量名或方法名, 不需要加module_name. (有点像java中调用同一个类中的方法, 直接用就行, 不用加类名.)

    导入模块本质

    • 导入模块的本质就是把python文件解释一遍

    例: 

    module_alex

    复制代码
    1 name='alex'
    2 def say_hello():
    3     print('hello alex')
    4 
    5 
    6 def logger():
    7     print('logger')
    复制代码
    复制代码
     1 # 导入方法1, 导入指定变量名或方法
     2 import module_alex
     3 
     4 print(module_alex.name)
     5 module_alex.say_hello()
     6 
     7 
     8 
     9 # 导入方法2, 导入某个文件全部 (相当于把导入文件的代码加到当前文件中, 所以调用其方法不需要再加文件名,可直接调用)
    10 from module_alex import *
    11 logger()  # 若当前文件中也有一个方法名叫logger(), 这样会有冲突. 当前文件的logger()会覆盖导入文件中的logger()方法
    复制代码

    包定义

    • 本质就是一个目录(必须有一个__init__.py文件)
    • 用来从逻辑上组织模块

    包导入方式

    • import package_name
    • 包导入的本质
      • 导入包的本质就是执行该包下的__init__.py文件4
    • 若包下面除了__init__.py还有其它文件, 想要调用这些文件, 直接 package_name.test1是不行的, 因为导入包的本质是执行下面的__init__.py文件.
      • 这种情况下, 需要在__init__.py文件中导入该package_name下的其它文件
      • 也可以在__init__.py文件中用from.import test1 (代表从当前目录下导入test1)的方法导入同一目录下的另一个python文件test1.
  • 相关阅读:
    L1-012 计算指数
    L1-011 A-B
    L1-010 比较大小
    Django--登录
    Django--跨域设置
    Django--视图装饰器
    Django--URL配置
    Django--多数据库
    Django--channels
    Django--日志
  • 原文地址:https://www.cnblogs.com/tianshug/p/10924273.html
Copyright © 2011-2022 走看看