py00_计算机基础知识:Python 学习的前置铺垫

在深入学习Python编程之前,理解计算机的底层原理至关重要。本文系统梳理计算机基础知识,为你的编程之旅打下坚实基础。

1. 计算机简介

  • **定义:**计算机是一种能够按照预先设定的程序,对输入的信息进行存储、处理和输出的电子设备,俗称电脑,是现代用于高速计算的电子机器。它的核心能力源于二进制逻辑和存储程序原理。
  • 核心功能:
    • 数据处理:执行算术运算(加减乘除)和逻辑运算(与或非)
      • 对各种形式的数据(文字、图像、音频等)进行计算、分析、转换等操作
      • 例如:Python中使用numpy处理数值矩阵
    • 数据存储:分层存储体系(存储速度:寄存器>缓存>内存>硬盘)
      • 通过内存、硬盘等存储介质保存信息,以便后续调用
      • 程序运行时数据需从外存加载到内存
      • 例如:Python中变量的内存分配机制
    • 数据传输:总线系统实现组件间通信(数据总线/地址总线/控制总线)
      • 在设备内部或与外部设备之间传递数据,实现信息交互
      • 例如:Python网络编程模块socket
    • 逻辑判断:通过条件分支实现决策能力(if/else结构)
      • 根据预设条件进行判断,执行不同的操作流程
      • 例如:Python中的if-else、循环等控制结构

2. 计算机的发展历程

  • 电子管时代(1946-1957 年)
    • 第一台计算机 ENIAC 诞生于 1946 年,重达 30 吨,使用 1.8 万个电子管
    • 这个时期没有“软件”概念,直接操作二进制指令
    • 特点:体积庞大、功耗高、运算速度慢(每秒几千次)、价格昂贵,主要用于军事和科研
  • 晶体管时代(1958-1964 年)
    • 用晶体管替代电子管,体积缩小、功耗降低
    • 运算速度提升至每秒几十万次,开始应用于工业控制和数据处理
    • 这个时期汇编语言出现,使用符号代替二进制,实现“人类”可读编程
  • 集成电路时代(1965-1970 年)
    • 将多个晶体管集成到芯片上,进一步缩小体积、提高性能
    • 运算速度达每秒几百万次,出现了小型计算机,开始进入商业领域
    • 高级语言萌芽(如 FORTRAN),开始脱离硬件细节,专注问题逻辑
  • 大规模 / 超大规模集成电路时代(1971 年至今)
    • 芯片集成度持续提升,出现微处理器,催生了个人计算机(PC)
    • 运算速度从每秒几千万次跃升至亿次以上,网络技术兴起,计算机进入普及阶段
    • 微处理器诞生催生个人电脑,编程语言向 “易用性” 进化(Python 正是这一趋势的典型代表)
  • 关键转折点:
    • 1971年Intel 4004微处理器问世,开启PC时代
    • 1981年IBM PC推出,确立个人计算机标准
    • 2007年iPhone发布,移动计算革命

3. 计算机的组成

  • **概述:**计算机由硬件系统和软件系统两部分组成,二者协同工作。
  • **硬件系统:**在计算机中看得见摸得着的都是硬件,硬件系统是程序运行的物理基础。
    • 主机部分:
      • 央处理器(CPU):包含运算器(负责数据算术和逻辑运算)和控制器(计算机中枢神经)
      • 内存储器:随机存储器和只读存储器,临时存储数据,断电后数据会消失
    • 外设部分:
      • 输入设备:键盘、鼠标、摄像头等
      • 输出设备:显示器、音箱、打印机等
      • 外存储器:硬盘、U盘等,永久存储数据
  • 软件系统:
    • 系统软件:操作系统、驱动程序、语言处理程序、数据库管理系统等
    • 应用软件:浏览器、文本编辑器、音视频播放器等
  • 冯·诺依曼体系:
    • 五大核心部件:输入设备、输出设备、运算器、控制器、存储器
    • 存储程序原理:指令和数据同等存储在内存中
    • 顺序执行:CPU按地址顺序执行指令(可以跳转)
    • 二进制编码:所有信息用0/1表示
      在这里插入图片描述
  • 计算机工作流程:
    • 输入设备(如键盘)接收用户指令(如运行 Python 脚本)
    • 控制器将外存(如硬盘)中的程序和数据加载到内存
    • CPU 运算器执行内存中的指令(如 Python 代码中的算术运算)
    • 输出设备(如显示器)返回结果
  • 程序执行流程:
    • 用户启动Python程序(.py文件)
    • 操作系统将程序加载到内存
    • Python解释器逐行读取源代码
    • 解释器将代码编译为字节码
    • Python虚拟机执行字节码
    • CPU执行机器指令
    • 结果返回给用户

4. 计算机的分类

  • **超级计算机:**运算速度最快(每秒亿亿次),用于气象预报、核模拟等尖端领域。
  • **大型计算机:**支持多用户同时操作,用于银行、电信等大型数据处理。
  • **小型计算机:**体积较小,适用于中小企业的业务处理。
  • **微型计算机:**即个人电脑(PC),包括台式机、笔记本、平板电脑等,普及最广。
  • **嵌入式计算机:**嵌入到其他设备中的专用计算机,如智能手表、家电控制系统。

5. 计算机的应用领域

  • **科学计算:**航天工程、量子物理等复杂问题的数值计算。
  • **信息管理:**企业 ERP 系统、医院病历管理、图书馆藏书检索。
  • **过程控制:**工业生产中的自动化控制(如生产线机器人)。
  • **人工智能:**语音识别、图像识别、自动驾驶等。
  • **娱乐与生活:**影视制作、网络游戏、在线教育、智能家居等。

6. 计算机的未来趋势

  • **智能化:**结合人工智能技术,实现更高级的自主决策和学习能力。
  • **微型化:**设备体积更小、便携性更强,如可穿戴设备。
  • **网络化:**5G、物联网技术推动设备互联,实现 “万物互联”。
  • **绿色化:**降低能耗,研发环保材料,减少对环境的影响。

7. 数据表示基础

  • 二进制系统:
    • 位(bit):最小单位,0或1
    • 字节(Byte):8位组成,存储一个ASCII字符
    • 字长:CPU一次处理的位数(64位系统处理64bit数据)
  • 数据存储原理:
    • 整数:补码表示(正数原码,负数取反加1)
    • 浮点数:IEEE 754标准(符号位+指数+尾数)
    • 文本:ASCII(英文字符)、Unicode(全球文字)
    • 图像:像素矩阵(RGB值)
  • 字符编码:
    • ASCII 码:早期编码,仅支持英文字符(1 字节,共 128 个符号)
    • Unicode:统一编码标准,支持全球语言(Python 3 字符串默认采用 Unicode,可直接处理中文)
    • UTF-8:Unicode 的可变长编码(中文占 3 字节),是网络传输和文件存储的主流格式(Python 文件通常用 UTF-8 保存)

8. 操作系统核心功能

  • 进程管理:
    • 创建/销毁Python进程
    • 进程调度算法(轮转/优先级)
    • 多线程支持(Python的GIL限制)
  • 内存管理:
    • 为Python解释器分配内存
    • 虚拟内存(交换空间)
    • 垃圾回收(Python引用计数)
  • 文件系统:
    • 层次化目录结构
    • 文件权限控制
    • Python的open()函数实现
  • 设备驱动:
    • 统一硬件访问接口
    • 即插即用支持

9. 编程语言介绍

  • **概述:**编程语言是用于人与计算机交流的 “桥梁”,它通过特定的语法规则和指令集,让开发者能够向计算机传达任务需求,实现数据处理、功能开发等目标。从简单的计算脚本到复杂的操作系统,都依赖编程语言构建。
  • **本质:**编程语言是一套标准化的符号系统和语法规则,将人类可理解的逻辑转化为计算机可执行的二进制指令(机器语言)。
  • 核心作用:
    • 实现算法:将解决问题的步骤转化为计算机能执行的代码
    • 控制硬件:通过底层语言直接操作计算机硬件(如内存、CPU)
    • 开发软件:从手机 APP 到大型企业系统,均需编程语言实现
    • 数据处理:对文本、图像、数据库等信息进行分析和转换
  • **实际应用:**例如让硬件播放音乐,需要将人类可读代码转换为机器指令。
  • 发展过程:
    在这里插入图片描述
  • 语言分类:
    • 低级语言:
      • 代表:机器语言(二进制)、汇编语言
      • 特点:直接操作硬件,执行效率极高但可读性差,开发周期长
      • 示例:实现简单功能需要大量底层代码
    • 高级语言:
      • 代表:C、Java、Python等
      • 特点:需编译/解释后执行,可读性强,开发效率高但运行效率相对较低
      • 演变:随着硬件性能提升,运行效率差距在实际应用中影响减小
  • 编译型语言和解释型语言:
    • 编译型语言:
      • 流程:整体编译→生成可执行文件→运行
      • 特点:需通过编译器将源代码一次性转换为可执行文件(如.exe),运行时无需重新编译,速度快,前期编译耗时,但运行时效率高(如Java)
    • 解释型语言
      • 流程:逐行解释→实时执行
      • 特点:由解释器逐行解析源代码并执行,无需提前编译,跨平台性好,但运行速度较慢。省去编译环节,但运行效率较低(如Python)
    • 性能差异:Python比Java慢2-5倍,但现代硬件条件下感知不明显
    • 效率瓶颈分析:
      • 科学计算场景:
        • 大型科学计算库实际调用C/C++底层库
        • 计算效率取决于C/C++而非Python本身
      • 网络服务场景:
        • 性能瓶颈主要在网络传输(响应时间1秒级)
        • 语言执行差异(0.1秒vs0.00001秒)对用户体验无显著影响

10. Python语言介绍

  • 发展背景:
    • 创始人:Guido van Rossum(龟叔)
    • 首发时间:1991年
    • 基于C语言实现
    • 初始特性:
      • 包含类、函数、异常处理等核心特性
      • 支持表和词典等数据结构
      • 采用模块化拓展系统
  • 核心优势:
    • 语法简洁易学,开源生态丰富
    • 70%以上开发场景适用
    • 支持调用C/C++等高效语言编写的底层库
  • 典型应用:
    • 数据科学、人工智能等前沿领域
    • 国家战略技术(大数据/AI)的核心工具
  • 解释器分类:
    • 概述:直接通过解释器将源代码转换为二进制指令执行,无需编译过程
    • CPython:
      • 官方解释器,使用C语言实现
      • 当前使用版本为Python 3.8
      • 开发中常用3.6+版本,主流是3.7/3.8/3.9
    • JPython:
      • Java语言实现
      • 效率低于CPython但多任务性能优化明显
    • IronPython:
      • CPython升级版
      • 提供部分交互效果
  • Python优缺点:
    • 优点
      • 简单易学:语法接近自然语言
      • 开源免费:可自由使用和修改
      • 丰富的库:特别是科学计算库
      • 跨平台:支持多种操作系统
      • 社区支持:拥有活跃开发者社区
    • 缺点
      • 执行效率:比Java慢2-5倍
      • 版本兼容:Python 2与3不兼容
      • 中文文档:新技术文档更新滞后
      • 多线程性能受限:受 GIL(全局解释器锁)影响,多线程在 CPU 密集型任务中无法真正并行
      • 移动开发支持较弱:虽然可通过 Kivy 等框架开发移动应用,但远不及 Java(Android)、Swift(iOS)主流
  • 主要应用场景:
    • Web开发(Django等框架)
    • 数据分析(Pandas等库)
    • 人工智能(TensorFlow等)
    • 自动化测试
    • 网络爬虫

结语:计算机与Python编程

理解计算机体系结构对Python程序员至关重要:

  • 性能优化:了解CPU缓存机制可提升numpy运算效率
  • 内存管理:理解引用计数避免内存泄漏
  • 并发编程:知晓GIL限制选择多进程方案
  • 系统交互:掌握文件/网络操作底层原理

“计算机科学不只是关于计算机,就像天文学不只是关于望远镜。”——艾兹格·迪杰斯特拉

当你在Python中执行print(“Hello World”)时,背后是百年计算机技术的结晶。掌握这些基础知识,将使你从代码使用者蜕变为真正的计算机艺术家。

""" ================== 接口自动化测试文件操作指南 ================== 总述:本文件系统讲解接口自动化测试(pytest)中必备的文件操作,包含: 1. 配置文件管理 2. 测试数据加载 3. 响应结果验证 4. 测试日志记录 5. 临时文件处理 """ # ================== 第一部分:配置文件管理 ================== """ 在接口自动化测试中,配置文件用于存储: - 环境URL(开发/测试/生产) - 认证信息(token/密钥) - 全局参数(超时时间/重试次数) """ # 1. JSON配置文件(推荐) import json # 示例1:读取JSON配置 with open('config.json', 'r', encoding='utf-8') as f: config = json.load(f) base_url = config['api']['test_env'] token = config['auth']['api_key'] print(f"测试环境URL: {base_url}\nAPI密钥: {token}") # 示例2:更新JSON配置 config['api']['timeout'] = 10 # 增加超时时间 with open('config.json', 'w', encoding='utf-8') as f: json.dump(config, f, indent=2) # 示例3:多环境配置切换 env = 'production' # 可设置为 test/staging/production env_config = config['api'][env] print(f"当前环境配置: {env_config}") # 2. YAML配置文件(需要pyyaml包) # pip install pyyaml import yaml # 示例:读取YAML配置 with open('config.yaml', 'r', encoding='utf-8') as f: yaml_config = yaml.safe_load(f) print(f"YAML配置: {yaml_config['database']}") # ================== 第二部分:测试数据加载 ================== """ 测试数据分离是自动化测试最佳实践: 1. 参数化测试用例 2. 数据驱动测试 3. 避免硬编码 """ # 1. CSV测试数据加载 import csv # 示例1:读取CSV测试用例 test_cases = [] with open('test_cases.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: test_cases.append(row) print("\nCSV测试数据:") for case in test_cases[:3]: # 显示前3条 print(f"接口: {case['api']}, 参数: {case['params']}") # 示例2:pytest参数化使用 # pytest测试文件中使用: # @pytest.mark.parametrize("data", test_cases) # def test_api(data): # 2. JSON测试数据加载 # 示例3:加载复杂JSON测试数据 with open('test_data.json', 'r', encoding='utf-8') as f: test_data = json.load(f) print(f"\n用户创建测试数据: {test_data['create_user']}") # ================== 第三部分:响应结果验证 ================== """ 接口测试核心:验证响应结果是否符合预期 1. 完整响应保存 2. 关键字段提取 3. 与预期结果对比 """ # 1. 响应保存与验证 # 示例1:保存完整响应 def save_api_response(response, filename): with open(filename, 'w', encoding='utf-8') as f: if isinstance(response, dict): json.dump(response, f, indent=2) else: f.write(response) print(f"响应已保存到: {filename}") # 模拟API响应 api_response = { "status": "success", "data": {"user_id": 123, "name": "张三"} } save_api_response(api_response, 'user_create_response.json') # 示例2:关键字段验证 def validate_response(response_file, expected_fields): with open(response_file, 'r', encoding='utf-8') as f: response = json.load(f) missing = [] for field in expected_fields: if field not in response.get('data', {}): missing.append(field) if missing: raise AssertionError(f"缺少字段: {missing}") print("所有关键字段验证通过") # 验证字段存在性 validate_response('user_create_response.json', ['user_id', 'name']) # 3. 文件对比断言 # 示例3:响应与预期文件对比 def assert_files_equal(file1, file2): with open(file1, 'r', encoding='utf-8') as f1, open(file2, 'r', encoding='utf-8') as f2: assert f1.read() == f2.read(), "文件内容不一致" print("文件内容完全匹配") # 创建预期文件 with open('expected_response.json', 'w', encoding='utf-8') as f: json.dump(api_response, f, indent=2) assert_files_equal('user_create_response.json', 'expected_response.json') # ================== 第四部分:测试日志记录 ================== """ 测试日志作用: 1. 追踪测试执行过程 2. 调试失败用例 3. 生成测试报告 """ import logging from datetime import datetime # 1. 基础日志配置 log_file = f"test_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" logging.basicConfig( filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) # 示例1:记录测试步骤 logging.info("=============== 测试开始 ===============") logging.info("请求登录接口: POST /api/login") logging.info("请求参数: {'username': 'testuser', 'password': '****'}") # 模拟请求 response = {"status": "success", "token": "abc123xyz"} if response['status'] == 'success': logging.info("登录成功,获取token: abc123xyz") else: logging.error("登录失败") # 示例2:异常捕获 try: # 模拟错误 result = 10 / 0 except Exception as e: logging.exception(f"发生异常: {str(e)}") # 示例3:测试结束记录 logging.info("=============== 测试结束 ===============") print(f"\n测试日志已保存到: {log_file}") # ================== 第五部分:临时文件处理 ================== """ 临时文件用于: 1. 存储中间结果 2. 下载文件验证 3. 避免污染测试环境 """ import tempfile import os # 示例1:创建临时文件 def create_temp_file(content): with tempfile.NamedTemporaryFile(mode='w+', delete=False, suffix='.tmp', encoding='utf-8') as tmp: tmp.write(content) print(f"临时文件创建: {tmp.name}") return tmp.name # 创建并使用临时文件 tmp_path = create_temp_file("临时文件内容") with open(tmp_path, 'r', encoding='utf-8') as f: print(f"临时文件内容: {f.read()}") # 示例2:模拟文件下载测试 def test_file_download(): # 创建临时文件 with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmp: # 模拟下载内容 tmp.write(b"PDF文件内容") tmp_path = tmp.name # 验证文件 assert os.path.exists(tmp_path), "文件未下载" assert os.path.getsize(tmp_path) > 0, "文件为空" # 清理 os.unlink(tmp_path) print("文件下载测试完成,已清理临时文件") # 执行测试 test_file_download() # 示例3:临时目录管理 with tempfile.TemporaryDirectory() as tmp_dir: print(f"临时目录创建: {tmp_dir}") # 在目录中创建文件 tmp_file = os.path.join(tmp_dir, 'test.tmp') with open(tmp_file, 'w') as f: f.write("临时目录中的文件") # 验证 assert os.path.exists(tmp_file) print(f"临时文件验证通过: {tmp_file}") # 退出with自动清理 # ================== 第六部分:最佳实践 ================== """ ✅ 接口测试文件操作最佳实践: 1. 配置文件管理 - 使用JSON/YAML替代INI - 区分环境配置 - 敏感信息加密 2. 测试数据管理 - 数据与代码分离 - 使用CSV/JSON存储参数化数据 - 数据生成函数化 3. 响应验证 - 保存完整响应供调试 - 关键字段断言 - 文件对比验证 4. 日志管理 - 每个用例独立日志 - 包含请求/响应详情 - 错误堆栈记录 5. 临时文件 - 自动清理机制 - 使用with管理资源 - 添加唯一标识 """ # ================== 总结 ================== """ 🎯 接口自动化测试文件操作要点: 1. 配置管理 → 环境隔离 2. 数据加载 → 参数化测试 3. 响应验证 → 文件对比 4. 日志记录 → 追踪调试 5. 临时文件 → 资源管理 📚 与pytest集成建议: 1. 使用pytest.fixture管理配置文件 @pytest.fixture(scope="session") def load_config(): with open('config.json') as f: return json.load(f) 2. 使用pytest.parametrize数据驱动 @pytest.mark.parametrize("data", test_cases) def test_api(data, load_config): 3. 使用tmp_path临时目录 def test_download(tmp_path): file = tmp_path / "test.txt" file.write_text("内容") assert file.read_text() == "内容" 4. 使用pytest-cov生成覆盖率报告 5. 使用allure-pytest生成可视化报告 """ # === 执行说明 === """ 1. 安装依赖: pip install pyyaml 2. 运行: python api_test_file_ops.py 3. 生成文件: - config.json - test_cases.csv - test_data.json - test_log_*.log - 临时文件 这是我的课件,内容不太对啊,应该从生成文件开始,不然我这个课件就没发运行,我还得去手动建一个符合代码json的文件,才能读到,重新优化下课件,保证我不用手动建文件也能运行
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值