中年婦女Python入門指南(二)

薛老闆發表於2017-12-20

1. 閒話程式設計

什麼是程式設計,大部分程式語言有哪些特點,我想對於很多第一次接觸程式設計婦女同志來說是懵逼的,別急,且聽我一一道來。

先來看一個結構

  1. 語言層面
  • 資料型別與運算子
  • 變數
  • 順序結構
  • 選擇
  • 迴圈
  • 函式
  • 自定義型別
  • 繼承
  • 多型
  1. 系統層面
  • 多執行緒
  • I/O互動
  • GUI

以上的內容,對於初學程式設計的同志來說我覺得夠用了。從上面兩個分類可以分成語言層面和系統層面,與此同時,我們基本可以劃分兩大類書籍,

  • 一類只講語言本身
  • 另一類是用該語言與作業系統互動。

1.1 語言層面

  • 資料型別

對於從語言層面來說,首先都會講一個資料型別,什麼是資料型別,比如我們數學裡學的整數,小數(浮點數),布林型別(YES/NO)字串型別;用這些數幹什麼呢?是用來做一些運算,包括“加、減、乘、除、取餘數、判斷是非,求交、求並”等等。

  • 變數 變數拿來幹什麼?是用來儲存一個值,不好解釋,上例子。
# python
a = 3   # 把3賦值給a,a現在的值是3
b = 4   # 把4賦值給b,b現在的值是4
c = a + b # 把a + b的值賦值給c,就是c = 3 + 4,即c現在的值是7
print c # 列印c
複製程式碼

其實變數就是用來存資料的,在程式設計中的“=”不是“等號”,叫“賦值”號,真正的“等號”這麼寫“==”;

// C++
int a = 3;
bool b = true;
char *str = "hello wrold";
float c = 3.0f;
複製程式碼
# Python
a = 3
b = True
c = 0.2
d = "hello world"
複製程式碼

我們可以看到,對於C++ 來說,我們必須要先告訴編譯器,我們宣告得的變數是什麼型別,但是Python不用,直接a = 3就可以了用了,而不用int a = 3;Python的直譯器會根據你給變數賦值的型別來推匯出變數a的型別。

  • 順序、選擇、和迴圈

一段程式碼怎麼執行,是從上向下執行,如果遇到選擇就會根據條件選擇一條分叉繼續執行,如果遇到迴圈就在迴圈條件一直迴圈執行。其實只要實現了順序,選擇和迴圈,就能實現人類所有的邏輯,也就是說,你的任何想法都能實現,這個特性我們稱之為:圖靈完備。

  • 函式

函式的出現是把一些通用的功能放在一起,每次用的時候用一下,比如說,你要洗衣服,你不能每次弄一堆鐵皮,一個發電機做一個臨時的洗衣機,然後洗一次,這個洗衣機就廢了。我們需要複用,就是這次能用,下次也能用,我能用,我拿給別人也能用,正是因為有了複用的概念,所以才出現了函式,有了函式我們覺得這個粒度還是太小了,我們需要一些更大的模組,所以有了自定義型別,自定義型別裡定義了一堆堆屬性和行為,屬性就是變數,比如年齡、性別。行為就是一對函式,來描述吃喝玩樂飛簷走壁之類的。

  • 自定義型別

為什麼有自定義型別?因為目前給的型別不夠用,在C語言裡會有結構體,物件導向流行之後,我們開始說Class(類)。類其實就是自定義型別,比如人是一個自定義型別,鳥,車、馬、動物。總之現實生活中天上飛的、地上跑的,每個東西都是有型別的。

那麼沒有自定義型別可以嗎?我覺得可能可以,但是有了自定義型別以後,很多事情變得很自然,理解起來很容易,所以有了理解上的需求,所以自定義型別也應運而生。

  • 繼承 這是兩個物件導向裡的概念,什麼叫物件導向,就是萬物皆物件。繼承是什麼意思,是一種“is-a”的關係,比如說:金絲猴是一種猴,草泥馬是一種駝(羊駝)、航空母艦是一種船、流氓是一種人。這都是繼承關係,繼承了什麼呢。

比如說猴子都有尾巴,那金絲猴必定有尾巴,猴子作為金絲猴的父類或是基類,一定有猴子與生俱來的特點。而金絲猴也有一些自己的本身的特點,比如毛是金色的。

轉化成程式語言來說我們通過一個類圖來展現一下:

中年婦女Python入門指南(二)

這是一個類圖,怎麼看的,箭頭三角指的是父類、箭頭尾端的是子類。

這個例子可能也不太合理,但將就看吧,我也懶得想了。Golden Monkey是金絲猴,macaque是獼猴; 我們都知道他們都是猴,都具備猴子的特性,比如:有尾巴、有年齡,都有吃、跳、爬樹的行為,這是他們作為猴子的共性。但是他們也有個性,就是金絲猴是金色的,獼猴是灰色的。

  • 多型 有繼承才有多型,沒有繼承肯定沒有多型的概念,多型是用父類做指代,比如你說有個人在寫作業,我問你這個人是誰,你說李四,就表示李四在寫作業,你說這個人是張三,那就是張三在寫作業。

舉個例子吧

# 虛擬碼
猴子 a = create("金絲猴");
a.eat();

猴子 b = create("獼猴");
b.eat();
複製程式碼

這段程式碼什麼意思,就是有個猴子a,然後明確告訴你它是個金絲猴,那這個猴子吃,其實就是金絲猴在吃,對於b呢就是獼猴在吃。

所以說多型有什麼用,就是當我們有很多猴子吃飯,或人寫作業這種事要處理的時候,我們就可以一直用人做作業來描述,只需要換這個人和實際人之間的對映關係就好了,比如說當前這個人是張三,當前這個人是李四。

1.2 系統層面

關於系統層面,不想講的太多,怕各位女同志消化不了,簡單說說吧; 你熟悉了程式語言之後,你總想寫點好玩的東西吧,你總不能都寫一些算閏年、算最大值、求和這種無聊的程式碼,那你要怎麼才能玩出花呢?

你是不是想寫一個帶圖形介面(GUI)的程式,你是不是想寫一個能網路通訊的程式(I/O)。這都會涉及到多執行緒的概念。

  • 多執行緒 啥叫多執行緒,理解多執行緒先得知道CPU怎麼工作的,CPU是一個處理器,每隔一段時間就會處理一個任務。比如有個任務佇列:吃飯、打遊戲、喝水、聊天。

然後CPU有個叫分時的概念,就比如把一分鐘分成了60秒,第一秒:吃飯、第二秒:打遊戲、第三秒:喝水、第四秒:聊天、第五秒:吃飯、第六秒:打遊戲、第七秒:喝水、第八秒:聊天 。。。

你將看到一個什麼樣的結果:你感覺吃飯、打遊戲、喝水、聊天是同時進行的。如果把這個時間粒度從一秒縮減到一毫秒,你更加感覺這四件事是同時的。所以天下武功,唯快不破,就是快到讓你反應不過,以為是同時發生的,這就是為什麼你聊天的時候能聽歌、聽歌的時候能上網,什麼事都不耽誤。而每一個人任務我們目前粗淺的認為是在一個執行緒裡執行的,而通常程式啟動都會有第一個執行緒,我們稱之為主執行緒、對於圖形類程式來說,這個主執行緒是GUI(跟顯示有關的)執行緒,其他的執行緒我們可以稱之為:“後臺執行緒”,就是俗稱的跑在後臺的執行緒。

好了,說了這麼多的廢話,這篇文章的目的主要是讓你們在程式設計整體上建立一個概念,所有的程式語言,不管是C Java Python C# 都會有這些共性,當然想繼承裡提到的,他們也有他們自己的個性。ok,下一章,我們開始從Python的資料型別開始講起。

相關文章