zoukankan      html  css  js  c++  java
  • 模块的导入

    模块的种类

    1、内置模块
    2、自定义模块
    3、第三方模块
     
    注意:
    py:里面叫模块
    其他:里面叫类库
     

    模块的存在方式

    1、先导入,后使用。
    2、大模块就是文件夹,小模块就是文件。
     
     

    模块的使用方式

     1 1、导入整个模块,并定义别名  (单模块的导入,推荐使用方式)
     2 import module1 as s1
     3 
     4 调用方法:module1.login()
     5 as:是别名,也是s1.login()
     6 
     7 
     8 
     9 2、导入指定目录下的模块,并定义别名
    10 import dir_name.module1 as s2
    11 调用方法:dir_name.module1.logout()
    12 
    13 
    14 
    15 3、导入模块,并定义别名:
    16 import day5_1.master as s3
    17 调用方法:s3.master()
    18 
    19 
    20 
    21 4、导入非sys.path目录下的模块:
    22 sys.path.append('D:\')
    23 import order
    24 调用方法:order.producer("alex")
    25 
    26 
    27 
    28 5、用from导入指定函数:(单模块的导入)
    29 from s4 import login
    30 调用的时候:login()
    31 
    32 注意:
    33 只导入s4中的指定函数,python不会将所有s4代码加载到内存中。
    34 而是只将s4中的login的函数加载到内存里

    模块名的重要性

    1、不要跟内置模块一个名。
    2、不要重复模块名。
    3、按照规范,大模块创建文件夹,小模块使用文件。

    跨目录导入模块

    一、跨目录导入的特点:

    1、要通过环境变量找到调用的模块:
    2、不能写死,以免跨平台的时候无法调用:
    3、sys.path目录,可以使用sys.path.append('D:\')将指定目录的模块添加到path列表里(类似于环境变量)

    1 D:软件pychardatas13day5
    2 D:软件pychardata
    3 D:软件py3.5python35.zip
    4 D:软件py3.5DLLs
    5 D:软件py3.5lib
    6 D:软件py3.5
    7 D:软件py3.5libsite-packages   #第三方安装模块目录
    二、思路:
    1、找到自己的路径:(相對路徑)
    1 print(__file__)
    2 
    3 D:/软件/pychar/data/s13/Atm/bin/atm.py

    2、动态的获取到程序的绝对路径(绝对路径)

    1 import os
    2 print(os.path.abspath(__file__))
    3 
    4 D:软件pychardatas13Atminatm.py

    3、获取当前目录。不要当前文件:(找到父集目录)

    1 import os
    2 print(os.path.dirname(os.path.abspath(__file__)))
    3 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    4 
    5 D:软件pychardatas13Atmin
    6 D:软件pychardatas13Atm

    4、将当前目录加入到变量里:

     1 import sys,os
     2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     3 for i in sys.path:
     4     print(i)
     5 sys.path.append(BASE_DIR)
     6 sys.path.insert(0,BASE_DIR)
     7 
     8 print('
    ')
     9 ft = "{:*^100s}".format('添加BASE_DIR后的sys.path路径')
    10 print(ft)
    11 print('
    ')
    12 
    13 for i in sys.path:
    14     print(i)
     1 显示结果:
     2 D:软件pychardatas13Atmin
     3 D:软件pychardata
     4 E:python35python35.zip
     5 E:python35DLLs
     6 E:python35lib
     7 E:python35
     8 E:python35libsite-packages
     9 ***************************************添加BASE_DIR后的sys.path路径***************************************
    10 D:软件pychardatas13Atm
    11 D:软件pychardatas13Atmin
    12 D:软件pychardata
    13 E:python35python35.zip
    14 E:python35DLLs
    15 E:python35lib
    16 E:python35
    17 E:python35libsite-packages
    18 D:软件pychardatas13Atm

    第三方模块的下载和安装

     参考文献:http://www.cnblogs.com/wupeiqi/articles/5501365.html

    一、安装方式:

    (一)、pip3:(类似于yum、rpm安装方式)
    eg: pip3 install  requests

     

    (二)、源码安装:
    c、进入目录:
    cd D:mysql-apppython-app equests-requests-v2.18.1-16-g49c44a0 equests-requests-49c44a0
     
     
    d、安装软件:
    python3  setup.py install
     
     
    e、导入python中
    import requests

    import的本质

    一、定义:
    1、模块:(1)、用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),
                    (2)、本质就是.py结尾的python文件
                    (3)、文件名:test.py,对应的模块名:test
    2、包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)
    3、常见的用法:
    1 (1)、指定绝对路径的login模块导入check_auth功能函数
    2 from shopping.core.login import check_auth,check_admin
    3 
    4 (2)、从core目录下开始导入login模块
    5 from core import login
    6 
    7 (3)、当前目录的login模块下导入check_auth功能函数
    8 from .login import check_auth

    二、import的本质:(路径搜索和搜索路径)

    (一)、导入的语法格式:
     1 1、import  模块名:
     2 eg :import tset    (test=‘test.py all code’)
     3 实例:
     4 import dy
     5 dy.set()
     6 dy.atc()
     7  
     8 2、from 模块名  import 方法:
     9 eg:from test  import name   (name='alex')
    10 实例:
    11 from dy import atc
    12 atc()


    (二)导入的类型和本质:

    导入有两种类型:模块 、
    1、导入模块的本质:就是把python文件解释了
    2、导入包的本质:(路径搜索和搜索
    (1)就是执行该包下的__init__.py
    (2)路径搜索的位置为>>> import sys sys.path (从第一个逐步往后
    (3)如果是夸模块导入,则需要添加导入模块的绝对路径到sys.
    (4)import + 模块名,要通过from去寻找 ’包名‘,然后在import ’.py‘ 的模块文件。
    1 mport sys,os
    2 x = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    3 # sys.path.append(x)
    4 sys.path.insert(0,x)
    5 print(sys.path)
    导入方法

    (一),相同目录下的模块导入:

    1、import   module_name             #导入本地单个模块
    调用方式:module_alex.say_hello()  
                      module_alex.logging() 
    
    2、import module1_name,module1_name   #导入本地多个模块
    调用方式:module1_alex.say_hello()   
                      module2_alex.logging() 
    
    #注释:凡是from开始的导入模块都可以直接调用
    3、from module_alex import *    #不推荐使用,如果模块名称相同,就会备覆盖掉(重名时本地模块优先,因为后者会覆盖掉前者的内存地址)
    调用方法:say_hello()
                       logging()
    
    4、from module_alex import logging   #导入module_alex模块下的,logging方法。
    调用方法:logging()
    
    
    5、from module_alex import logging  as m1   #导入module_alex模块下的,logging方法,并自定义别名
    调用方法:m1()

     (二)、不同目录的模块导入:(重点)

    a、添加路径:
    import sys,os
    x = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    # sys.path.append(x)
    sys.path.insert(0,x)
    print(sys.path)
    
    b、导入模块:
    from bin import test
    from bin import foo
    from conf import conf
    from logs import slow_log
    c、调用方法: slow_log.slow() conf.pz() print(test.name) test.loggin() test.mgs() foo.logger() foo.say_hello() d、显示结果: ['D:\PyCharm\data\s13\Atm', 'D:\PyCharm\data\s13\Atm\core', 'D:\python3.5\lib\site-packages\setuptools-18.1-py3.5.egg', 'D:\python3.5\lib\site-packages\pip-7.1.0-py3.5.egg', 'D:\PyCharm\data', 'D:\python3.5\python35.zip', 'D:\python3.5\DLLs', 'D:\python3.5\lib', 'D:\python3.5', 'D:\python3.5\lib\site-packages'] log目录下的slow_log模块中slow方法 conf目录下的conf配置文件 bin目录下的test模块中name变量 bin目录下的test模块中loggin方法 bin目录下的test模块中mgs方法 bin目录下的foo模块中logger方法 bin目录下的foo模块中say_hello方法



    (三)、同级目录下导入包:

    (三)、同级目录下导入包:
    
    1、设置包下的init路径:         
    from . import test
    from . import foo
    
    2、与包同级的文件中调用:
    #导入bin包下的test模块
    from bin import test
    
    #调用test模块下的方法:
    方法一:
    import bin
    bin.test.loggin()
    bin.test.mgs()
    
    方法二:(推荐)
    from bin import test
    from bin import foo
    test.loggin()
    foo.logger()
    
    
    3、显示结果:
    python
    不同目录下的登录模块测试
    同级模块导入测试
     

    导入优化

     一、优化:

    1、在多个函数调用同一个模块中方法时,可以用  from 模块名   import  方法,这样可以减少扫描次数从而提高代码效率。

     1 import test
     2 def log():
     3     test.loggin()
     4     print('log调用test.loggin的方法')
     5 
     6 def user():
     7     test.loggin()
     8     print('user调用test.loggin的方法')
     9 
    10 log()
    11 user()
    12 
    13 
    14  可以变成:
    15 from test import loggin
    16 
    17 def log():
    18     loggin()
    19     print('log调用test.loggin的方法')
    20 
    21 def user():
    22     loggin()
    23     print('user调用test.loggin的方法')
    24 
    25 
    26 log()
    27 user()

    2、频繁调用同一个可以定义一个调用变量:

     1 import test
     2 loggin = test.loggin
     3 def log():
     4     loggin()
     5     # print('log调用test.loggin的方法')
     6 
     7 def user():
     8     loggin()
     9     # print('user调用test.loggin的方法')
    10 
    11 
    12 log()
    13 user()

     python程序的目录划分:

    ├── README
    ├── atm #ATM主程目录
    │   ├── __init__.py
    │   ├── bin #ATM 执行文件 目录
    │   │   ├── __init__.py
    │   │   ├── atm.py  #ATM 执行程序
    │   │   └── manage.py #ATM 管理端,未实现
    │   ├── conf #配置文件
    │   │   ├── __init__.py
    │   │   └── settings.py
    │   ├── core #主要程序逻辑都 在这个目录 里
    │   │   ├── __init__.py
    │   │   ├── accounts.py  #用于从文件里加载和存储账户数据
    │   │   ├── auth.py      #用户认证模块
    │   │   ├── db_handler.py   #数据库连接引擎
    │   │   ├── logger.py       #日志记录模块
    │   │   ├── main.py         #主逻辑交互程序
    │   │   └── transaction.py  #记账还钱取钱等所有的与账户金额相关的操作都 在这
    │   ├── db  #用户数据存储的地方
    │   │   ├── __init__.py
    │   │   ├── account_sample.py #生成一个初始的账户数据 ,把这个数据 存成一个 以这个账户id为文件名的文件,放在accounts目录 就行了,程序自己去会这里找
    │   │   └── accounts #存各个用户的账户数据 ,一个用户一个文件
    │   │       └── 1234.json #一个用户账户示例文件
    │   └── log #日志目录
    │       ├── __init__.py
    │       ├── access.log #用户访问和操作的相关日志
    │       └── transactions.log    #所有的交易日志
    └── shopping_mall #电子商城程序,需单独实现
        └── __init__.py
    
    
  • 相关阅读:
    Python:起步
    实战Django:Rango Part8
    实战Django:Rango Part7
    实战Django:Rango Part6
    实战Django:Rango Part5
    实战Django:Rango Part4
    Fitnesse集成TestLink
    oracle存储过程代码覆盖率统计工具
    ant svn
    Jenkins中关于一些插件的使用方法
  • 原文地址:https://www.cnblogs.com/abobo/p/8065746.html
Copyright © 2011-2022 走看看