[oeasy]python0010_hello_world_unix_c歷史迷因

Hello World!
回憶上次內(nèi)容
我們這次設(shè)置了斷點
調(diào)試
debug
這個bug蟲子??是有歷史淵源的
設(shè)置斷點的目的是更快地調(diào)試
調(diào)試的目的是去除
bug
別害怕
bug
一步步地總能找到
bug
這就是程序員基本功
編程也是有歷史迷因的
為什么寫程序都從hello world開始???
為啥總是Hello World

奇怪??
不論學(xué)習(xí)什么編程語言
總是從
Hello World
開始

為什么呢???
起源
這一切都要從頭說起
linux
操作系統(tǒng)的老祖宗unix
和
unix
對應(yīng)的編程語言c

那是一切開始的地方
兩人
1969 年,由于所在
at&t
貝爾實驗室的Multics
項目失敗

無所事事的兩人
Kenneth Thompson
Dennis Ritchie

游戲
希望能在 PDP 機器上繼續(xù)玩一個游戲
這個游戲是
Multics
下的star travel

為了玩這個游戲
他們想要做一個操作系統(tǒng)
unix
為了制作操作系統(tǒng)
他們創(chuàng)造了
c
語言的編譯器

當(dāng)時
c
是他們?yōu)榱碎_發(fā)unix
而制作的語言unix
是為了能玩star travel
而制作的系統(tǒng)
hello world!
c
和unix
只能運行在當(dāng)時的機器上沒有文檔
沒有書籍
甚至沒有人知道

與他們同在 bell 實驗室的
Brian Wilson Kernighan
a.k.abwk
開始寫 c 語言的類似于文檔說明書的東西
手稿
主體的函數(shù)叫做
main
函數(shù)里面輸出函數(shù)叫做
printf
函數(shù)

不管是
main
函數(shù),還是printf
函數(shù)都有小括號
小括號
從那個時候就和函數(shù)相關(guān)為什么輸出字符要用
printf
來當(dāng)做函數(shù)名呢?
print 來歷
1974 年的手稿??
寫在打字機用紙的上面
側(cè)面的空洞是向上送紙用的
是不是很像膠片

打字機就是當(dāng)時的顯示器
所以用
print
來表示輸出f
的意思是format
格式printf
是按格式輸出
細(xì)節(jié)
printf函數(shù)
后面有小括號
函數(shù)print
的參數(shù)
是"hello world"
小括號
里面放的是函數(shù)
的參數(shù)
print("hello world")
中雙引號
引起來意味著hello world
是字符串
輸出的內(nèi)容就是這個字符串
("hello world")
小括號和雙引號的風(fēng)格延續(xù)到了
python

從
c語言
開始所有的編程語言第一個例子都是
hello world
是一種規(guī)矩或者文化
最早的入門教學(xué)程序都做一個
hello world
習(xí)慣成自然之后
這個梗一直流傳到今天
除了時間因素之外
還有一個重要的原因
成書
有了教材就有更多人學(xué)
有更多人學(xué)就有更多人參與其中

正反饋在逐漸成型
教材風(fēng)格
1978 年,
Kernighan
和Ritchie
出版了這本書不厚,很薄
輕松的語言風(fēng)格
因為
c
的目的就是讓人像玩一樣編程而不是記憶各種 cpu 匯編指令
蓬勃發(fā)展的計算機技術(shù)
使得
c
語言成為系統(tǒng)語言的老大python
的源代碼就是用純 c 編的linux
內(nèi)核 也是用純 c 編的所以
c
還是非常核心的啊雖說
python
是用純c
編寫的不過
python
一旦出現(xiàn)之后就可以簡化好多東西比如我們的游樂場里面有很多的函數(shù)和模塊
我們?yōu)槭裁茨苷J(rèn)識print?
而不認(rèn)識pront?

內(nèi)置函數(shù)
dir()
可以看到游樂場上來就自帶的模塊

比如 dir() 這個函數(shù)
dir的意思是directory 文檔目錄
這里列出的是已經(jīng)導(dǎo)入模塊的目錄
調(diào)用這個函數(shù)可以知道當(dāng)前游樂場載入了哪些模塊
比如
__builtins__
這個模塊這
__builtins__
里面又有些什么呢?
dir()
dir(__builtins__)
注意前后都是兩個下劃線

__builtins__
意思是在里面構(gòu)建好的exit()
print()
dir()
help()
這里面有好多內(nèi)置的函數(shù)
包括我們熟悉的
為什么print直接就能用
因為他在默認(rèn)的這個
__builtins__
模塊中

如果我想要查詢print函數(shù)更詳細(xì)的信息應(yīng)該如何呢?
help(print)
什么不會就help什么
help(print)
把函數(shù)名作為參數(shù)傳進去

類似的還可以查詢
help(quit)
help(dir)
help(help)
如果我想要查詢__builtins__模塊更詳細(xì)的信息應(yīng)該如何呢?
help(__builtins__)
help(__builtins__)
注意內(nèi)置模塊builtins左右各有兩個下劃線

我們可以查詢到
__builtins__
模塊的幫助文件還可以引入外部模塊
返回的這些函數(shù)和子模塊都隸屬于
__builtins__
這個模塊除了內(nèi)置的、這些不用引入就可以用的模塊之外
導(dǎo)入外部模塊
就像我們上次導(dǎo)入ast一樣
這次我們導(dǎo)入的是
__hello__
注意hello兩邊都有兩個下劃線
import __hello__
import
port是港口 來自于海洋文化
import 是進口 是導(dǎo)入
export 是出口 是導(dǎo)出
import 后面接空格
然后是被導(dǎo)入的外部模塊名稱
__hello__
hello
左右也是兩個下劃線把
__hello__
模塊導(dǎo)入到游樂場可以輸出經(jīng)典的一句話
注意!
導(dǎo)入
__hello__
模塊前后游樂場中的模塊增加了

想要深入了解
__hello__
應(yīng)該怎么辦呢?
什么不會就help什么
help(__hello__)

總結(jié)
hello world
不是從來就有的來自于
unix
和c
雖然我們今天有各種先進的學(xué)習(xí)手段
最早的高級語言學(xué)習(xí)是從最早的那張打字機用紙的手寫代碼起源的
輸出用的函數(shù)名是
print
打印也是從那個時候來的
最早輸出的是字符串是
"hello world"
也是從那個時候來的
這就成了一個迷因
等等!
計算機里面不都是二進制的 0 和 1 嗎
哪里來的
hello
中的h
之類的藍(lán)橋->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