當前位置:
首頁 > 最新 > 從 Zero到Hero,一文帶你完全掌握 Python

從 Zero到Hero,一文帶你完全掌握 Python

第一個問題,什麼是 Python ?根據 Python 之父 Guido van Rossum 的話,Python 是:

一種高級程序語言,其核心設計哲學是代碼可讀性和語法,能夠讓程序員用很少的代碼來表達自己的想法。

對於我來說,學習 Python 的首要原因是,Python 是一種可以優雅編程的語言。它能夠簡單自然地寫出代碼和實現我的想法。

另一個原因是我們可以將 Python 用在很多地方:數據科學、Web 開發和機器學習等都可以使用 Python 來開發。Quora、Pinterest 和 Spotify 都使用 Python 來進行他們的後端 Web 開發。那麼讓我們來學習一下 Python 吧。

Python 基礎

變數

你可以把變數想像成一個用來存儲值的單詞。我們看個例子。

Python 中定義一個變數並為它賦值是很容易的。假如你想存儲數字 1 到變數 「one」 ,讓我們試試看:

one = 1

超級簡單吧?你只需要把值 1 分配給變數 「one」 。

two = 2some_number = 10000

只要你想,你可以把任意的 值 賦給任何其他的 變數 。正如你從上面看到的那樣,變數 「 two 」 存儲整型變數 2 , 變數 「 some_number 」 存儲 10000 。

除了整型,我們還可以使用布爾值(True/Flase)、字元串、浮點型和其他數據類型。

# booleanstrue_boolean = Truefalse_boolean = False# stringmy_name = "Leandro Tk"# floatbook_price = 15.80

2.控制流程:條件語句

「 If 」 使用一個表達式來判斷一個語句是 True 還是 False ,如果是 True ,那麼執行 if 內的代碼,例子如下:

if True:print("Hello Python If")if 2 > 1:print("2 is greater than 1")

2 比 1 大,所以 print 代碼被執行。

當「 if 」裡面的表達式是 false 時,「 else 」 語句將會執行。

if 1 > 2:print("1 is greater than 2")else:print("1 is not greater than 2")

1 比 2 小,所以 「 else 」 裡面的代碼會執行。

你也可以使用 「 elif 」 語句:

if 1 > 2:print("1 is greater than 2")elif 2 > 1:print("1 is not greater than 2")else:print("1 is equal to 2")

3. 循環和迭代

在 Python 中,我們可以用不同的形式進行迭代。我會說下 while 和 for。

While 循環:當語句是 True 時,while 內部的代碼塊會執行。所以下面這段代碼會列印出 1 到 10 。

num = 1while num

while 循環需要 循環條件 ,如果條件一直是 True ,它將會一直迭代,當 num 的值為 11 時,循環條件為 false 。

另一段代碼可以幫你更好的理解 while 語句的用法:

loop_condition = Truewhile loop_condition:print("Loop Condition keeps: %s" %(loop_condition))loop_condition = False

循環條件是 True 所以會一直迭代,直到為 False 。

For 循環:你可以在代碼塊上應用變數 「 num 」 ,而 「for」 語句將為你迭代它。此代碼將列印與 while 中相同的代碼:從 1 到 10 。

for i in range(1, 11):print(i)

瞧見沒?這太簡單了。i 的範圍從 1 開始一直到第 11 個元素(10是第十個元素)

List:集合 | 數組 | 數據結構

假如你想要在一個變數里存儲整數 1 ,但是你也要存儲 2 和 3 , 4 , 5 ...

不是用成百上千個變數,我有別的方法存儲這些我想要存儲的整數嗎?你已經猜到了,確實有別的存儲它們的方法。

列表是一個集合,它能夠存儲一列值(就像你想要存儲的這些),那麼讓我們來用一下它:

my_integers = [1, 2, 3, 4, 5]

這真的很簡單。我們創建了一個叫做 my_integer 的數組並且把數據存到了裡面。

也許你會問:「我要怎樣獲取數組裡的值?」

問的好。列表有一個叫做索引的概念。第一個元素的下表是索引0(0)。第二個的索引是1,以此類推,你應該明白的。

為了使它更加簡潔,我們可以用它的索引代表數組元素。我畫了出來:

用 Python 的語法,也很好去理解:

my_integers = [5, 7, 1, 3, 4]print(my_integers[0]) # 5print(my_integers[1]) # 7print(my_integers[4]) # 4

假如你不想存整數。你只想去存一些字元串,像你親戚名字的列表。我的看起來是類似這樣的:

relatives_names = [ "Toshiaki", "Juliana", "Yuji", "Bruno", "Kaio"]print(relatives_names[4]) # Kaio

它的原理跟存整數一樣,很友好。

我們只學習了列表的索引是如何工作的,我還需要告訴你如何向列表的數據結構中添加一個元素(向列表中添加一個項目)。

最常用的向列表中添加新數據的方法是拼接。我們來看一下它是如何使用的:

bookshelf = []bookshelf.append("The Effective Engineer")bookshelf.append("The 4 Hour Work Week")print(bookshelf[0]) # The Effective Engineerprint(bookshelf[1]) # The 4 Hour Work W

拼接超級簡單,你僅需要把一個元素(比如「有效的機器」)作為拼接參數。

好了,關於列表的知識這些就夠了,讓我們來看一下其它的數據結構。

字典:Key-Value 數據結構

現在我們知道 List 是有索引的整型數字集合。但如果我們不像使用整型數字作為索引呢?我們可以用其他的一些數據結構,比如數字、字元串或者其他類型的索引。

讓我們學習下字典這種數據結構。字典是一個鍵值對的集合。字典差不多長這樣:

dictionary_example = {"key1": "value1","key2": "value2","key3": "value3"}

Key 是指向 value 的索引。我們如何訪問字典中的 value 呢?你應該猜到了,那就是使用 key 。 我們試一下:

dictionary_tk = {"name": "Leandro","nickname": "Tk","nationality": "Brazilian"}print("My name is %s" %(dictionary_tk["name"])) # My name is Leandroprint("But you can call me %s" %(dictionary_tk["nickname"])) # But you can call me Tkprint("And by the way I"m %s" %(dictionary_tk["nationality"])) # And by the way I"m Brazilian

我們有個 key (age) value (24),使用字元串作為 key 整型作為 value 。

我創建了一個關於我的字典,其中包含我的名字、昵稱和國籍。這些屬性是字典中的 key 。

就像我們學過的使用索引訪問 list 一樣,我們同樣使用索引(在字典中 key 就是索引)來訪問存儲在字典中的 value 。

正如我們使用 list 那樣,讓我們學習下如何向字典中添加元素。字典中主要是指向 value 的 key 。當我們添加元素的時候同樣如此:

dictionary_tk = {"name": "Leandro","nickname": "Tk","nationality": "Brazilian","age": 24}print("My name is %s" %(dictionary_tk["name"])) # My name is Leandroprint("But you can call me %s" %(dictionary_tk["nickname"])) # But you can call me Tkprint("And by the way I"m %i and %s" %(dictionary_tk["age"], dictionary_tk["nationality"])) # And by the way I"m Brazilian

我們只需要將一個字典中的一個 key 指向一個 value 。沒什麼難的,對吧?

迭代:通過數據結構進行循環

跟我們在 Python 基礎中學習的一樣,List 迭代十分簡單。我們 Python 開發者通常使用 For 循環。我們試試看:

bookshelf = ["The Effective Engineer","The 4 hours work week","Zero to One","Lean Startup","Hooked"]for book in bookshelf:print(book)

對於在書架上的每本書,我們列印( 可以做任何操作 )到控制台上。超級簡單和直觀吧。這就是 Python 的美妙之處。

對於哈希數據結構,我們同樣可以使用 for 循環,不過我們需要使用 key 來進行:

dictionary = { "some_key": "some_value" }for key in dictionary:print("%s --> %s" %(key, dictionary[key])) # some_key --> some_value

上面是如何在字典中使用 For 循環的例子。對於字典中的每個 key ,我們列印出 key 和 key 所對應的 value 。

另一種方式是使用 iteritems 方法。

dictionary = { "some_key": "some_value" }for key, value in dictionary.items():print("%s --> %s" %(key, value))# some_key --> some_value

我們命名兩個參數為 key 和 value ,但是這不是必要的。我們可以隨意命名。我們看下:

dictionary_tk = {"name": "Leandro","nickname": "Tk","nationality": "Brazilian","age": 24}for attribute, value in dictionary_tk.items():print("My %s is %s" %(attribute, value))# My name is Leandro# My nickname is Tk# My nationality is Brazilian# My age is 24

可以看到我們使用了 attribute 作為字典中 key 的參數,這與使用 key 命名具有同樣的效果。真是太棒了!

類&對象

一些理論:

對象是對現實世界實體的表示,如汽車、狗或自行車。 這些對象有兩個共同的主要特徵: 數據 和 行為 。

汽車有 數據 ,如車輪的數量,車門的數量和座位的空間,並且它們可以表現出其行為:它們可以加速,停止,顯示剩餘多少燃料,以及許多其他的事情。

我們將 數據 看作是面向對象編程中的屬性和行為。 又表示為:

數據 屬性和行為 方法

而 類 是創建單個對象的藍圖。 在現實世界中,我們經常發現許多相同類型的對象。 比如說汽車。 所有的汽車都有相同的構造和模型(都有一個引擎,輪子,門等)。每輛車都是由同一套藍圖構造成的,並具有相同的組件。

Python 面向對象編程模式:ON

Python,作為一種面向對象編程語言,存在這樣的概念: 類 和 對象 。

一個類是一個藍圖,是對象的模型。

那麼,一個類是一個模型,或者是一種定義 屬性 和 行為 的方法(正如我們在理論部分討論的那樣)。舉例來說,一個車輛 類 有它自己的 屬性 來定義這個 對象 是個什麼樣的車輛。一輛車的屬性有輪子數量,能源類型,座位容量和最大時速這些。

考慮到這一點,讓我們來看看 Python 的 類 的語法:

class Vehicle:pass

上邊的代碼,我們使用 class 語句 來定義一個類。是不是很容易?

對象是一個 類 的實例化,我們可以通過類名來進行實例化。

car = Vehicle()print(car) #

在這裡,car 是類 Vehicle 的對象(或者實例化)。

記得車輛 類 有四個 屬性 :輪子的數量,油箱類型,座位容量和最大時速。當我們新建一個車輛 對象 時要設置所有的 屬性 。所以在這裡,我們定義一個 類 在它初始化的時候接受參數:

class Vehicle:def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):self.number_of_wheels = number_of_wheelsself.type_of_tank = type_of_tankself.seating_capacity = seating_capacityself.maximum_velocity = maximum_velocity

這個 init 方法 。我們稱之為構造函數。因此當我們在創建一個車輛 對象 時,可以定義這些 屬性 。想像一下,我們喜歡 Tesla Model S ,所以我們想創建一個這種類型的 對象。 它有四個輪子,使用電能源,五座並且最大時時速是250千米(155英里)。我們開始創建這樣一個 對象 :

tesla_model_s = Vehicle(4, "electric", 5, 250)

四輪+電能源+五座+最大時速250千米。

給大家分享如何解決 Python2 和 python3 共存

Python3 被越來越多的開發者所接受,同時讓人尷尬的是很多遺留的老系統依舊運行在 Python2 的環境中,因此有時你不得不同時在兩個版本中進行開發,調試。

如何在系統中同時共存 Python2 和 Python3 是開發者不得不面對的問題,一個利好的消息是,Anaconda 能完美解決Python2 和 Python3 的共存問題,而且在 Windows 平台經常出現安裝依賴包(比如 MySQL-python)失敗的情況也得以解決。

Anaconda 是什麼?

Anaconda 是 Python 的一個發行版,如果把 Python 比作 Linux,那麼 Anancoda 就是 CentOS 或者 Ubuntu。它解決了Python開發者的兩大痛點。

第一:提供包管理,功能類似於 pip,Windows 平台安裝第三方包經常失敗的場景得以解決。

第二:提供虛擬環境管理,功能類似於 virtualenv,解決了多版本Python並存問題。

下載 Anaconda

直接在官網下載最新版本的 https://www.continuum.io/downloads 安裝包, 選擇 Python3.6 版本的安裝包,下載完成後直接安裝,安裝過程選擇默認配置即可,大約需要1.8G的磁碟空間。

conda 是 Anaconda 下用於包管理和環境管理的命令行工具,是 pip 和 vitualenv 的組合。安裝成功後 conda 會默認加入到環境變數中,因此可直接在命令行窗口運行 conda 命令

如果你熟悉 virtualenv,那麼上手 conda 非常容易,不熟悉 virtulenv 的也沒關係,它提供的命令就幾個,非常簡單。我們可以利用 conda 的虛擬環境管理功能在 Python2 和 Python3 之間自由切換。

多版本切換

# 基於 python3.6 創建一個名為test_py3 的環境conda create --name test_py3 python=3.6 # 基於 python2.7 創建一個名為test_py2 的環境conda create --name test_py2 python=2.7# 激活 test 環境activate test_py2 # windowssource activate test_py2 # linux/mac# 切換到python3activate test_py3

更多命令,可查看幫助 conda -h

包管理工具

conda 的包管理功能是對 pip 的一種補充,如果當前已經激活了某個Python環境,那麼就可以在當前環境開始安裝第三方包。

# 安裝 matplotlib conda install matplotlib# 查看已安裝的包conda list# 包更新conda update matplotlib# 刪除包conda remove matplotlib

對於那些用 pip 無法安裝成功的模塊你都可以嘗試用 conda 來安裝,如果用 conda 找不到相應的包,當然你繼續選擇 pip 來安裝包也是沒問題的。

提高下載速度

Anaconda 的鏡像地址默認在國外,用 conda 安裝包的時候會很慢,目前可用的國內鏡像源地址是清華大學提供的。修改 ~/.condarc (Linux/Mac) 或 C:Users當前用戶名.condarc (Windows) 配置

channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- defaultsshow_channel_urls: true

除此之外,你也可以把 pip 的鏡像源地址也換成國內的,豆瓣源速度比較快。修改 ~/.pip/pip.conf (Linux/Mac) 或 C:Users當前用戶名pippip.ini (Windows) 配置:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

一小時學會開發一套學員管理系統demo
Python+人工智慧的超強組合,再不學就跟不上時代啦!

TAG:Python |