• python入门总复习


    总复习

    1.计算机核心组件:

        - CPU         
        - 内存 
        - 硬盘
        - 输入设备: 键盘、鼠标 
        - 输出设备: 显示器、音响.. 
    

    2.python解释器

    • 将人类编写好的代码转成机器能看得懂的字符。
    • 解释器的作用:帮你执行python代码。

    3.pycharm编辑器:

    ​ - 编辑器的作用:可以更好的编写python代码,编辑器内部有很多强大的功能。 能够快速编写代码。

    4.编程语言分类:

    • 机器语言(机器能直接看懂):

      比如: 01010101

    • 汇编语言(让人能看懂一点点):

      比如: a —> 01101001

    • 高级语言(让人类能直接看懂):

      比如: print(‘hello’)

      高级语言是更接近于人类的语言。

    • 解释型:
      一遍解释(翻译)一遍执行, 类似于同声传译。
      优点:
      开发效率高,可跨平台,一份代码可以多个平台使用。
      缺点:
      执行效率相比于编译型低。

    • 编译型:
      先一次性编译然后再执行,类似于 “有道翻译”。
      优点:
      执行效率高,稳定性高
      缺点:
      开发效率相比于解释型语言要低。
      不可跨平台。

    • 解释型语言的种类:
      python: 10级别
      java: 8
      php: 3

    • 编译型语言的种类:
      C

    5.变量

    ​ 变量指的是可变化的量。

    - 变量名: 可以与变量值绑定关系,通过变量名可以访问变量值。     
    - 赋值符号(=): 是用来将变量名与变量值绑定关系。       
    - 变量值: 变量值 指的是 “数据”, 存放在内存中。    
    

    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’]) # 字符串的拼接,必须是字符串类型
      str.startswith() 判断字符串开头,若正则返回True,否则返回False
      str.endswith() 判断字符串结尾,若正则返回True,否则返回False
      str.isdigit()判断字符串是否是数字,若正则返回True,否则返回False
      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 多少层都是一个。

    • 局部名称空空间: 在函数内部定义的。
      查找顺序:当前局部 —》 外层局部 —》 全局 —》 内置
      加载顺序:内置 —》 全局 —》 外层局部 —》 当前局部

    • 作用域:

    1. 全局作用域:
      内置
      全局
    2. 局部作用域
      外层局部
      内层局部
    3. global: 在局部可以声明全局名字。
      相当于将全局变量引用到局部中使用或修改。
    4. 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代码

    • 三种来源:
      内置
      第三方
      自定义的
    • 四种表现形式: # 关注的:
      1. 包下带有__init__.py的文件夹中的一组py文件。
      2. python解释器自带的。
      3. 模块的导入方式:
        import 模块名字
        from 模块 import 函数/变量名
      4. 导入模块时发生的事情:
        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))

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    docker重启提示已存在一个容器的问题处理
    conda虚拟环境安装
    dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用
    CentOS8的网络管理变化
    jupyter notebook 安装扩展nbextensions
    win10系统systeminfo命令的过滤用法
    《学习scrapy框架爬小说》的进一步完善
    记手机端 下拉加载新数据
    记 页面使用overflow-scroll在iOS上滑动卡顿的问题
    记 判断手机号运营商function
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863909.html
Copyright © 2020-2023  润新知