01_Python基础知识梳理

1.计算机知识基础

1.计算机组成

        计算机底层: 点子电路,计算机只能识别两个数 0 1
        硬件: 处理器(CPU), 运行内存(RAM), 主板(总线设备), 外部存储设备(硬盘U盘等), 输入输出设备
        软件: 操作系统软件(运行在内核模式下), 标准库软件(运行在用户模式下), 应用软件(运行在用户模式下)

2.三大操作系统

        Unix: AIX(IBM), Solaris(SUN/Oracle), MAC OS X(Apple), IOS(Apple)
        Linux: Ubuntu, Redhat, CentOS, Android
        Windows: win95, win98, winXP, win7, win10

3.常用的程序文件后缀

        .py     Python文件
        .c       C文件
        .cpp   C++文件
        .cs     C#文件
        .java   Java文件

4.语言分类

        编译型: C, C++, Go, Swift, Object-C, Pascal
        解释型: JavaScript, Python, Ruby, PHP, Perl, Erlang
        混合型: Java, C#
        编译型语言与解释型语言执行过程流程图: https://www.processon.com/view/link/5e723852e4b08b6157267b5e
        程序执行原理流程图: https://www.processon.com/view/link/5ebd5af21e08530a9bfc3a01
        程序的三大流程-顺序-分支-循环: https://www.processon.com/view/link/5ebd8198e0b34d5f260c1511

2.头文件声明

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    第一行: Linux类系统中shell执行py文件,头文件要声明解释器路径,env(环境变量)
    第二行: 告诉python解释器, 应该以utf-8编码来解释py文件,在python2中执行py文件中有中文时不加会报错

3.python解释器

    python(python2.x的解释器)
    python3(python3.x的解释器)
    Cpython: 官方版本的C语言实现
    Jpython: 可以运行在Java平台
    IronPython: 可以运行在.NET和Mono平台
    PyPy: Python实现的支持JIT即时编译,平均而言,PyPy比CPython快4.4倍

4.python的交互模式

    1.进入交互模式
        在终端/cmd命令行下执行命令: python3
    2.退出交互模式
        在终端/cmd命令行下执行命令:
            输入退出命令: quit()/exit()
            或者输入文件结束符: ctrl+d/contol+d
    3.语法验证推荐进入ipython
        # ipython使用了sqlite数据库存储 Input 和 Output
        命令: ipython

5.python注释

    1.单行注释: #开头直至行尾,在代码行尾加注释时需要空出两个空格,#号注释符与注释内容空一个空格
        # 这是注释1,被注释内容不会参与解释执行
        print("hello")  # 这是注释2
    2.多行注释: 多行注释自带隐式换行

        '''
        被注释的内容1
        被注释的内容2
        '''
        """
        被注释的内容1
        被注释的内容2
        """
    3.TODO注释: 用于标记谁需要去做的工作
        # TODO(作者/邮箱) 注释内容
        # TODO(echo/echo@xxx.com) 此处完成接收消息的方法并返回处理后的结果给调用者

6.python程序的组成

    程序由模块组成-->模块由语句,函数,类组成-->语句由表达式组成
    表达式: 建立并处理数据对象且能返回数据对象的引用关系
    Python代码结构流程图: https://www.processon.com/view/link/5ec29f060791290fe06e9e8f

7.python中自动化内存管理和引用计数

    每个对象都会记录有几个变量引用自身,当引用的数量为0时,此对象将被销毁
    自动化内存管理和引用计数流程图: https://www.processon.com/view/link/5ed43cf063768906e2d0ce80
    示例:
        a = 1000
        b = 2000
        a = a + b
        c = a # 3000这个对象同时被a和c引用

8.python中关联/绑定/引用的含义

    关联/绑定/引用都是指变量和一个对象的关联关系,python中变量是没有类型的
    示例:
        a = 1000 + 2000
        b = a
        c = b
        #  此时变量a,b,c同时绑定同一个对象3000

9.小数据池(常量池)

    1.小数据池概述:
        1.CPython中把我们使用过的值存储在小数据池中,供其他的变量使用
        2.小数据池优点: 需要值相同的字符串或整数的时候,直接从小数据池里拿来用,避免频繁的创建和销毁,提升效率,节约内存
    2.小数据池的存储数据类型: 小数据池给数字和字符串使用,其他数据类型不存在小数据池中
        1.数字满足小数据池条件: -5~256会被加到小数据池中,每次使用的都是同一个对象
        2.字符串满足小数据池条件:
            1.字符串的长度为0或者1, 例如:"@"  # 此时即使是1个特殊字符也会加入小数据池
            2.字符串的长度>1,且只含有大小写字母,数字,下划线  # 不能包含特殊字符
        3.用乘法得到的字符串满足小数据池条件:
            1.乘数是1时,且仅含大小写字母,数字,下划线
            2.乘数是1时,含其他字符,且长度<=1, 例如"@" * 1
            3.乘数>=2时,仅含大小写字母,数字,下划线,且总长度<=20
    3.指定字符串加入小数据池: 指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字符串
        from sys import intern

        a = intern('hello!@'*20)
        b = intern('hello!@'*20)
        print(a is b)  # True

10.编码

    ASCII                     8位   1个字节(byte)
    GBK        国标码   16位   2个字节(双字节字符)
    Unicode  万国码   32位   4个字节
    utf-8        变长      8位   1个字节(满足ASCII)
                               16位   2个字节(满足欧洲文字)
                               32位   3个字节(满足中文)
    单位转换
        8bit = 1byte    8位 = 1字节
        1024byte = 1KB  1024个字节 = 1千字节
        1024KB = 1MB    1024千字节 = 1兆字节-->百万字节
        1024MB = 1GB    1024兆字节 = 1吉字节-->十亿字节
        1024GB = 1TB    1024吉字节 = 1太字节-->万亿字节
        1024TB = 1PB    1024太字节 = 1拍字节-->千万亿字节
        1024PB = 1EB    1024拍字节 = 1艾字节-->百亿亿字节
        1024EB = 1ZB    1024艾字节 = 1泽字节-->十万亿亿字节
        1024ZB = 1YB    1024泽字节 = 1尧字节-->一亿亿亿字节

11.语法糖-解构(解包)

    示例1:
        dic = {"id": 1, "name": "Coco", "age": 18}
        for key, value in dic.items():
            print(key, value)
    示例2:
        a, b = 1, 2
        a, b = [1, 2]
        a, b = (1, 2)

12.python项目命名规则

    1.项目名前面数字编号(编号递增),例如: 01_名片管理系统,02_信息管理系统
    2.项目下的文件名都以xx_xx_xx方式命名,例如: http_web_server, http_mini_frame
    3.项目下的文件命名时建议使用小写字母数字下划线,且文件名不能以数字开始

13.python项目下的.pyc文件

    1.python在解释源程序时的过程
        1.首先处理源代码,编译生成一个二进制字节码
        2.再对字节码进行处理后生成CPU能识别的机器码
    2.浏览项目目录会有一个__pycache__的目录目录下会有一个xxx.cpython-37.pyc文件
        1.当一个Python脚本文件被导入时就会在这个目录下生成一个编译好的文件
        2.cpython-37: 表示python解释器的版本,这个.pyc文件是由python解释器将模块的源码转换后的字节码
        3.保存字节码是作为启动速度的优化,节省一些导入时间
        4.有了模块的字节码文件之后下一次运行程序时,如果没有修改过源代码,python将会加载.pyc文件,并跳过编译这个步骤
        5.当python代码重新编译时,会自动检测源文件和.pyc字节码文件的时间戳,如果修改了源代码,下次运行程序时字节码将会自动重新创建

14.计算机的进制/存储/编码

1.十的不同进制表示(数字0开头后跟小写字母)

        二进制: (1010)2-->0b1010
        八进制: (12)8 -->0o12
        十进制: (10)10-->10
        十六进制: (A)16-->0xA

2.机器数: 一个数在计算机中二进制表示形式叫这个数的机器数,机器数的三种表现形式为 原码 反码 补码

        # 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1
        +1 机器码表示: 0000 0001
        -1 机器码表示: 1000 0001

3.真值: 将带符号位的机器数对应的真正数值称为机器数的真值

        +1 的真值: 000 0001
        -1 的真值: 000 0001

4.原码: 符号位加上真值的绝对值,即用第一位表示符号,其余位表示值

        [+1]原 = 0000 0001
        [-1]原 = 1000 0001
        所以八位二级制数的取值范围是[-127, 127] 即最多表示255个数

5.反码: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反

        [+1] = [0000 0001]原 = [0000 0001]反
        [-1] = [1000 0001]原 = [1111 1110]反

6.补码: 正数的补码依旧是其本身,负数的补码是在其原码的基础上,符号位不变其余各位取反最后+1(即在反码的基础上+1)

        [+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
        [-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
        在计算机系统中,数值一律使用补码来表示(存放)
        计算机只会做加法运算: 1-1在计算机底层实际上是补码的加法计算1 + (-1) = [0000 0001] + [1111 1111] = 0

7.编码

        1.国标系列(常用于Windows)
            GB18030(2个字节或4字节编码,共27533个)
            GBK(16位 2个字节编码,共21003个)
            GB2312(2个字节编码,共6763个汉字)
        2.国际标准(常用于Linux/Mac OS/IOS/Android)
            UNICODE16/UNICODE32: 万国码,最少用16位表示,usc-2 16位2个字节 usc-4 32位4个字节,可以直接和utf-8和gbk转换
            UTF-8(8-bit Unicode Transformation Format): utf8不能直接和gbk转换,以非贪婪的形式表示,英文8bit 1个字节,欧洲文字16bit 2个字节,中文24bit 3个字节
        3.用于encode和decode方法参数的编码字符串
            s.encode('gb2312')
            s.decode('gb2312')
            'gbk'
            'gb18030'
            'utf-8'
            'ascii'
        4.编码注释
            在源文件的第一行或第二行写入的内容告诉python解释器执行当前文件的编码是什么
            # -*- coding: utf-8 -*-

15.代码规范(PEP8代码规范)

    1.英文文档地址: https://www.python.org/dev/peps/pep-0008/
    2.中文文档地址: https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/

16.python运算符的优先级(由上而下优先级从高到低)

(), [], {key: value}, {}  元组表达式,列表表达式,字典表达式,集合表达式 
x[index], x[index:index] 索引,切片
  x(arguments...), x.attribute   函数调用,属性引用
** 指数(最高优先级)
~, +, - 按位翻转,正号,负号
*, /, %, // 乘,除,取模和地板除
+, - 加法,减法
>>, << 右移,左移运算符
& 按位与(AND)
^ 按位异或(XOR)
| 按位或(OR)
<=, <, >, >=, ==, != 比较
is, is not 身份测试
in, not in 成员资格测试
not 布尔非
and 布尔与
or 布尔或
if - else 条件表达式
lambda lambda表达式

17.python项目源码打包成可执行的文件

1.打包成Windows下可执行的exe文件

        1.命令行模式下: python3 -m pip install PyInstaller
        2.命令行模式下移动到原码目录下执行: pyinstaller -F -w xxx.py  # xxx.py为项目的启动文件
        3.参数说明:
            -F: 表示在dist文件夹下只生成单个可执行文件内部包含所有依赖,不加默认会在dist生成一大堆依赖文件+可执行文件
            -D: 与 -F 相反用法
            -W: 表示去掉控制台窗口,如果你的程序是有界面的可以不写这个参数,如果打包不成功运行时报错信息会在控制台上输出
            -c: 表示去掉窗框,使用控制台
            -p: 表示自己定义需要加载的类路径,项目中包含多个自建模块的时候需要加上 -p aaa.py -p bbb.py -p ccc.py
            -i: 表示可执行文件的图标,后面跟图标的路径
            --hidden-import: 后面跟模块名如 queue,用于告诉打包程序某个模块我用不着你不用打包进去

2.打包成Mac下可执行的app文件

        1.命令行模式下: sudo pip install py2app
        2.命令行模式下移动到原码目录下执行: py2applet --make-setup xxx.py  # xxx.py为项目的启动文件
        3.执行以后目录中会生成 setup.py 文件用于写入依赖的库,如果没有导入第三方库和自建模块可以不用写入依赖的库
        4.下面是setup.py文件的一个示例
            # python自带的库无需输入,第三方库和自己引入的自写模块需要输入
            """
            This is a setup.py script generated by py2applet

            Usage:
                python setup.py py2app
            """

            from setuptools import setup

            APP = ['start.py']
            # 自写模块放在DATA_FILES列表中
            DATA_FILES = ['xxx1.py', 'xxx2.py', 'xxx3.py']
            # 第三方库放在OPTIONS下的includes对应的列表中
            OPTIONS = { 'includes': ['sip', 'PyQt5.QtCore', 'PyQt5.QtWidgets'],}

            setup(
                app=APP,
                data_files=DATA_FILES,
                options={'py2app': OPTIONS},
                setup_requires=['py2app'],
            )
        5.命令行下生成app
            # 自己开发打包速度快(因为本机安装了依赖库,所以可以直接运行)
            python setup.py py2app -A

            # 给其他没有sdk的电脑使用包括lib库(没有安装sdk的电脑使用需要去掉-A,将把所有的依赖全部打包)
            python setup.py py2app  # 执行之后会生成build和dist两个文件夹,启动文件在dist下双击就可以执行
            # 如果发现有问题,在重新进行上述步骤前最好先删除build和dist两个文件夹
            rm -rf build dist

18.函数,匿名函数,闭包,对象当做实参时有什么区别

    1.普通函数能够完成较为复杂的功能,传递的是这个函数的引用,只有功能
    2.匿名函数能够完成基本的简单功能,传递的是这个函数的引用,只有功能
    3.闭包能够完成较为复杂的功能,传递的是闭包中的函数和数据,既有功能又有数据
    4.对象能够完成最为复杂的功能,传递的是很多数据和很多功能,既有功能又有数据

19.第三方管理工具pip和pip3

    概述: pip是Python2的标准第三方管理工具,pip3是Python3的标准第三方管理工具
    安装包: pip3 install 要安装的包名
    更新包: pip3 install --upgrade 要更新的包名
    更新pip3: pip3 install --upgrade pip3
    卸载包: pip3 uninstall 要卸载的包名
    列出已安装的包: pip3 list
    查找包: pip3 search 要查找的包名
    查看包信息: pip3 show 要查看的包名
    记录软件环境: pip3 freeze > requirements.txt
    根据开发环境文件进行环境安装: pip3 install -r requirements.txt

20.python控制台输出带颜色的文字

    设置颜色开始: \033[显示方式;前景色;背景色m
    设置颜色结束: \033[0m
    说明:
        前景色  背景色  颜色
        -------------------
        30        40       黑色
        31        41       红色
        32        42       绿色
        33        43       黃色
        34        44       蓝色
        35        45       紫红色
        36        46       青蓝色
        37        47       白色

        显示方式  意义
        -------------------------
        0             终端默认设置
        1             高亮显示
        4             使用下划线
        5             闪烁
        7             反白显示
        8             不可见
    示例1:
        \033[1;31;40m  # 1-高亮显示 31-前景色红色 40-背景色黑色
        \033[0m  # 采用终端默认设置,即取消颜色设置
    示例2:
        print('\033[0;32;40m欢迎使用学生选课系统\033[0m')
        try:
            num = int(input('请输入数字选择功能: '))
        except Exception as e:     print('\033[31m对不起!您输入的内容有误~\033[0m')

posted @ 2019-03-13 15:17  唐雪成  阅读(375)  评论(0编辑  收藏  举报