zoukankan      html  css  js  c++  java
  • 模块介绍

    一、函数的补充

    1、函数回调:

          提前在另一个函数中写出函数的调用,再根据实际的需求去考虑函数体的实现

    def download(fn=None):
    print('开始下载')
    my_sleep(1)
    data = '下载得到的信息'
    print('下载完成')
    if fn: # 如果外界提供了回调函数的实现体,再去调用,否则就只完成默认下载的功能
    res = fn(data) # 下载成功的回调函数,具体完成什么事之后决定
    if res:
    print('操作成功')
    return True
    print('操作失败')
    return False
    return data # 没有外界具体操作下载结果的功能代码,就将下载结果直接返回


    def download_action(data):
    print('往文件中写')
    with open('1.txt', 'w', encoding='utf-8') as f:
    f.write(data)
    return True
    return False

    res = download(download_action)
    print(res)


    def download_action1(data):
    print(data)
    return True
    res = download(download_action1)
    print(res)

    二、模块:一系列功能的集合体
    模块的四种存在方式:
    1.使用python编写的.py文件(任何一个py文件都可以作为模块)
    2.包:一堆py文件的集合体
    3.使用C编写并链接到python解释器的内置模块
    4.已被编译为共享库或DLL的C或C++扩展

    1、使用模块:在要使用该模块功能的文件中导入模块,通过import关键字导入模块名

    2、优点:从文件级别组织代码,是 同特性的功能能统一管理

    可以使用系统或第三方模块(拿来主义),来提高开发效率

    3、import导入模块:会编译执行成一个pyc文件,该pyc文件就是该模块的执行文件

    再次导入该模块不会再执行,只会编译执行一次,将其加载到内存,之后的都是直接对名字的引用

    该模块会产生自己的全局名称空间,且跟其他文件产生的全局名称空间互不影响

    在任何地方都可以导入模块

    4、from导入:from 模块名 import 需要导入的名字

    可以指名道姓导入模块中所有想导入的名字

    5、from 模块名 import *:导入的是模块中__all__这个列表

    系统默认该列表不会收录_(下划线)开头的名字

    可以自定义__all__列表来规定外界通过*可以导入的名字

    不建议直接导入*,因为可读性差,且极易出现变量重名

    6、起别名:通过as关键字可以给模块起别名

    import 模块名 as 别名:

    可以简化模块名字
    import mmmmmmmmmmmmmmmmmm3 as my_m3
    print(my_m3.num)

    可以统一功能:
    cmd = input('数据库选择 1:mysql | 2:oracle:')
    if cmd == '1':
    import mysql as db
    # mysql.excuse()
    else:
    import oracle as db
    # oracle.excuse()
    db.excuse()
             from 函数名 import 名字 as 别名

    模块名一旦起别名,原模块名就不能再使用

    三、 自执行与模块区别

     __name__:

                    1.在py文件作为模块被使用时,__name__为模块名

                    2.在py文件自执行时,__name__为字符串 '__main__'

    print("共有逻辑")
    if __name__ == '__main__':
               # 所有自执行的逻辑
               print("m6: 我是自执行的")
               a = 10 # 产生的是全局的名字
    else:
               # 所有模块的逻辑
                print("m6: 我被导入执行的")
                print(a) # 会报错:走else就不可能走if,所以a压根没产生

           





  • 相关阅读:
    【分享】使用Vivado,vck190 BIST 测试,遇到错误“IDCODE/SW CHECK: FAILED”,可以忽略。
    公司预算制定/财务信息化/管理层执行
    税款输入不正确 j2
    发票凭证仍然包含信息
    会计暂估
    委托加工\受托加工凭证处理\会计处理
    记录unknown filesystem type ntfs
    c#多进程通讯,今天,它来了
    多线程通信,IPC,进程通信
    go语言跨平台编译
  • 原文地址:https://www.cnblogs.com/yanminggang/p/10672840.html
Copyright © 2011-2022 走看看