天天看點

[oeasy]python0010_hello_world_unix_c曆史迷因

Hello World!

回憶上次内容

  • 我們這次設定了斷點
  • 設定斷點的目的是更快地調試
  • 調試的目的是去除 ​

    ​bug​

  • 别害怕 ​

    ​bug​

  • 一步步地總能找到 ​

    ​bug​

  • 這就是程式員基本功
  • 調試 ​

    ​debug​

  • 這個bug蟲子🕷是有曆史淵源的
  • 程式設計也是有曆史迷因的
  • 為什麼寫程式都從hello world開始?🤔

為啥總是​

​Hello World​

[oeasy]python0010_hello_world_unix_c曆史迷因

奇怪🧐

  • 不論學習什麼程式設計語言
  • 總是從​

    ​Hello World​

    ​開始
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 為什麼呢?🤔

起源

  • 這一切都要從頭說起
  • ​linux​

    ​​ 作業系統的老祖宗 ​

    ​unix​

  • 和 ​

    ​unix​

    ​​ 對應的程式設計語言 ​

    ​c​

[oeasy]python0010_hello_world_unix_c曆史迷因
  • 那是一切開始的地方

兩人

  • 1969 年,由于所在 ​

    ​at&t​

    ​​ 貝爾實驗室的 ​

    ​Multics​

    ​ 項目失敗
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 無所事事的兩人
  • ​Kenneth Thompson​

  • ​Dennis Ritchie​

[oeasy]python0010_hello_world_unix_c曆史迷因

遊戲

  • 希望能在 PDP 機器上繼續玩一個遊戲
  • 這個遊戲是 ​

    ​Multics​

    ​​ 下的 ​

    ​star travel​

[oeasy]python0010_hello_world_unix_c曆史迷因
  • 為了玩這個遊戲
  • 他們想要做一個作業系統 ​

    ​unix​

  • 為了制作作業系統
  • 他們創造了 ​

    ​c​

    ​ 語言的編譯器
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 當時
  • ​c​

    ​​ 是他們為了開發 ​

    ​unix​

    ​ 而制作的語言
  • ​unix​

    ​​ 是為了能玩 ​

    ​star travel​

    ​ 而制作的系統

hello world!

  • ​c​

    ​​ 和 ​

    ​unix​

    ​ 隻能運作在當時的機器上
  • 沒有文檔
  • 沒有書籍
  • 甚至沒有人知道
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 與他們同在 bell 實驗室的 ​

    ​Brian Wilson Kernighan​

    ​​ a.k.a ​

    ​bwk​

  • 開始寫 c 語言的類似于文檔說明書的東西

手稿

  • 主體的函數叫做 ​

    ​main​

    ​函數
  • 裡面輸出函數叫做 ​

    ​printf​

    ​函數
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 不管是​

    ​main​

    ​​函數,還是​

    ​printf​

    ​​函數都有​

    ​小括号​

  • ​小括号​

    ​ 從那個時候就和函數相關
  • 為什麼輸出字元要用​

    ​printf​

    ​來當做函數名呢?

print 來曆

  • 1974 年的手稿😱
  • 寫在打字機用紙的上面
  • 側面的空洞是向上送紙用的
  • 是不是很像膠片
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 打字機就是當時的顯示器
  • 是以用 ​

    ​print​

    ​ 來表示輸出
  • ​f​

    ​​ 的意思是 ​

    ​format​

    ​ 格式
  • ​printf​

    ​ 是按格式輸出

細節

  • ​printf函數​

    ​​ 後面有 ​

    ​小括号​

  • ​小括号​

    ​​ 裡面放的是 ​

    ​函數​

    ​​ 的 ​

    ​參數​

  • ​print("hello world")​

    ​ 中
  • ​函數print​

    ​​ 的 ​

    ​參數​

    ​​ 是 ​

    ​"hello world"​

  • ​雙引号​

    ​​ 引起來意味着​

    ​hello world​

    ​​ 是 ​

    ​字元串​

  • 輸出的内容就是這個字元串 ​

    ​("hello world")​

  • 小括号和雙引号的風格延續到了 ​

    ​python​

[oeasy]python0010_hello_world_unix_c曆史迷因
  • 從 ​

    ​c語言​

    ​ 開始
  • 最早的入門教學程式都做一個​

    ​hello world​

  • 習慣成自然之後
  • 所有的程式設計語言第一個例子都是​

    ​hello world​

  • 是一種規矩或者文化
  • 這個梗一直流傳到今天
  • 除了時間因素之外
  • 還有一個重要的原因

成書

  • 有了教材就有更多人學
  • 有更多人學就有更多人參與其中
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 正回報在逐漸成型

教材風格

  • 1978 年,​

    ​Kernighan​

    ​​和​

    ​Ritchie​

    ​出版了這本書
  • 不厚,很薄
  • 輕松的語言風格
  • 因為 ​

    ​c​

    ​ 的目的就是讓人像玩一樣程式設計
  • 而不是記憶各種 cpu 彙編指令
  • 蓬勃發展的計算機技術
  • 使得 ​

    ​c​

    ​ 語言成為系統語言的老大
  • ​python​

    ​ 的源代碼就是用純 c 編的
  • ​linux​

    ​ 核心 也是用純 c 編的
  • 是以​

    ​c​

    ​還是非常核心的啊
  • 雖說 ​

    ​python​

    ​​ 是用純 ​

    ​c​

    ​ 編寫的
  • 不過 ​

    ​python​

    ​ 一旦出現之後就可以簡化好多東西
  • 比如我們的遊樂場裡面有很多的函數和子產品
  • 我們為什麼能認識print?
  • 而不認識pront?
[oeasy]python0010_hello_world_unix_c曆史迷因

内置函數

  • dir()
  • 可以看到遊樂場上來就自帶的子產品
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 比如 dir() 這個函數
  • dir的意思是directory 文檔目錄
  • 這裡列出的是已經導入子產品的目錄
  • 調用這個函數可以知道目前遊樂場載入了哪些子產品
  • 比如 ​

    ​__builtins__​

    ​ 這個子產品
  • 這 ​

    ​__builtins__​

    ​ 裡面又有些什麼呢?

dir()

  • ​dir(__builtins__)​

  • 注意前後都是兩個下劃線
[oeasy]python0010_hello_world_unix_c曆史迷因
  • ​__builtins__​

    ​ 意思是在裡面建構好的
  • 這裡面有好多内置的函數
  • 包括我們熟悉的
  • exit()
  • print()
  • dir()
  • help()
  • 為什麼print直接就能用
  • 因為他在預設的這個​

    ​__builtins__​

    ​子產品中
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 如果我想要查詢print函數更詳細的資訊應該如何呢?

help(print)

  • 什麼不會就help什麼
  • ​help(print)​

  • 把函數名作為參數傳進去
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 類似的還可以查詢
  • help(quit)
  • help(dir)
  • help(help)
  • 如果我想要查詢__builtins__子產品更詳細的資訊應該如何呢?

​help(__builtins__)​

  • ​help(__builtins__)​

  • 注意内置子產品builtins左右各有兩個下劃線
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 我們可以查詢到​

    ​__builtins__​

    ​子產品的幫助檔案
  • 傳回的這些函數和子子產品都隸屬于 ​

    ​__builtins__​

    ​ 這個子產品
  • 除了内置的、這些不用引入就可以用的子產品之外
  • 還可以引入外部子產品

導入外部子產品

  • 就像我們上次導入ast一樣
  • 這次我們導入的是​

    ​__hello__​

  • 注意hello兩邊都有兩個下劃線
import __hello__      
  • import
  • port是港口 來自于海洋文化
  • import 是進口 是導入
  • export 是出口 是導出
  • import 後面接空格
  • 然後是被導入的外部子產品名稱 ​

    ​__hello__​

  • ​hello​

    ​左右也是兩個下劃線
  • 把​

    ​__hello__​

    ​子產品導入到遊樂場
  • 可以輸出經典的一句話
  • 注意!
  • 導入 ​

    ​__hello__​

    ​ 子產品前後遊樂場中的子產品增加了
[oeasy]python0010_hello_world_unix_c曆史迷因
  • 想要深入了解 ​

    ​__hello__​

    ​ 應該怎麼辦呢?

什麼不會就help什麼

help(__hello__)      

總結

  • ​hello world​

    ​ 不是從來就有的
  • 來自于​

    ​unix​

    ​​和​

    ​c​

  • 雖然我們今天有各種先進的學習手段
  • 最早的進階語言學習是從最早的那張打字機用紙的手寫代碼起源的
  • 輸出用的函數名是 ​

    ​print​

    ​ 列印
  • 也是從那個時候來的
  • 最早輸出的是字元串是 ​

    ​"hello world"​

  • 也是從那個時候來的
  • 這就成了一個迷因
  • 等等!
  • 計算機裡面不都是二進制的 0 和 1 嗎
  • 哪裡來的​

    ​hello​

    ​​ 中的 ​

    ​h​

    ​ 之類的
  • github->​​https://github.com/overmind1980/oeasy-python-tutorial​​
  • gitee->​​https://gitee.com/overmind1980/oeasypython​​
  • 視訊->​​https://www.bilibili.com/video/BV1CU4y1Z7gQ​​ 作者:oeasy