[oeasy]python0010_hello_world_unix_c历史迷因
Hello World!
回忆上次内容
- 我们这次设置了断点
- 设置断点的目的是更快地调试
- 调试的目的是去除
bug - 别害怕
bug - 一步步地总能找到
bug - 这就是程序员基本功
- 调试
debug - 这个bug虫子是有历史渊源的
- 编程也是有历史迷因的
- 为什么写程序都从hello world开始?
为啥总是Hello World
编辑
奇怪
- 不论学习什么编程语言
- 总是从
Hello World开始
编辑
- 为什么呢?
起源
- 这一切都要从头说起
-
linux 操作系统的老祖宗 unix - 和
unix 对应的编程语言 c
编辑
- 那是一切开始的地方
两人
- 1969 年,由于所在
at&t 贝尔实验室的 Multics 项目失败
编辑
- 无所事事的两人
-
Kenneth Thompson -
Dennis Ritchie
编辑
游戏
- 希望能在 PDP 机器上继续玩一个游戏
- 这个游戏是
Multics 下的 star travel
编辑
- 为了玩这个游戏
- 他们想要做一个操作系统
unix
- 为了制作操作系统
- 他们创造了
c 语言的编译器
编辑
- 当时
-
c 是他们为了开发 unix 而制作的语言 -
unix 是为了能玩 star travel 而制作的系统
hello world!
c 和 unix 只能运行在当时的机器上
- 没有文档
- 没有书籍
- 甚至没有人知道
编辑
- 与他们同在 bell 实验室的
Brian Wilson Kernighan a.k.a bwk
- 开始写 c 语言的类似于文档说明书的东西
手稿
- 主体的函数叫做
main函数
- 里面输出函数叫做
printf函数
编辑
- 不管是
main函数,还是printf函数都有小括号
-
小括号 从那个时候就和函数相关
- 为什么输出字符要用
printf来当做函数名呢?
print 来历
- 1974 年的手稿
- 写在打字机用纸的上面
- 侧面的空洞是向上送纸用的
- 是不是很像胶片
编辑
- 打字机就是当时的显示器
- 所以用
print 来表示输出 -
f 的意思是 format 格式 -
printf 是按格式输出
细节
printf函数 后面有 小括号
-
小括号 里面放的是 函数 的 参数 print("hello world") 中
-
函数print 的 参数 是 "hello world"
双引号 引起来意味着hello world 是 字符串
- 输出的内容就是这个字符串
("hello world")
- 小括号和双引号的风格延续到了
python
编辑
- 从
c语言 开始
- 最早的入门教学程序都做一个
hello world - 习惯成自然之后
- 所有的编程语言第一个例子都是
hello world - 是一种规矩或者文化
- 这个梗一直流传到今天
- 除了时间因素之外
- 还有一个重要的原因
成书
- 有了教材就有更多人学
- 有更多人学就有更多人参与其中
编辑
- 正反馈在逐渐成型
教材风格
- 1978 年,
Kernighan和Ritchie出版了这本书
- 不厚,很薄
- 轻松的语言风格
- 因为
c 的目的就是让人像玩一样编程 - 而不是记忆各种 cpu 汇编指令
- 蓬勃发展的计算机技术
- 使得
c 语言成为系统语言的老大 -
python 的源代码就是用纯 c 编的 -
linux 内核 也是用纯 c 编的 - 所以
c还是非常核心的啊
- 虽说
python 是用纯 c 编写的
- 不过
python 一旦出现之后就可以简化好多东西 - 比如我们的游乐场里面有很多的函数和模块
- 我们为什么能认识print?
- 而不认识pront?
编辑
内置函数
- dir()
- 可以看到游乐场上来就自带的模块
编辑
- 比如 dir() 这个函数
- dir的意思是directory 文档目录
- 这里列出的是已经导入模块的目录
- 调用这个函数可以知道当前游乐场载入了哪些模块
- 比如
__builtins__ 这个模块 - 这
__builtins__ 里面又有些什么呢?
dir()
dir(__builtins__)
- 注意前后都是两个下划线
编辑
__builtins__ 意思是在里面构建好的
- 这里面有好多内置的函数
- 包括我们熟悉的
- exit()
- print()
- dir()
- help()
- 为什么print直接就能用
- 因为他在默认的这个
__builtins__模块中
编辑
- 如果我想要查询print函数更详细的信息应该如何呢?
help(print)
- 什么不会就help什么
-
help(print) - 把函数名作为参数传进去
编辑
- 类似的还可以查询
- help(quit)
- help(dir)
- help(help)
- 如果我想要查询__builtins__模块更详细的信息应该如何呢?
help(__builtins__)
help(__builtins__)
- 注意内置模块builtins左右各有两个下划线
编辑
- 我们可以查询到
__builtins__模块的帮助文件
- 返回的这些函数和子模块都隶属于
__builtins__ 这个模块 - 除了内置的、这些不用引入就可以用的模块之外
- 还可以引入外部模块
导入外部模块
- 就像我们上次导入ast一样
- 这次我们导入的是
__hello__ - 注意hello两边都有两个下划线
import __hello__
- import
- port是港口 来自于海洋文化
- import 是进口 是导入
- export 是出口 是导出
- import 后面接空格
- 然后是被导入的外部模块名称
__hello__ -
hello左右也是两个下划线
- 把
__hello__模块导入到游乐场
- 可以输出经典的一句话
- 注意!
- 导入
__hello__ 模块前后游乐场中的模块增加了
正在上传…重新上传取消
- 想要深入了解
__hello__ 应该怎么办呢?
什么不会就help什么
help(__hello__)
编辑
总结
hello world 不是从来就有的
- 来自于
unix和c - 虽然我们今天有各种先进的学习手段
- 最早的高级语言学习是从最早的那张打字机用纸的手写代码起源的
- 输出用的函数名是
print 打印
- 也是从那个时候来的
- 最早输出的是字符串是
"hello world"
- 也是从那个时候来的
- 这就成了一个迷因
- 等等!
- 计算机里面不都是二进制的 0 和 1 吗
- 哪里来的
hello 中的 h 之类的
- 蓝桥->https://www.lanqiao.cn/teacher/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy
[oeasy]python0010_hello_world_unix_c历史迷因的更多相关文章
- 【u243】拓扑排序
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一些历史迷们打算把历史上的一些大事件按时间顺序列出来.但是,由于资料不全,每个事件发生的具体时间都没有 ...
- [计算机、网络相关历史]unix简史
本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...
- paip.提升效率--僵尸代码的迷思
paip.提升效率--僵尸代码的迷思 僵尸代码是指你的代码库里被注释掉的那部分代码, 很少去使用它,就像僵尸一样, 看雷kill-the-zombies-in-your-code ========== ...
- BZOJ4241 历史研究
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- 前端迷思与React.js
前端迷思与React.js 前端技术这几年蓬勃发展, 这是当时某几个项目需要做前端技术选型时, 相关资料整理, 部分评论引用自社区. 开始吧: 目前, Web 开发技术框架选型为两种的占 80% .这 ...
- 【历史】- UNIX发展史(BSD,GNU,linux)
先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...
- Java历史[史上最详细的阐述了Java发展的历史过程]
Java历史 学习Java语言之前,我觉得大家应该是从头开始,对吧?不管你之前是学过还是没学过,都和学习某一个知识一样,从头开始去了解它,然后到这个深入的掌握,到最后你可能理解并且灵活的运用.所以它肯 ...
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- MySQL发展历史
MySQL(发音为"my ess cue el")是一种关系型数据库管理系统, MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Su ...
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
随机推荐
- [NOIP2001 提高组] 数的划分
个人博客传送锚点:https://www.acwing.com/blog/content/55495/ 传送锚点:https://www.luogu.com.cn/problem/P1025 题目描述 ...
- Swoole 源码分析之 epoll 多路复用模块
首发原文链接:Swoole 源码分析之 Http Server 模块 大家好,我是码农先森. 引言 在传统的IO模型中,每个IO操作都需要创建一个单独的线程或进程来处理,这样的操作会导致系统资源的大量 ...
- Django——前后端分离出现同源策略的解决方式
浏览器控制台报错:"Access-Control-Allow-Origin" 解决方式:在Django服务端解决 1.安装django-cors-headers(可能需要先更新pi ...
- golang 怎样防止结构体对象被拷贝
主要实现Lock以及Unlock就可以了 此时使用go vet mian.go 检查就会提示我们./main1.go:25:7: assignment copies lock value to b: ...
- 基于pulp的线性优化问题:微电网日前优化调度(复现)
摘录来源:(71条消息) 微电网日前优化调度入门:求解一道数学建模题_我不是玉的博客-CSDN博客 学习记录与复现 问题描述 问题出自第十届"中国电机工程学会杯"全国大学生电工数学 ...
- kubernetes的三种探针startupprobe,ReadinessProbe,LivenessProbe记录
kubernetes的三种探针 startupprobe: k8s1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动,如果配置了startuprobe,就会先禁用其他的探测,直到它成功为 ...
- nginx日志缓存open_log_file_cache
nginx日志缓存,提升磁盘性能 将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 语法: access_log path access_log ...
- Nacos 源码环境搭建
最近在学习nacos,通过调式源码查看服务注册和发现流程和原理,本地部署naos源码需要一定的步骤,本文主要做nacos源码部署. nacos版本:2.1.1 下载源码 从github上下载源码到本地 ...
- Lru在Rust中的实现, 源码解析
LRU(Least Recently Used)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰. LRU算法原理 基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间 ...
- JsonPath - 根据表达式路径解析Json
JsonPath 在xml的使用过程中,对于xml的解析我们知道可以使用xpath的方式,随意的获取到我们想要的属性值.那么在使用json时,我们能不能实现同样的操作呢? 答案就是 json-path ...