模块、自定义模块

一、模块

  1. 定义:一个模块就是一个py文件。这个模块存储很多相似的功能,相似的函数的集合体.
  2. 模块的分类:
    • 内置模块
    • 第三方模块
    • 自定义模块
  3. import
    • import 导入的意思
  4. 第一次导入模块执行的三件事
    • 将tbjx.py文件加载到内存.
    • 在内存中创建一个以tbjx命名的名称空间.
    • 通过tbjx名称空间的名字.等方式引用此模块的名字(变量,函数名,类名等等)
  5. 被导入模块有独立的名称空间
    坑:通过tbjx.的方式引用此模块的名字时,一定一定是从此模块中寻找.
    
    通过import 引用模块 他有自己的独立名称空间,与当前执行文件没有关系.
    
    name = '李业'
    print(tbjx.name)
    
    def read1():
        print('in 02 模块import')
    
    tbjx.read1()
  6. 为模块起别名

    • 好处可以将很长的模块名改成很短,方便使用.

      import tbjx as t
      t.read1()
    • 有利于代码的扩展和优化。
      #mysql.py
      def sqlparse():
          print('from mysql sqlparse')
      #oracle.py
      def sqlparse():
          print('from oracle sqlparse')
      #test.py
      db_type=input('>>: ')
      if db_type == 'mysql':
          import mysql as db
      elif db_type == 'oracle':
          import oracle as db
      db.sqlparse()
  7. 导入多个模块

    在一个文件中,导入多个模块,推荐写法是一个一个导入。

    import os,sys,json   # 这样写可以但是不推荐
    
    推荐写法
    
    import os
    import sys
    import json

二、from ... import ...

  1. from ... import ... 使用

    from ... import ... 的使用示例。
    
    from tbjx import name, read1
    print(name)
    read1()
    '''
    执行结果:
    from the tbjx.py
    太白金星
    tbjx模块: 太白金星
    ?
    '''
  2. from...import... 与import对比

    唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:tbjx.

    from...import...的方式有好处也有坏处

    ? 好处:使用起来方便了

    ? 坏处:容易与当前执行文件中的名字冲突

    示例演示:

    执行文件有与模块同名的变量或者函数名,会有覆盖效果。

    name = 'oldboy'
    from tbjx import name, read1, read2
    print(name)
    '''
    执行结果:
    太白金星
    '''
    ----------------------------------------
    from tbjx import name, read1, read2
    name = 'oldboy'
    print(name)
    ?
    '''
    执行结果:
    oldboy
    ?
    '''
    ----------------------------------------
    def read1():
        print(666)
    from tbjx import name, read1, read2
    read1()
    ?
    '''
    执行结果:
    tbjx模块: 太白金星
    '''
    ----------------------------------------
    ?
    from tbjx import name, read1, read2
    def read1():
        print(666)
    read1()
    ?
    '''
    执行结果:
    tbjx模块: 666
    '''

    当前位置直接使用read1和read2就好了,执行时,仍然以tbjx.py文件全局名称空间

    #测试一:导入的函数read1,执行时仍然回到tbjx.py中寻找全局变量 'alex'
    #test.py
    from tbjx import read1
    name = 'alex'
    read1()
    '''
    执行结果:
    from the spam.py
    spam->read1->name = '太白金星'
    '''
    ?
    #测试二:导入的函数read2,执行时需要调用read1(),仍然回到tbjx.py中找read1()
    #test.py
    from tbjx import read2
    def read1():
        print('==========')
    read2()
    ?
    '''
    执行结果:
    from the tbjx.py
    tbjx->read2 calling read
    tbjx->read1->tbjx 'barry'
    '''
        4.3.3 也支持as
    
    通过这种方式引用模块也可以对模块进行改名。
    
    from tbjx import read1 as read
    read()
  3. 一行导入多个

    from tbjx import read1,read2,name
  4. from ... import *

    from spam import * 把tbjx中所有的不是以下划线(_)开头的名字都导入到当前位置

    ? 大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

    可以使用all来控制*(用来发布新版本),在tbjx.py中新增一行

    __all__=['money','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

三、py文件的两种功能

  1. 编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行(比如你之前写的模拟博客园登录那个作业等)
    二:模块,文件中存放着一堆功能,用来被导入使用
    ?
    python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:name 等于‘main
    当文件被当做模块导入时:__name__等于模块名
    ?
    #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)

    if __name__ == '__main__':![img]
    print('from the tbjx.py')
    
    __all__ = ['name', 'read1',]
    
    name = '太白金星'
    
    def read1():
       print('tbjx模块:',name)
    
    def read2():
       print('tbjx模块')
       read1()
    
    def change():
    
       global name
       name = 'barry'
    
    if __name__ == '__main__':
       # 在模块文件中测试read1()函数
       # 此模块被导入时 __name__ == tbjx 所以不执行
       read1()

四、模块的搜索路径

  1. 寻找模块的路径: 内存 ----> 内置模块 ---> sys.path中找

    只要这三个地方:内存 内置模块 sys.path可以找到这个引用的模块的路径,这个模块就可以直接引用到

  2. 手动添加路径,来引用其他模块

    ? sys.path.append(r‘D:\s23\day15‘)

原文地址:https://www.cnblogs.com/cuixiaoying/p/11104814.html

时间: 2024-10-07 23:59:10

模块、自定义模块的相关文章

python学习之模块-自定义模块(一)

第五章 5.1 自定义模块 模块概念: ? 把一些常用的函数放在一个py文件中,这个文件就称之为模块. 模块的意义: ? 1.方便管理.让程序的解构更加清晰,实现功能的重复使用: ? 2.提升开发效率.俗话说的拿来主义,避免重复造轮子,使用别人写好的实现了某些功能的模块,可以大大提高开发效率. 模块的分类: ? 第一类:内置模块,也叫做标准库.python自带,200多个,每个模块又包含很多的功能,比如os,sys,time: ? 第二类:第三方模块,第三方库.需通过pip install指令安

python基础知识8——模块1——自定义模块和第三方开源模块

模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 如:os 是系统相关的模块:file是文件操作相关的模块 模块分为三种: 自定义模块 内置模块 第三方开源模块 自定义模块 1.定义模块 2.导入模块 Python之所以应用越来越广泛,在一定程度上也

Python中引用自定义模块

学习了一小段时间的Python,始终停滞在简单的语法上,不能真正体会到Python的强大之处.今天学习了自定义模块的引用方法.当引用模块时,编译器会先在当前目录,接着去sys.path.Python的安装目录去寻找你引用的模块,如果没有的话,就会报错. 第一种情况,你的模块和你要使用的模块在同一目录下.Hello.py是一个模块,里面有一个打印Hello, World的方法Hello().test.py是一个测试程序,它将引用Hello.py中的hello()方法.因为它和模块在同一目录,所以可

nginx自定义模块编写-根据post参数路由到不同服务器

nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,nginx默认的配置规则就捉襟见肘了,但是没关系,nginx提供了强大的自定义模块功能,我们只要进行需要的扩展就行了. 我们来理一下思路,我们的需求是: nginx根据http包体的参数,来选择合适的路由 在这之前,我们先来考虑另一个问题: 在nginx默认配置的支持下,能否实现服务器间的跳转呢?即类似于状态机,从一个服务器执行OK后,跳转到另一台服务器,按照规则依次传递

NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)

NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹,并在Models文件里面添加NancyRouteAttribute类 //路由的方法 public string Method { get; set; } //路由的路径 public string Path { get; set; } public NancyRouteAttribute(str

dedecms的自定义模块

1.在dedecms主目录下创建一个模块目录 2.在模块目录下创建如下目录 网站根目录/ |-自定义模块 |-control 控制器 |-model 模型 |-static 静态文件 |-images |-js |-css |-templates 模块目录 |-default 3.在模块目录下创建index.php入口文件 4.在入口文件中加入如下代码: //引入重要的文件 require_once(dirname(__file__)).'/../include/common.inc.php';

angular(3)服务 --注入---自定义模块--单页面应用

ng内部,一旦发生值改变操作,如$scope.m=x,就会自动轮询$digest队列,触发指定的$watch,调用其回调函数,然后修改dom树. 干货:https://github.com/xufei/blog/issues/10 1.ng提供了许多内置的服务,例如常用的$scope\$http\$window\$location等. http:POST请求: var app = angular.module('myApp', ['ng']); app.run(function($http){

python自定义模块

Python可以添加自定义模块 方法一:echo 'export PYTHONPATH='/root/pythondiy/' >> /root/.bashrc # 此目录为你模块的路径 # 然后使用sys模块查看环境变量 import sys sys.path          # 返回一个列表 ['',  '/usr/local/bin',  /root/pythondiy',  '/usr/local/lib/python27.zip',  '/usr/local/lib/python2.

Zepto自定义模块打包构建

文章转自 http://www.chengxuyuans.com/web_technology/zeptojs-build.html zepto.js 是个好东西,遵循 jQuery API,但比 jQuery 小巧很多,很多移动web开发者都用它 不过,官网下载的默认构建包仅包含 zepto event ajax form ie 这5个模块(版本为1.1.6) 连触摸事件 touch 模块都没,还有能让 ajax 提供 promise 接口的 callbacks 和 deferred 模块也没