zoukankan      html  css  js  c++  java
  • (一)模块基础

    上节课复习:

      三元表达式:

    结果1 if 条件 else 结果2
    
    列表推导式
    [列表元素 for v in iterable]
    
    字典推导式
    {字典元素 for k, v in iterable}
    

      递归函数:

    递归:函数的自调用
    直接自调用:自己调自己
    间接自调用:自己调别人,别人再调回自己
    

      

    回溯(回溯条件) => 递推(递推开始,回溯的结束点)
    def get_age(num):
        if num == 1:
            return 18
        age = get_age(num - 1) - 2
    
    age = get_age(5)

      匿名函数

      

    lambda 形参们: 返回值
    1. 用变量接收
    2. 结合内置函数使用
    

      内置函数

      

    max
    '''
    
    
    def func():
        return [lambda x: x * i for i in range(4)]  # [6, 6, 6, 6]
        # return [lambda x, i=i: x * i for i in range(4)]  # [0, 2, 4, 6]
    
    # def m(2):
    #     return 2 * 0|1|2|3
    
    print([m(2) for m in func()])
    # 1.func()执行结果为list,所以被迭代
    # 2.for i in range(4)能产生4次结果,所以func()的返回值list有四个元素
    # 3.最终打印的列表推导式也有四个元素
    # 4.func()返回值list中存放的是四个函数地址,匿名函数体没有被执行
    # 5.m(2)时,匿名函数体才被调用,但四个匿名函数都已形成,再去获得i的值,i存放的是最后一次值3
    

      

    # 理解案例
    y = 10
    def aaa(arg=y):
        print(y)
        print(arg)
    y = 20
    y = 30
    y = 40
    aaa()

      函数回调:

      

    # 提前写出函数的调用,再去考虑函数体的实现

    # 怎么样提前写出函数的调用:在另一个函数中写出函数的调用
    # 再去考虑函数体的实现:根据实际的需求
      
    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)
      今日内容:
      
    一.了解什么是模块
    二.为什么要使用模块
    三.import导入模块:名称空间
    四.起别名:原名与别名
    五.from导入方式
    六.*的知识点
    七.查询顺序
    八.自启文件与模块的区别
    一、
      1.1模块定义:
    # 模块:一系列功能的集合体
    # 使用模块:在要使用该模块功能的文件中导入模块,通过import关键字导入模块名

    1.2
    模块的四种存在方式:
    1.使用python编写的.py文件(任何一个py文件都可以作为模块)
    2.包:一堆py文件的集合体
    3.使用C编写并链接到python解释器的内置模块
    4.已被编译为共享库或DLL的C或C++扩展
     
     注:
    # 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压根没产生
    

      

     
     


     

      

      

  • 相关阅读:
    svn ------ 更改提交地址,显示relocate
    .NET ------ 前端连接到新的界面与后台链接到新的界面
    .NET ------ 修改时间改变排序
    .NET ------ 通过flag 实现一表多用
    Java面向对象——抽象类与抽象方法
    Java——final关键字
    Java——类的成员之4:代码块(初始化块)
    Java——main方法的使用
    单例(Singleton)设计模式
    Java面向对象——static关键字
  • 原文地址:https://www.cnblogs.com/mofujin/p/10674167.html
Copyright © 2011-2022 走看看