zoukankan      html  css  js  c++  java
  • python基础 函数基础 模块:总复习

    python基础 函数基础 模块

    总复习:
        1.计算机核心组件:
             - CPU
             - 内存
             - 硬盘
             - 输入设备: 键盘、鼠标
             - 输出设备: 显示器、音响..
    
        2.python解释器:
            - 将人类编写好的代码转成机器能看得懂的字符。
            - 解释器的作用:
                帮你执行python代码。
    
        3.pycharm编辑器:
            - 编辑器的作用:
                可以更好的编写python代码,编辑器内部有很多强大的功能。
                能够快速编写代码。
    
    
        4.编程语言分类:
            - 机器语言(机器能直接看懂):
                比如: 01010101
    
            - 汇编语言(让人能看懂一点点):
                比如: a ---> 01101001
    
            - 高级语言(让人类能直接看懂):
                比如: print('hello')
                高级语言是更接近于人类的语言。
    
                - 解释型:
                    一遍解释(翻译)一遍执行, 类似于同声传译。
    
                    优点:
                        开发效率高
                        可跨平台,一份代码可以多个平台使用。
    
                    缺点:
                        执行效率相比于编译型低。
    
                - 编译型:
                    先一次性编译然后再执行,类似于 "有道翻译"。
    
                    优点:
                        执行效率高。
                        稳定义
    
                    缺点:
                        开发效率相比于解释型语言要低。
                        不可跨平台。
    
                - 解释型语言的种类:
                    python: 10级别
                    java: 8
                    php: 3
    
                - 编译型语言的种类:
                    C
    
    
        5.变量:
            变量指的是可变化的量。
            - 变量名: 可以与变量值绑定关系,通过变量名可以访问变量值。
                - 相当于身份证ID号
    
            - 赋值符号(=): 是用来将变量名与变量值绑定关系。
    
            - 变量值: 变量值 指的是 “数据”, 存放在内存中。
    
    
        6.垃圾回收机制: 注意: GC就是用来做垃圾回收机制的东西。
            - 变量名 = 变量值  # 添加一个引用计数
    
            当变量值的引用计数为0时,垃圾回收机制会“不定时”释放资源。
    
    
        7.查看变量三大特征
            - id
            - type
            - value
    
    
        8.变量名的命名规范
            - 驼峰命名法: 在写类名的时候使用
                首字母大写命名
                比如: JasonSb
    
            - 下划线命名法: 推荐使用
                比如: jason_sb
    
    
        9.python中八大数据类型
            - int:
                number = 100  # number = int(100)
                - 不可变类型
    
            - float
                salary = 1.0  # salary = float(1.0)
                - 不可变类型
    
            - str
                str1 = 'tank'  # str1 = str('tank')
                - 不可变类型
                # 按照索引取值
                str1[1]  # 取第二个值
                str1[1:10:2]  # 顾头不顾尾
    
                # 内置方法
                str1.split()  # 切分
                str1.strip()  # 去左右两边的空格
                str1.strip('i')  # 去左右两边的i
                # tank10
                str1.join(['tank', '10'])  # 字符串的拼接,必须是字符串类型
                # 判断字符串开头,若正则返回True,否则返回False
                str.startswith()
                # 判断字符串结尾,若正则返回True,否则返回False
                str.endswith()
                # 判断字符串是否是数字,若正则返回True,否则返回False
                str.isdigit()
                # 新旧替换
                str.replace('旧的', '新的')
                # 获取某个字符的数量
                str.count('字符')
    
                # 查找字符的位置  索引   可能是面试题
                str.find('字符')  # 找不到返回-1
                str.index('字符')  # 找不到报错
    
            - list
                在[]内,可以存放多个值,每个值以逗号隔开。
                list([v1, v2..])
                - 可变类型
    
                - 常用内置方法:
                    list.append()  # 追加
                    list.insert()  # 插入值到指定的索引中
                    list.pop()  # 取出某个值,默认取出最后一个
                    list.remove()  # 真正的删除元素
                    list.extend()  # 列表合并
                    list.sort(reverse=True)  # 默认升序 , reverse=True降序
                    list.copy()  # 浅拷贝
    
    
            - tuple
                tuple((v1, v2...))
                - 不可变类型
    
            - dict
                特点: key是唯一的。
                dict({key:value, ...})
                - 可变类型
                dict[key]  # 没有key会报错
                dict.get(key, '自定义默认值')  # 没有key会报错,默认返回None
                dict.items()  # 返回一个可迭代对象
                dict.keys()
                dict.values()
                dict.fromkeys('k1', [])  # 生成字典 ---》 {'k1': []}
    
    
            - set
                特点: 内置去重功能。
                set({v1, v2...})
                - 默认可变类型
    
                # 内置方法
                set.add()
                set.remove()
    
            - bool:
                True or False
                - 不可变类型
    
            什么是可变?
                值变了,id不变称之为可变类型。
    
            什么是不可变?
                值变了,id也变 称之为不可变类型。
    
        10.字符编码
            结论: 以什么编码,就以什么解码。
    
            utf-8:
                - 存中文是3个字节。
                - 存英文是1个字节
    
            gbk:
                - 存中文是2个字节。
                - 存英文是2个字节
    
    
        11.文件处理:
            f = open('文件名的路径', '打开的模式', encoding='字符编码')
            f.close()
    
            # 文件的上下文管理: with    ,   flask框架的上下文管理(后期学习)
            with open('文件名的路径', '打开的模式', encoding='字符编码') as f:
                # 内部帮你执行f.close()
    
            - 打开模式:
                - 文本模式:
                    - rt
                    - wt
                    - a
    
                - 二进制模式:
                    - rb
                    - wb
                    - ab
    
            - 光标移动:
                f.seek('光标移动的位置', 0)  # 开头
                f.seek('光标移动的位置', 1)  # 当前
                f.seek('光标移动的位置', 2)  # 末尾
    
    
            - 打开文件取值的优化方式:
                - f.read():
                    直接将文件中所有数据一次性取出。
                    缺点:
                        内存容易溢出。
    
                - for循环f句柄操作:
                    # 通过for循环,将每一行取出,保证不会内存溢出
                    for line in f:
                        print(line)
    
                - f.readline(): (了解)
                    读取一行,光标移动到第二行。
    
    
        12.函数基础
            函数是一些列功能的结合体,是一个可以重复使用的工具。
    
            - 函数定义:
                def 函数名(参数1, 参数2...):
                    '''注释: 说明函数的作用'''
    
                    # 逻辑代码
    
                    return 返回值
    
            - 函数调用
                函数()  # 若有参数则要传参
    
            - 定义有参、无参、空函数
                def func1(参数):
                    逻辑代码
                    pass
    
                def func2():
                    # 逻辑代码
                    pass
    
                def func3():
                    pass
    
            - 函数的参数:
                - 定义阶段:  (参数用来接收调用者传入的)
                    - 位置形参参数
                    - 默认参数
                    - 可变长参数
    
                - 调用阶段:  (根据函数的定义者传的)
                    - 位置实参参数
                    - 关键字参数
    
                - 注意:
                    # 参数从左到右的顺序
                    位置 ---》 关键字参数 ---》 可变长参数
    
            - 函数的返回值:
                - 返回值可以是一个或者多个
                return 值1  ---> 值1
    
                return 值1, 值2  ---> (值1, 值2)
    
    
    
    
        13.名称空间与作用域:
            - 名称空间:
                在内存中产生,是一个存放名字的地方。
    
                - 内置名称空空间: python解释器
    
                - 全局名称空空间: 文件中所有(顶着最左边写的)
                    注意: 无论嵌套if, while, for 多少层都是一个。
    
                - 局部名称空空间: 在函数内部定义的。
    
                - 查找顺序:
                    当前局部 ---》 外层局部 ---》 全局 ---》 内置
    
                - 加载顺序:
                    内置 ---》 全局 ---》 外层局部 ---》 当前局部
    
            - 作用域:
                - 全局作用域:
                    - 内置
                    - 全局
    
                - 局部作用域
                    - 外层局部
                    - 内层局部
    
            - global: 在局部可以声明全局名字。
                相当于将全局变量引用到局部中使用或修改。
    
            - nonlocal: 在内层局部声明外层局部的名字。
    
    
        14.函数对象、函数嵌套与闭包
            - 函数对象: 函数的名字 ---》 函数的内存地址
            - 函数嵌套:
                def outer():
                    def inner():
                        pass
    
            - 闭包:
                为了装饰器作准备,它不是一个独立的技术。
                闭包是函数嵌套、函数对象、名称空间与作用域的结合体。
    
                - 内层函数封闭:
                    外部不能调用内部的函数。
    
                - 外层函数开放:
                    外部能调用外层函数
    
                - 闭包:
                    - 内层函数想要引用外层函数的名字
                    - 外部想要调用内部的函数,要在外层函数将内层函数的名字返回。
    
                def outer(x):  # 10
                    # x = 10
                    def inner():
                        print(x)  # 10
                    return inner
    
                inner = outer(10)
                inner()  # 实现了外部调用内层函数
    
    
        15.装饰器:
            装饰的工具。
            作用:
                - 1:在不修改被装饰对象的源代码
                - 2:在不修改被装饰对象的调用方式
                - 基于1和2,为被装饰对象添加新功能。
    
            # 无参装饰器:
            def wrapper(func):
                def inner(*args, **kwargs):
                    # 调用被装饰对象前添加新功能
                    res = func(*args, **kwargs)  # index()
                    # 调用被装饰对象后添加新功能
                    return res
                return inner
    
            # 被装饰对象:
            def index(参数1):
                print('from index..')
    
            index = wrapper(index)
            index(实参1)  # inner(实参1)
    
    
            # 有参装饰器:  ---> 本质上就是无参装饰器
            def login_auth(name):
                # 无参装饰
                def wrapper(func):
                    def inner(*args, **kwargs):
                        # 对name做一个权限认证
                        if name == 'tank':
                            # 调用被装饰对象前添加新功能
                            res = func(*args, **kwargs)  # index()
                            # 调用被装饰对象后添加新功能
                            return res
                        else:
                            print('你不是tank,get out!')
                    return inner
                return wrapper
    
            @  login_auth('tank')  # wrapper
            @wrapper
            def index():
                pass
    
    
            - 叠加装饰器:
                - 装饰顺序:
                    从下往上
    
                - 执行顺序:
                    从上往下
    
        16.迭代器:
            迭代的工具。
            - 可迭代对象:
                凡是内置有__iter__(),都是可迭代对象。
    
            - 迭代器对象:
                凡是内置有__iter__()与__next__(),都是迭代器对象。
    
            优点:
                - 可以不依赖索引取值
                - 节省内存
    
            缺点:
                - 取值麻烦
                - 无法获取长度
    
            - for line in 可迭代对象:  ----》 in: 将“可迭代对象”转成“迭代器对象”
                - 内置有捕获异常机制:
                   while True:
                        try:
                            迭代器.__next__()
                        except StopIteration:
                            break
    
    
    
        17.生成器:
            生成器是一个自定义的迭代器, 生成器本质上就是一个迭代器。
    
            - 如何生成:
                - yield
                def func():
                    yield 1
                    yield 2
                    yield 3
    
                g = func()
                g.__next__()
                next(g)
                # ---> 生成了生成器对象,然后每执行一次__next__,
                # 会取出一个值,到下一个yield会暂停。
    
        18.三元表达式:
            res = 条件成立的值 if 条件 else 条件不成立的值
    
    
        19.列表生成式:
            [line for line in 可迭代对象]  # ---》 list ---》[line1, line2...]
            [[1, 2, 3, line] for line in 可迭代对象]  # [line1, line2...]
            优点:
                - 可以依赖索引取值,取值方便
                - 可以获取长度
    
            缺点:
                - 占用内存空间
    
        20.生成器表达式(生成式):
            (line for line in 可迭代对象)  # ---> 生成器
            优点:
                - 不占用内存空间
    
            缺点:
                - 不可以依赖索引取值,取值不方便
                - 不可以获取长度
    
    
        21.匿名函数与内置函数
            - lambda 参数: 返回值
    
            注意: 匿名函数必须配合内置函数使用,否则毫无意义
    
            - 内置函数:
                max(key=匿名函数)  # 最大值
                min(key=匿名函数)  # 最小值
                sorted(key=匿名函数)  # 排序,默认升序,reverse=True降序
                map(匿名函数)  # 映射
                reduce(匿名函数, )  # 合并
                    from functools import reduce
                    reduce()
                filter(匿名函数,)  # 过滤
    
        22.递归:
            - 递推:
                先递推,重复往下执行函数本身,每一次执行都会更接近于终止条件。
    
            - 回溯:
                当递推遇到一个终止条件,开始回溯,一层一层往上推导。
    
        23.面向过程编程:
            是一门编程思想:
                核心是 “过程” 二字,过程指的是解决问题的步骤,即先干什么再干什么
                基于该编程思想编写程序,就好比一条工厂流水线,一种机械式的思维方式。
    
        24.模块:
            模块本质上就是一个.py后缀的文件。
            模块是一系列功能(变量,函数)的结合体。
            - 更好管理python代码
    
            - 三种来源:
                - 内置
                - 第三方
                - 自定义的
    
            - 四种表现形式:
    
                # 关注的:
                - 包下带有__init__.py的文件夹中的一组py文件。
                - python解释器自带的。
    
            - 模块的导入方式:
                - import 模块名字
                - from 模块 import 函数/变量名
    
            - 导入模块时发生的事情:
                1.先执行当前执行文件,生成一个当前文件的名称空间。
                2.会执行被导入的模块,会生成一个被导入模块的名称空间。
                3.将被导入模块的名称空间加载到内存中。
    
            - 首次导入模块发生的事情:
                import demo
                import demo
                import demo
                在执行文件中导入多次相同的模块,
                会只加载首次导入的模块的名称空间。
    
        25.包:
            注意: 包也可以称之为模块。
    
            包是内部带有__init__.py的文件夹。
            包是一系列模块的结合体,用来管理模块。
    
            - 导入包时发生的事情:
                1.会先执行包下面的__init__.py,产生一个名称空间。
                2.会将包中的所有模块都加载__init__.py的名称空间中。
                3.当在执行文件中使用包中的模块,指向的是__init__.py的名称空间。
    
            - 由__init__.py来帮我们管理模块。
    
            - 导入包的方式:
                import 包.模块名
                from 包 import 模块名
                from 包.模块 import 模块中名字 (变量名/函数名)
    
        26.常用内置模块:
            - time (******) --> time.time() , time.sleep()
            - datetime  (******)
                - --> 格式化时间 ---> Format String
                - 时间的计算:
                    日期时间 = 日期时间 + or - 时间对象(时间间隔对象)
                    时间对象 = 日期时间 + or - 日期时间
    
            - random:
                random.random()  ---> 随机获取 0——1 的浮点数
                random.uniform(1, 10) ---> 随机获取 1——0 的浮点数
                random.randint(1, 10)  ---> 随机获取 1——0的整数
                random.choice(根据索引取值的可迭代对象)  ---> 随机获取可迭代对象某一个值
                random.shuffle(根据索引取值的可迭代对象)  ---> 随机打乱
    
            - os
                # 获取当前执行文件中的目录(文件夹)
                os.path.dirname(__file__)
    
                # 路径拼接
                os.path.join('文件的路径', '文件名')
    
                # 判断文件或文件夹是否存在
                os.path.exists('文件绝对路径')
    
                # 判断文件夹是否存在
                os.path.isdir('文件夹绝对路径')
    
                # 判断文件是否存在
                os.path.isfile('文件绝对路径')
    
                # 创建文件夹
                os.mkdir()
    
                # 删除文件夹
                os.rmdir()  # 注意: 只能删除空的文件夹
    
                # 打印文件夹中所有的文件名
                os.listdir('文件夹的路径')
    
            - sys
                sys.path  # 环境变量中的路径
                sys.path.append(
                    '项目目录'
                )
                sys.argv  # 获取cmd中的命令行   [py文件路径, 'tank', '123']
    
                # 可以做执行用户的校验,限制某个用户可以执行当前py文件
    
                python3 py文件路径 tank 123
    
            - hashlib
                加密:
                MD5:
                    md5_obj = hashlib.md5()
                    # 密码加密
                    md5_obj.update(密码.encode('utf-8'))
                    # 加盐
                    md5_obj.update(盐.encode('utf-8'))
                    md5_obj.hexdigest()
    
            - 序列化与反序列化:
                序列化: 将其他数据类型 ---》 json数据格式 ---》 字符串 ---》 写入文件中
                反序列化: 读取文件 ----》 字符串 ---》 json数据格式 ---- 》 其他数据类型
    
            - json
                优点:
                    - 可以跨平台
                缺点:
                    - 不支持python的set
    
                注意: 传入的元组变成列表
    
                json.dumps()
                    - res = 将其他数据类型 ---》 json格式的字符串
                    - f.write(res)
    
                json.loads()
                    - json_res = f.read()
                    - python_data = json.loads(json_res)
    
                json.dump()
                    内部执行了f.write()
    
                json.load()
                    内部执行了f.read()
    
            - pickle
                优点:
                    - 支持python的任意数据类型
                    - 可以存入二进制的数据
                    - 存取速度快
    
                缺点: (致命的)
                    - 不能跨平台使用
                    - 只能python自己使用
    
            - collections
                - 具名元组:
                    from collections import namedtuple
                    namedtuple('对象的名字', 'x y')
                    obj = namedtuple('坐标', ['x', 'y'])
                    target_obj = obj(10, 20)
                    target_obj.x  # 10
                    target_obj.y  # 20
    
                - 有序字典:
                    from collections import OrderedDict
                    order_dict = OrderedDict({key: value})
    
            - re:
                - 正则表达式
                    正则表达式是一个独立的技术, 由一堆特殊的字符组成。
    
                    - 字符组
                    - 元字符
                    - 组合使用
    
                - re模块
                    在python中要想使用正则表达式,必须通过re模块来编写。
    
            - subprocess
                可以通过python代码往操作系统终端输入命令,并返回结果。
                - 可以远程操控电脑
    
            - logging:
                注意1: log文件的目录
                注意2: log文件名
                注意3: log配置字典
    
                注意4:
                logging配置字典:
                LOGGING_DICT = {}
                import logging.config
                logging.config.dictConfig(LOGGING_DICT)
                logger = logging.getLogger('普通用户')
                logger.info('日志打印消息...')
    
    
        27.第三方模块:
            - requests
                - requests.get(url) ---> response
                - response.text  # 获取文本数据
                - response.content  # 获取二进制数据
    
            - openpyxl:
                # 创建文件
                from openpyxl import Workbook
                wb_obj = Workbook()
                wb1 = wb_obj.create_sheet('工作表名字1', 0)
                wb2 = wb_obj.create_sheet('工作表名字2', 1)
                wb1['C30'] = 200
                wb_obj.save('文件名字.xlsx')
    
                # 读取文件
                from openpyxl import load_workbook
                wb_obj = load_workbook('文件名字.xlsx的路径')
                wb1 = wb_obj['工作表名字1']
                print(wb1['C30'].value)  # 200
    
        28.防止模块被导入时自动执行测试代码
        if __name__ == '__main__':
            执行测试代码
    
    
        29.软件开发目录规范:
            - 项目目录:
                - conf:
                    - settings.py
    
                - core:
                    - src.py  # src ---> source
    
                - db:
                    - data.json
                    - data.pickle
    
                - interface:
                    - user_interface.py
                    ...
    
                - lib:
                    - common.py
    
                - log:
                    - user_log.log
                    ...
    
    
                - bin/ start.py:
                    - start.py
    
                - readme.txt
                    项目说明书
    
        30.enumerate
            可迭代对象: list, tuple, dict
            # [1, 2, 3]
            enumerate(可迭代对象)   ---》 g((0, 1), (1, 2), (2, 3))
    
    
  • 相关阅读:
    一个datagrid中嵌入checkBox典型的例子
    堆排序算法
    堆排序(利用最大堆)
    动态代理模式的实现
    [转载]C#如何实现对外部程序的动态调用
    9.Jmeter 多个threadgroup 中的配置元件会一次性进行初始化
    二十七。
    三十。接口2
    三十三。日志
    大道至简读后感
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11947025.html
Copyright © 2011-2022 走看看