zoukankan      html  css  js  c++  java
  • python0.13-----模块/包概述

    模块:
    一个文件内随着代码量越来越多,代码就越来越难以维护,这个文件基本就废了。为了解决文件难以维护的问题,可以把很多相似功能的函数分组,分别放到不同的文件中去,这样每个文件所包含的内容相对较少,而且对每一个文件的大致功能可以用文件名来体现。很多编程语言都是这么来组织代码结构的。一个.py文件就是一个模块。

    这种多模块形式的优点:
    1.提高代码的可维护型。因为每个模块对应一个功能,如果测试出哪个功能出错,直接可以找到相对应的模块。
    2.提高了代码的复用度。因为一个模块里面的功能单一,是会被很多地方需要的,可以被多个地方引用。如果模块过大,内容太杂,那么被其他程序需要的可能性大大降低。
    3.避免函数名和变量名的冲突。随着文件的增多,每个模块的内容减少,函数和变量同名的几率变小,不容易冲突。

    4.它们同时可以引用其他的模块(内置模块,三方模块,自定义模块):

      内置模块:系统已经包含的。例如:os ,math,random,time。
      三方模块:别人已经写好的模块。
      自定义模块:自己写的模块。

    使用标准库中的模块:
    import sys #系统模块
    常用的sys属性:

    sys.argv属性:

    在python执行到一个脚本时,例如:python test.py
    若在CMD窗口输入:python test.py a b c
    则sys.argv[0]='test.py'
    sys.argv[1]='a'
    sys.argv[2]='b'
    sys.argv[3]='c'
    这些argv变量可以在test.py文件里面访问。

    sys.path属性:自动查找所需模块路径的列表。
    本人电脑从上到下搜所的路径顺序为:
    'C:\Users\yuliang\Desktop\Project',
    'E:\python3\python36.zip',
    'E:\python3\DLLs',
    'E:\python3\lib',
    'E:\python3',
    'E:\python3\lib\site-packages',
    'E:\python3\lib\site-packages\win32',
    'E:\python3\lib\site-packages\win32\lib',
    'E:\python3\lib\site-packages\Pythonwin']

    引入模块的三种方式:
    例如:已经定义好了一个.py文件test.py,这个自定义模块的名称为test。
    def sayname(name):
      print('your name is %s' %name)
    def sayage(age)
      print('you age is %d' %age)
    def sayfavor(favor):
      print('you favor is %s' %favor)


    第一种:
    #若有其它.py模块需要这个test模块,则可以将test.py文件复制到.py文件所在的文件夹中。
    在其它模块引入字定义模块test:
    格式: import module1[,module2[,module3[......,modulen]]]
    例子:import time,random,os
    import test.py #一个模块只会被引入一次,不管执行多少次import。防止模块重复引入。

    使用模块中的内容:
    格式:模块名.函数/变量名
    例如:test.sayname('bob')

    第二种:
    from ....import语句
    #从模块中导入一个指定的部分到命名空间
    格式 :from module1 import name1[,name2[,……namen]]
    例如:
    from test import sayname,sayage
    sayname('bob') #这种引入方式不用写模块名
    sayage(18) #相当于把这两个函数定义到本.py文件中。
    sayfavor('basketball') #没有引入这个函数,会报错。
    注意:程序内容中的函数可以将模块中的同名函数覆盖。

    第三种:
    from module import * (不推荐使用)=from module import module
    #作用:把一个模块中的所有内容全部都导入到当前的命名空间。
    sayname('bob')
    sayage(18)
    sayfavor('basketball') #都不会报错。
    注意:程序内容中的函数可以将模块中的同名函数覆盖。

    __name__属性:
    #模块就是一个.py文件,一个模块被另一个程序引入。若不想让模块中的某些代码执行,可以用__name__属性使程序仅调用模块中的一部分。当__name__='__main__'时,表示模块自身在执行,当前文件为程序的入口文件。如果文件当模块使用,那么__name__='模块名'

    包:
    如果不同的人编写的模块同名,为了解决模块同名的冲突,引入了按目录来组织模块的方法,称为包。如果目录相同,为该目录再套一个不同名字的目录。
    特点:引入了包以后,只要顶层的包不与其他包发生冲突,那么模块都不会相互发生冲突。


    例如:使用自定义的包:
    有一个文件叫test.py
    内容为:def say():
          print('lalala')
    将这个test.py外面包上a文件夹,在a文件夹下新建__init__.py文件(文件不需要加上什么内容,加这个__init__.py文件是为了让python识别这是一个包,防止一些滥竽充数的文件被误认为包),那么a文件就是一个包。

    有另外一个文件也叫test.py
    内容为:def say():
          print('pipipi')
    将这个test.py外面包上b文件夹,在b文件夹下新建__init__.py文件(文件不需要加上什么内容,加这个__init__.py文件是为了让python识别这是一个包,防止一些滥竽充数的文件被误认为包),那么b文件就是一个包。
    注意:若a文件夹和b文件夹同名,则a,b文件夹分别套上一个不同名的文件夹即可,当然也要加上__init__.py

    引入包:
    import a.test
    import b.test
    a.test.say()
    b.test.say()

    下载第三方的包:
    windows:勾选了pip和add python to path,自动配置了环境变量。
    mac,windows自带python,无需安装。
    #要安装三方模块,需要知道模块的名字。
    例如:pip install Pillow #表示安装模块Pillow(强大的图像处理工具库)
    #windows如果报错,则输入pip insatll --upgrade pip
    补充:linux,mac同时存在2.x和3.x版本,输入python,pip默认为2.x版本,若想使用3.x版本,则应该用指令python2和pip3

  • 相关阅读:
    产品经理应该知道的那点事儿(1)
    C语言的前世今生
    “隔代教育的成功之道”新浪教育专家宋少卫做客西单图书大厦
    【9.21更新】跟踪报道TopLanguage关于《深入理解计算机系统(第2版)》一书翻译问题 的讨论
    中国要做物联网技术的强国,而非大国
    关于时钟芯片DS1302的问题
    stm32开发问题集锦
    keil 中使用c++的注意事项
    iar atof 问题
    IAR生成HEX文件
  • 原文地址:https://www.cnblogs.com/yulianggo/p/9212401.html
Copyright © 2011-2022 走看看