test
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/) 此处完成接收消息的方法并返回处理后的结果给调用者
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(‘‘*20)
b = intern(‘‘*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