一、函数回调

# 提前写出函数的调用,再去考虑函数体的实现
# 怎么样提前写出函数的调用:在另一个函数中写出函数的调用
# 再去考虑函数体的实现:根据实际的需求
# 自定义一个sleep
def my_sleep(sec):
    import time
    current_time = time.time()
    while time.time() - current_time < sec:
        pass

def download(fn=None):
    print("开始下载")
    my_sleep(2)
    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++扩展

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

定义模块:创建一个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 模块名 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压根没产生

python基础——11(模块初识)的更多相关文章

  1. 1.7 Python基础知识 - 模块初识

    在Python中有很多模块,模块对应的就是python源代码文件.模块中有Python程序自己附带的标准模块,还有很多其他人共享的第三方模块.模块中可以定义变量.函数和类.而多个功能类似的模块可以组织 ...

  2. python基础之模块初识

    Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持 一.time模块和datetime模块 和时间有关系的我们就要用到时间模块.在使用模 ...

  3. Day11 - Python基础11 模块学习——optparse

    Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...

  4. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

  5. python基础——使用模块

    python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  6. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  7. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  8. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

  9. python 基础之 模块

    Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...

  10. python基础(11)-常用模块

    re(正则)模块 常用方法 findall() 以列表返回所有满足条件的结果 import re print(re.findall('\d','a1b2c2abc123'))#['1', '2', ' ...

随机推荐

  1. 洛谷 P2662 牛场围栏

    做法是这样的: 首先暴力把所有可能的边长搞出来..(当然<=0的不要) 排序边长+去重, 当且仅当可行边长里面有1时,任何长度都能取到,输出-1 当且仅当所有可行边长的gcd大于1时,不能取到的 ...

  2. IIS7开启目录浏览功能

    IIS7开启目录浏览功能: 在右侧操作中点击启用,并在左侧面板中勾选显示字段.

  3. struts2的@Result annotation 如何添加params,并且在页面取值

    http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai  ...

  4. keil_rtx调试技巧

    超级循环结构的程序调试一般依赖于断点,单步,查看变量和内存变量(keil中的Memory Window 或者 Watch window):而带微操作系统的程序由于加了这个中间层调试方法可能传统的有些区 ...

  5. python flask学习(3)

    这次主要学习web表单.学了下,很像是Django的form表单验证.不过有许多的不同.可以说是功能更加碎块化.Django的验证方式是很固定和严谨的,风格完全不同. 尽管Flask的请求对象提供的对 ...

  6. css3のborder-radius

    css3のborder-radius 今天主要练习了一下border-radius这个属性,这个是最常用的属性,所以先从它开始学习和总结吧. 我觉得需要注意以下几点: 1.书写规范: -webkit- ...

  7. 2019/05/11 JAVA虚拟机原理

    所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmare就属于系统虚拟机,他们完全是对物理计 ...

  8. Spark-水库抽样-根据抽样率确定每个分区的样本大小

    /* * 输入:采样率,待采样的RDD * 输出:每个分区的样本大小(记录数) * 由采样率确定,每个分区的样本大小 */ def findNumPerPartition[T: ClassTag, U ...

  9. python GIL锁问题

    一.GIL是什么 官方解释: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple na ...

  10. CSAPP lab1 datalab-handout

    这是一个关于机器级的整数.浮点数表示和位运算的实验.要求用给定的操作符.尽可能少的操作数去实现对应的函数功能. 完整的实验包:链接: https://pan.baidu.com/s/1xUBi3XDl ...