zoukankan      html  css  js  c++  java
  • 1.4.2 模块导入与使用

      Python默认安装仅包含部分基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地加载(有些有些模块可能需要先安装)其他模块,这样可以减小程序运行的压力,且具有很强的可扩展性,这样的设计与系统安全配置时遵循的“最小权限”原则的思想是一致的,有助于提高系统安全性。可以使用sys.modules.items()显示所有预加载模块的相关信息。

      内置对象可以直接使用,而标准库和扩展库需要导入之后才能使用其中的对象,当然,扩展库还需要先正确安装才能导入,Python中导入模块的方法主要有两个。

      (1)import 模块名 [ as 别名 ]

        使用这种方式导入以后,使用时需要在对象前加上模块名作为前缀,也就是“模块名.对象名”的方式进行访问。也可以为导入的模块设置一个别名,然后就可以使用“别名.对象名”的方式来使用其中的对象。

     1 >>> import math            #导入math模块
     2 >>> 
     3 >>> math.sin(0.5)          #求0.5弧度的正弦值
     4 0.479425538604203
     5 >>> 
     6 >>> import random as r     #导入random模块,并为该模块起别名 r
     7 >>> 
     8 >>> x = r.random()         #获得[0,1)内的随机小数
     9 >>> x               
    10 0.8347753859935274         #获得[1,100]区间上的随机整数
    11 >>> 
    12 >>> n = r.randint(1,100)   
    13 >>> n
    14 86

        

        (2)from 模块名 import 对象名 [ as 别名 ]

          使用这种方式仅导入明确指定的对象,并且可以为导入的对象起一个别名。这种导入方式可以减小查询次数,提高访问速度,同时也减少了程序员需要输入的代码量,而不需要使用模块名作为前缀。

     1 >>> from math import sin       #只导入模块中的指定对象
     2 >>> sin(3)
     3 0.1411200080598672
     4 >>> 
     5 >>> from math import sin as s  #给导入的对象起个别名
     6 >>> 
     7 >>> s(3)
     8 0.1411200080598672
     9 >>> 
    10 >>> 
    11 >>> #比较极端的情况是一次导入模块中的所有对象,例如:
    12 >>> from math import *
    13 >>> sin(3)
    14 0.1411200080598672
    15 >>> 
    16 >>> gcd(36,18)                #求最大公约数
    17 18
    18 >>> 

          一次导入模块中所有对象的方式简单粗暴了点,虽然写起来比较省事,可以直接使用模块中的说有函数和对象而不需要再使用模块名作为前缀,但一般并不推荐使用。如果多个模块中他有同名的对象,这种将会导致只有最后一个导入的模块中的同名对象是有效的,而之前导入的模块中该对象无法访问。后边的同名对象会覆盖前边的同名对象。

      拓展知识:

        重新导入模块。在自己编写模块是,可能需要反复修改代码然后重新导入模块进行测试,此时可以使用imp模块或importlib模块的reload()函数,重新加载模块时要求该模块已经被正确加载。也就是说,第一次导入和加载模块时不能使用reload()方法。

      小技巧:使用from...import...的方式明确导入指定的对象而不导入整个模块,可以适当提高程序加载和运行速度。

      拓展知识:导入模块时文件搜索的顺序。在导入模块时,Python首先在当前目录中查找需要导入的模块文件,如果没有找到则从sys模块的path变量所指定的目录中查找,如果仍没有找到文件模块则抛出异常提示模块不存在。可以查看sys模块中path变量的值来获知Python导入模块时,会优先导入相应的.pyc文件,如果相应的.pyc文件与.py文件时间不相符或不存在对应的.pyc文件,则导入.py文件。

      建议:

        (1)每个import语句只导入一个标准库或扩展库;

        (2)按照标准库、扩展库、自定义库的先后顺序进行导入。

  • 相关阅读:
    abs() 与fabs() 的区别辨析
    TCP服务端如何判断客户端断开连接学习
    数据结构与算法李春葆 第二章思维导图
    数据结构与算法思维导图第一章
    关于临时表的操作
    关于 ANSI_NULLS和QUOTED_IDENTIFIER
    临时表和视图的区别
    关于CancellationToken的解释
    在项目中添加signalr.js
    数据库存储过程的写法
  • 原文地址:https://www.cnblogs.com/avention/p/8515749.html
Copyright © 2011-2022 走看看