计算机基础之编程
- 编程语言是人与计算机交流的介质
- 编程是通过编程语言编写一大堆文件
- 为什么要编程-->奴役计算机,让计算机帮我们干活
计算机组成
- CPU
- 控制器
- 运算器
- 内存
- 外存
- 输入设备
- 输出设备
- IO设备
- 32位和64位
- 多核CPU
- 应用程序的启动
- 机械硬盘工作原理
- 机械手臂
- 磁道
- 扇区
- 平均寻道时间
- 平均延迟时间
- 平均寻找数据时间
- 固态硬盘工作原理
计算机操作系统
- 什么是文件
- 什么是应用程序
- 操作系统的作用
- 操作系统的启动
编程语言分类
- 机器语言
- 汇编语言
- 高级语言
- 编译型
- 解释型
网络瓶颈效应
- 网络的延迟时间远远大于应用程序的执行时间
python文件执行的两种方式
- 交互式
- 命令行式(python test.py)
变量
- 变量-->描述世间万物变化的状态
- 变量的组成
- 变量名的命名规范
- 变量名的两种定义方式
常量
- 常量-->python中约定俗称不变的量,但实际上是可以改变的,常量名全大写
变量内存管理
- 引用计数
- 垃圾回收机制
- 小整数池
定义变量的三种特征
- 打印值
- 打印内存
- 打印数据类型
import numpy as np
arr = np.array([1, 2, 3])
arr
array([1, 2, 3])
type(arr)
numpy.ndarray
花式赋值
- 链式赋值
- 交叉赋值
注释
- 单行注释
- 多行注释
与用户交互
- input
- input接收的值全是字符串
格式化输出的三种方式
- %占位符
- format格式化
- f-string格式化
基本运算符
- 算术运算符
- 逻辑运算符
- 比较运算符
- 身份运算符
- 赋值运算符
- 成员运算符
- 运算符的优先级: 优先计算的加括号
流程控制之if判断
- 单分支结构
- 双分支结构
- 多分支结构
- if嵌套
流程控制之while循环
- while+break
- while+continue
- while+else
- while嵌套
流程控制之for循环
- for+break
- for+continue
- for+else
- for嵌套
数字类型
- 整型
- 浮点型
字符串
# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
name = " aleX"
# 1) 移除 name 变量对应的值两边的空格,并输出处理结果
# 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
# 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
# 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
# 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
# 6) 将 name 变量对应的值变大写,并输出结果
# 7) 将 name 变量对应的值变小写,并输出结果
# 8) 请输出 name 变量对应的值的第 2 个字符?
# 9) 请输出 name 变量对应的值的前 3 个字符?
# 10) 请输出 name 变量对应的值的后 2 个字符?
# 11) 请输出 name 变量对应的值中 “e” 所在索引位置?
# 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
列表
有如下列表,请按照年龄排序(涉及到匿名函数)
l=[
{'name':'alex','age':84},
{'name':'oldboy','age':73},
{'name':'egon','age':18},
]
字典
1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
元组
九九乘法表
集合
一.关系运算
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
布尔
- 所有数据类型除了0/None/空/False之外都自带布尔值为True
数据类型分类
可变 | 不可变 |
---|---|
列表/字典/集合 | 整型/浮点型/字符串/元组 |
有序 | 无序 |
---|---|
字符串/列表/元组 | 字典/集合 |
一个值 | 多个值 |
---|---|
整型/浮点型/字符串 | 列表/元组/字典/集合 |
解压缩
- 一次性获取多个容器元素
异常处理
try:
1/0
except Exception as e:
print(e)
finally:
print('我一定会执行')
division by zero
我一定会执行
- assert 断言
- raise 主动抛错
深浅拷贝
- 拷贝
- 浅拷贝
- 深拷贝
字符编码
- 用什么编码存就用什么编码取
Pyhton2和3的编码的区别
文件的打开方式
- 打开文件 open
- 读取文件 read/write
- 关闭文件 close
文件的三种打开模式
-
r
-
w
-
a
-
t:文本
-
b:二进制
with管理文件上下文
with open('test.py','r',encoding='utf8') as fr:
...
文件的高级应用
- r+
- a+
- w+
- seek # 移动指针,字节
- tell # 告诉指针位置,字节
- read(n) # 读取n个字符,只有read模式才是字符
- truncate() # 截断-->写模式,字节
文件的两种修改方式
with open('test.txt', 'r', encoding='utf8') as fr,
open('test_swap.txt', 'w', encoding='utf8') as fw:
data = fr.read()
# 逻辑操作
fw.write(data)
import os
os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')
函数的定义
def 函数名(参数):
代码块
定义函数的三种方式
- 有参函数
- 无参函数
- 空函数
函数的返回值
- return返回值,可以终止函数
- 返回多个值,以元组的形式返回
- 默认返回None
函数的调用
函数名()
函数的参数
- 形参
- 位置形参
- 默认形参
- 实参
- 位置实参
- 关键字实参
可变长参数
- *
- *形参
- *实参
- **
- **形参
- **实参
函数对象
- 引用对象
- 函数的返回值
- 函数的参数
- 容器类元素
函数的嵌套
def f1():
def f2():
pass
名称空间和作用域
- 内置名称空间
- 全局名称空间
- 局部名称空间
执行顺序: 内置-->全局-->局部
查找顺序: 从当前位置开始 --> 局部 --> 全局 --> 内置
- 全局作用域
- 局部作用域
全局作用域和局部作用域互不关联;局部作用域1和局部作用域2互不关联.
闭包函数
把变量x和函数f2包在一起,通过函数f1返回出来
def f1(x):
def f2():
print(x)
return f2
f1(20)
x = 10
装饰器
def outter(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
def sanceng():
def outter(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
return outter
迭代器
- 可迭代对象
- 迭代器对象
生成器
- 含有yield关键字的函数, 函数调用已经不是调用,而是变成一个生成器
def func():
yield 1
g = func() # 生成器
for i in g:
print(i)
1
三元表达式
print(1) if x > 10 else print(2)
列表推导式
[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
字典生成式
{k: v for k, v in {'a': 1}.items()}
{'a': 1}
for i in zip([1, 2, 3], [1, 2, 3]):
print(i)
(1, 1)
(2, 2)
(3, 3)
生成器表达式
(i for i in range(10))
<generator object <genexpr> at 0x00000222B9D67888>
for i in (i for i in range(10)):
print(i)
0
1
2
3
4
5
6
7
8
9
内置函数
for i in enumerate([1, 2, 3]):
print(i)
(0, 1)
(1, 2)
(2, 3)
匿名函数
def f(x, y): return x+y
f(1, 2)
3
匿名函数一般与map/filter/max/min/sorted联用
l = [
{'name': 'alex', 'age': 84},
{'name': 'oldboy', 'age': 73},
{'name': 'egon', 'age': 18},
]
l.sort(key=lambda i: i['age'])
l
[{'name': 'egon', 'age': 18},
{'name': 'oldboy', 'age': 73},
{'name': 'alex', 'age': 84}]
递归
函数调用函数本身,会有一个结束条件
面向过程编程
流水线编程
模块的四种形式
- 自定义
- 内置
- 第三方
- 包
import和from...import
# test.py
import time
-
生成一个time的名称空间
-
运行time.py文件把生成的变量放入time模块
-
让test.py指向time这个名称空间
-
生成一个time的名称空间
-
运行time.py文件把生成的变量放入time模块
-
from time import time让test.py指向time
循环导入问题
# m1.py
from m2 import y
x = 10
# m2.py
from m1 import x
y = 20
# m1.py
def f1():
from m2 import y
x = 10
# m2.py
def f1();
from m1 import x
y = 20
模块的搜索路径
- 内存-->内置-->自定制-->环境变量(sys.path)
文件的两种用途
- 执行文件
- 模块文件
包
- 一个模块里有多个函数,无法管理,所以分成多个文件存放函数,但是不能改变模块的导入方式
- 导包就是导init
time模块
- 打印三种不同格式的时间
datetime模块
- 修改时间
random模块
- 随机数+打乱列表顺序
json模块
- 序列化: 将python数据类型转化为json串
- 反序列化: 将json串转化为python数据类型
特性: 跨平台
pickle模块
- 只针对python,但是python的所有数据类型
os模块
- 与操作系统交互,多用于文件处理
sys模块
- 与python解释器交互
hashlib模块
- 加密成固定长度的字符串
hmac模块
- 相比较hashlib模块做了一个加盐处理
uuid模块
import uuid
print(uuid.uuid4()) # 做id(唯一标识)用的
2d465e1b-75c0-4a73-b61d-f731a5d56ca3
logging模块
- 日志记录
numpy模块
- numpy数组(矩阵)的科学运算
pandas模块
- 处理文件,多用于excel表格
matplotlib模块
- 画图
re模块
- 正则表达式,字符串内找特定的字符串
typing模块
- 获取一些数据类型,generator
collections模块
- 增加一些特殊的数据类型
shutil模块
- 文件的解压缩
xml模块
- 配置文件
subprocess模块
- 替代cmd输入命令