Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0311
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在:
- 个人网站: `https://oeasy.org`
- 蓝桥云课: `https://www.lanqiao.cn/courses/3584`
- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
- Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 区分概念
terminal终端- 主机网络中
- 最终的 端点
- 主机网络中
TeleTYpewriter- 电传打印机
- 终端硬件
shell- 终端硬件基础上的
- 软件壳子
- 终端硬件基础上的
Console控制台- 主机旁边 的 控制面板
- 存储文件 的 时候
- 在文件里 打了回车
\n - 系统 将
0x0a字节 存进文件 - 换行
自动就有 回车功能 了吗?🤔
- 在文件里 打了回车
- 回忆一下
- 被忽略的
\r
- 被忽略的
-
\r也是一个 ascii字符\是- 转义字符
\r是- 转义序列
-
什么是
转义呢?- 转义转义 转化含义
- 把原来 两个字符 :
\和r - 转化为
\r这样一个字符
-
没错!
\r是1个ascii字符
- 那么
\r这一个字符- 对应字节 是
多少呢?
- 对应字节 是
\r对应的字节是0x0d
- 这个
0x0d- 好像 在安徒生童话中 出现过
- 在
文本观看 模式下- 看到 回车换行
- 在
字节观看 模式下0a
0a前面是0d- 先
0a换行- (line-feed)
- 再
0d回车- (carriage-return)
- 先
- 貌似 0d0a
- 总是 成对出现的
- 为什么 呢?
换行- 对应 字节
0x0a - Line-Feed
- 水平 不动
- 垂直 向上喂纸 一行(line)
- 所以是
feed
- 对应 字节
回车- 对应 字节
0x0d - Carriage-Return
- 垂直 不动
- 水平
回到纸张左侧
- 可移动的打印头
- 运输字符 的 装置(Carriage)
- 回到行首
- 所以是
Return
- 对应 字节
- 这是
两个控制信号- 不过他俩 经常 联合使用
- 当
CR和LF联合使用时- 会将 打印纸张 上移一行
- 并且 将
回到 新行的最左侧
- 也就是
- 今天所理解 的 回车换行
- 电传打字机
- 渐渐 退出了历史舞台
- 当初的纸张 变成了 今天的显示器
- 打字机的按键 也演变为 如今的键盘
- 甚至 有了 操作系统
- 操作系统 是 如何理解
回车换行的呢?
- 操作系统 是 如何理解
- 受限于
- 内存和存储空间 的 不足
- 设计者 决定采用
单个字符 来表示 换行回车- 使用
\n替代\r\n - 默认
\n=\r\n
- 使用
一个字符干两个事
- 类unix(unix-like) 都是如此
- 包括 BSD、Linux
- 这样做 可以降低
- 存储和通信的成本
-
C语言
- 延续了 这个惯例
\n- 既干
\n的活(换行) - 又干
\r的活(回车)
- 既干
-
输出中有
\n的话
- 如果只换行(line-feed)
- 本应是
- 下图这样的
- 本应是
- 实际上是
- 下图这样的
- 是 回车加换行 的效果
- 那现在还有
- 纯换行 不回车的效果 吗?
- 纯换行效果可以用
\v
\v在ascii中的含义是VT- 垂直制表位
- 序号是 11
- 在ascii中的介绍是VT
- Vertical Tab
- 垂直制表符
- unix 这种省略的写法
- 其他操作系统 能支持吗?
- Commondore64
- 一度 也曾 很流行
- 同样出于 节省空间的目的
- 使用
\r代替\r\n
- 使用
- 这 就与unix 有
分歧了!!- 而且 Commodore64 影响了 mac
- mac
- 早期 也是
- 使用
\r代替\r\n - 甚至按键 都叫做 return
- 使用
- 早期 也是
- 后来 为了 和
unix保持一致- 从
\r修改为\n- 可能是因为
Mac用户- 需要用
ssh命令- 连接
unix-like的服务器 - 换行不统一
- 文件读取会出现错误
- 连接
- 需要用
- 可能是因为
- 从
- 流行的三大系统(类unix、mac、win)
- 两个都是 用
\n - 可以 形成规则
- 都这么省略吗?
- 两个都是 用
- 还得去看看
- 微软的windows
- 毕竟人数众多
- 键盘上 印的名称是
enter- 符号是↵
- 先 LineFeed 再 Return
- 符号是↵
- DOS系统 是兼容 CP/M 形成的
CP/M使用\r\n- 对应字节是b"\x0d\x0a"
- 后来 的
windows- 顺着
DOS的惯例 - 这就和 unix系统 不兼容了
- 顺着
- 不兼容 会发生什么问题吗?
- 修改 文件格式
- file format
- 跨系统 浏览文档的时候
- 有时候 会多行变成一行
- 还有时候 会出现
'0D','^M'之类的乱码
- 不只是 windows记事本🗒️
- 而且 微软office 等
- 都
曾有 这个困扰
- 最新windows的记事本🗒️
- 已经 优化
- 到今天
- 主流的操作系统
- 在这件事情上已经统一了
- ε=(´ο`*)))唉
-
标准 输入输出流
-
具体字符
- 显示
\n的时候- 就会换行
- LineFeed
- 显示
\r的时候- 就会退回到本行开头
- CarriageReturn
- 显示
-
python中是如何跨平台
- 实现换行自动回车 这件事情的呢?
- python3解释器 基于
操作系统操作系统基于cpu架构
- 不管什么样的
操作系统、cpu 架构- 只要是 python解释器
- 对于
\n、\r的解释方式 就是统一的\n换行\r退到行头
- 这种统一 是跨平台的
- 跨系统、跨cpu架构的
- py的源文件是如何换行的呢?
- 写下并保存这样的py文件
- py文件是纯文本文档
- :%!xxd
- 转化为字节形态
- 在编辑纯文本文件的时候
- 一个回车 就 对应一个字节b"\x0a"
- 就像所有linux下的 纯文本文件一样
- 那为什么安徒生童话里
- 就要用 两个字节 对应回车 呢?
- 安徒生童话中的换行回车
- 使用的是0d0a
- 这样今天看起来
- 有点啰嗦
- 不过 通过明确的两字符
- 就可以兼容历史上各种操作系统
- 甚至可以兼容电传打字机
- 不愧是 谷腾堡计划...
- 对于 换行和回车
- 不同层面的 理解
- 电传打字机
- 两件事
- 经常 一起干
- 但也可以 分别干
- 不同操作系统
- unix-like
- 带头简化 成
\n - 步调一致 就好
- 带头简化 成
- mac
- 为了 避免麻烦
- 我和 unix-like一致
- windows
- 原来 我用户多
- 定什么规矩 我说了算
- 惹了 很多问题
- 现在 我还是 随大流 吧
- 原来 我用户多
- unix-like
- python 解释器
unix-like做得对- 不管 在什么系统、什么架构 上
- 在我python上 是统一的
- 电传打字机
- 光说不练 假把式
- 我能看看 电传打字机 长什么样子吗?🤔
- 我们下次再看!👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。




















