今日内容概要
计算机基础阶段
计算机五大组成部分
- 控制器
- 控制计算机硬件工作
- 运算器
- 数学运算、逻辑运算(控制器+运算器=CPU)
- 存储器
- 存储数据
- 内存:临时存储 存储数据快 断电就丢失
- 外存:长时间存储 存储数据慢 如:U盘、固态、硬盘
- 存储数据
- 输出设备
- 显示器、音响
- 输入设备
- 键盘、鼠标
计算机三大核心硬件
- CPU
- 运行系统(软硬件)
- 内存
- 存储数据快,配合CPU工作
- 硬盘
- 保存数据、保存数据慢
操作系统
- 控制 协调计算机各个硬件正常运行
* windows
文件路径
- 定义
- 计算机上文件的存放位置
- 绝对路径
- 不需要参考 共享的资源路径谁都能找到
- 相对路径
- 需要参考 获取到权限的人才能找到
变量与常量
- 变量——随时都能变化的事物状态
- 常量——不经常变化的事物状态(python默认全大写表示常量)
- 语法结构——name = 'xiaoming'
- 底层原理
变量名 赋值符号 数据值、变量名、函数名、函数调用、生成式- 一旦看到赋值符号 那么一定先看符号的右侧
- 在内存空间中申请一块内存空间存储数据值
- 给数据值绑定一个变量名
- 以后就可以通过变量名访问到数据值
python基本数据类型
数据类型
- 定义:在日常生活中数据的表现形式多种多样 在程序中也是如此
- 数据类型之
- int整型
- float浮点型
- str字符串
- list列表
- dict字典
- bool布尔值
- tuple元组
- set集合
垃圾回收机制
- 定义——python自带垃圾回收机制
- 专门清理不可用的垃圾变量名释放内存空间
- 垃圾回收机制的方式
- 引用计数——python主用
- 标记清楚——辅助
- 分代回收——辅助
用户交互
input
- 获取用户输入
- 获取到的统一为字符串类型
- 输出内部信息
- 自带换行符
流程控制
- 顺序结构——开始、过程、结果
- 分支结构
- 单if分支结构
- 条件——if条件成立——直接输出
- if...else...分支结构
- 条件——if条件成立/不成立——直接输出/else输出
- if...elif...else分支结构
- 条件——if条件不成立/成立(输出)——子代码elif还不成立/成立(直接输出)——都不成立执行else输出
- 单if分支结构
- 循环结构——while
- 循环取值判断直到取完输出
- if嵌套
- 一个if条件跟着一个成立输出一个else不成立输出
- for循环结构
- for 变量名 in 待遍历数据:(for循环体代码)
- 循环获取多个数值 遍历完结束
- 遇到break直接结束循环、continue结束当前循环开始新循环
- 遍历数值类型
- 字符串、列表、元组、字典、集合
range()
- 控制数据范围
数据类型内置方法
- 字符串——索引取值切片
- len() 统计长度
- strip() 删除首尾空格
- split() 字符串切割字符串
- index() 索引
- format() 格式化输出——f'{变量名}'
- 列表——索引取值切片
- len() 统计列表里数据个数
- append() insert() extend() 列表添加数据
- remove() pop() 删除列表里数据
- 字典——按键取值 k:v
- get() 按键取值
- keys() 一次性获取字典所有的键
- values() 一次性获取字典所有的值
- items() 一次性获取字典的键值对数据
- append() 附加
字符编码
* 编码——encode()
* 解码——decode()
* ASCII——美国人发明
* GBK——中国人发明
* shift_JIS——日本人发明
* Euc_kr——韩国人发明
* unicode——万国码
文件处理
- with open(文件路径,模式,encoding='utf8') as f:
- 文件路径不存在:自动创建
- 文件路径存在:正常读取文件内容
- 文件路径存在:先清空文件内容 之后再写
- 文件路径存在:自动在末尾等待追加内容
- 不知道写什么具体代码 可以使用关键字‘pass’
函数
函数语法结构
ef 函数名(参数):
'''函数注释'''
函数体代码
return 返回值
'''
1.def
定义函数的关键字
2.函数名
变量名
3.参数
可有可无 使用函数的时候规定要不要外面传数据进来
4.函数注释
类似于工具说明书
5.函数体代码
函数的核心 主要取决于程序员的编写
6.return
返回给使用者的数据 可有可无
'''
函数的定义与调用
- 函数定义阶段只检查语法不调用
- 函数在调用阶段才会执行函数体代码
- 函数必须先定义后调用
- 调用关键字:函数名+括号
函数分类
- 空函数
- 函数体代码‘空’,搭建框架
- 无参函数
- 函数名括号内没有参数
- def index():
- print('from index function')
- def index():
- 函数名括号内没有参数
- 有参函数
- 函数名括号有参数 调用函数的时候一定要括号内填写参数
- def func(a):
- print(a)
函数的返回值
- 调用函数返回给调用者的结果
- 变量名 赋值符号 函数的调用
- res = func() # 先执行func函数 然后将返回值赋值给变量res
- return
- 函数体代码中没有return关键字 默认返回None
- 函数体代码有return 如果后面没有写任何东西还是返回None
- 函数体代码有return 后面写什么就返回什么
- 函数体代码有return并且后面有多个数据值 则自动组织成元组返回
- 函数体代码遇到return会立刻结束
函数参数
参数的定义也遵循短的简单的靠前 长的复杂的靠后
- 形式参数——函数“定义”阶段括号内填写的参数
- 位置形参——“定义阶段”括号内从左往右依次填写的变量名
- 实际参数——函数“调用”阶段括号内填写的参数
- 位置实参——“调用阶段”括号内从左往右依次填写的数据值
- 默认参数——改变的参数在前,默认参数在后
可变长参数
定义:调用函数时、传入的参数个数可以不固定
- 形参* 形参** (溢出的位置实参全部接收)
- 存储元组的形式、存储字典的形式分别赋值的变量名
- 实参* 实参** (将参数的值循环取出)
- 打散成位置实参、关键字实参
名称空间
- global 局部修改不可变全局名称
- nonlocal 局部名称内层修改外层局部名称空间中的数据值
函数名的多种用法
函数名其实绑定的也是一块内存地址,只不过该地址里面存放的不是数据值而是一段代码,函数名加()就会找到该代码并执行。
1.可以当作变量名赋值
def index(): pass
res = index
res() # 调用
2.可以当作函数的参数
def index():
print('from index')
def func(a):
print(a)
a()
func(index)
3.可以当做函数的返回值
def index():
print('from index')
def func():
print('from func')
return index
res = func()
print(res)
res()
def index():
print('from index')
def func():
print('from func')
return func
res = index()
print(res)
res()
4.可以当做容器类型(可以存放多个数据的数据类型)的数据
def register():
print('注册功能')
def login():
print('登录功能')
def withdraw():
print('提现功能')
def transfer():
print('转账功能')
def shopping():
print('购物功能')
func_dict ={
'1': register,
'2': login,
'3': withdraw,
'4': transfer,
'5': shopping
}
while True:
print("""
1.注册功能
2.登录功能
3.提现功能
4.转账功能
5.购物功能
""")
choice = input('请输入功能编号>>>:').strip() # 获取一个用户所执行的编号
if choice in func_dict: # 如果用户输入功能字典的编号
func_name = func_dict.get(choice) # 定义一个值所绑定的内存地址
func_name() # 调用
else:
print('功能编号不存在')
5.以前写法
while True:
print("""
1.注册功能
2.登录功能
3.提现功能
4.转账功能
5.购物功能
""")
choice = input('请输入功能编号>>>:').strip()
if choice == '1':
register()
elif choice == '2':
login()
elif choice == '3':
withdraw()
elif choice == '4':
transfer()
elif choice == '5':
shopping()
else:
print('可算写完了')
闭包函数
"""
定义在函数内部的函数 并且用到了外部函数名称空间中的名字
1.定义在函数内容
2.用到外部函数名称空间中的名字
"""
def index():
name = 'gaoli'
def inner():
print(name)
是另外一种给函数体代码传参的方式!!!
- 代码里面缺什么变量名形参里面就补什么变量名
def register(name,age):
print(f"""
姓名:{name}
年龄:{age}
""")
register('jason', 18)
- 闭包函数
def outer(name, age):
# name = 'jason'
# age = 18
def register():
print(f"""
姓名:{name}
年龄:{age}
""")
return register
res = outer('jason', 18)
res()
res()
res = outer('kevin', 28)
res()
res()
res()
递归函数
- 直接——直接调用
- 间接——间接调用
- 默认最大递归深度1000
- 每次调用都比上一次简单 要有一个明确的结束条件
算法
- 二分法——中间切割一分为二
迭代器、生成器、可迭代对象
inter、next
装饰器模板
- 有参
# 效验用户是否登录装饰器
def outter(mode):
def login_auth(func_name):
def inner(**args, **kwargs):
username = input('username>>>:').strip()
password = input('password>>>:').strip()
if mode =='1':
print('数据直接写死')
elif mode =='2':
print('数据来源于文本文件')
elif mode ='3':
print('数据来源于字典')
elif mode =='4':
print('数据来源于MySQL')
return inner
return login_auth
'''当装饰器中需要额外的参数时>>>:有参装饰器'''
'''
函数名加括号执行优先级最高,有参装饰器情况
先看函数名加括号的执行
然后再是语法糖的操作
'''
# @outter('1')
def index():
print('from index')
index()
# @outter('2')
def func()
print('from func')
func()
- 无参
def outer(func_name):
def inner(*args, **kwargs):
res = func_name(*args, **kwargs)
return res
return inner
@outer
def index():
pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通