模块的用法

模块大总结

'''
模块的概念:一系列功能的集合体
为何要使用模块:使用模块后的优势:1文件角度考虑代码,2拿来主义,提供开发效率
py中实现模块的方式:4种,重点:py文件


定义模块:新建一个py文件:文件名就是模块名,尽可能采用全英文,能够结合数字与下划线
使用模块:能够不用起别名,但一旦起别名,原名字就不能再使用了
    -- import 模块名 as 别名
    -- from 模块名 import 名字 as 别名
    
自执行文件与模块区分:__name__
'''

函数回调

# 怎么样提早写出函数的调用:在另外一个函数中写出函数的调用
# 再去考虑函数体的实现:根据实际的需求

   示例:

def my_sleep(sec):
    import time
    current_time = time.time()
    while time.time() - current_time < sec:
        pass


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  # 没有外界具体操做下载结果的功能代码,就将下载结果直接返回

# res = download()
# print(res)

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)

模块

'''
模块:一系列功能的集合体

定义模块:建立一个py文件就是一个模块,该py文件名就是模块名

使用模块:在要使用模块的文件中,经过  import 模块名  来导入模块
'''

'''
import module
# 1.编译执行模块所对应的py文件,造成对应的pyc文件
# 2.产生该模块本身的全局名称空间
# 3.在使用该模块的全局名称空间中产生一个名字(导入的模块名)
'''

'''
# 注:
# 1.每个文件都会产生本身的全局名称空间,且相互不影响
# 2.屡次导入,只会编译执行模块一次,将其加载到内存,以后的都是直接对名字的引用
'''

'''
优势:
1.从文件级别组织代码,是同特性的功能能统一管理
2.可使用系统或第三方模块(拿来主义),来提升开发效率
'''

起别名

# 经过as关键字能够给模块起别名: 模块名一旦起别名,原模块名就不能再使用
# 1.能够简化模块名字
import mmmmmmmmmmmmmmmmmm3 as my_m3
print(my_m3.num)
# 2.能够统一功能
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导入

from 模块名 import 名字1, 名字2, ..., 名字n
# 能够指名道姓导入模板中全部想导入的名字


from  模块名 import *
# 导入的是模块中的__all__这个列表
# 1、系统默认该列表不会收录_开头的名字
# 2、能够自定义__all__列表来规定外界经过*能够导入的名字


# 不建议直接导入 *,由于可读性差,且极容易出现变量重名
# 模块中有 名字a
from  模块名 import *
# 可使用模块中的a
a = 20
# 模块中的a就被覆盖了,且在代码上还不能直接看出


# 其别名
from 模板名 import 名字1 as 别名1, ..., 名字n as 别名n

自执行与模块区别

# __name__:
# 1.在py文件做为模块被使用时,__name__为模块名
# 2.在py文件自执行时,__name__为字符串 '__main__'

print("共有逻辑")
if __name__ == '__main__':
    # 全部自执行的逻辑
    print("m6: 我是自执行的")
    a = 10  # 产生的是全局的名字
else:
    # 全部模块的逻辑
    print("m6: 我被导入执行的")
    print(a)  # 会报错:走else就不可能走if,因此a压根没产生
相关文章
相关标签/搜索