Python基礎(上)
前言
正式開始Python之旅,主要學習內容專注在 爬蟲 和 人工智慧 領域,如Web開發之類將跳過不研究。
Python的意思是 蟒蛇 ,源於作者 Guido van Rossum(龜叔) 喜歡的一部電視劇。所以現在開始暫時忘掉.NET忘掉C#,using幹什麼用的?不知道....
我只記得、我要玩蛇!!!
Python基礎概述
1.優點
簡單:Python是一種代表簡單主意的語言。Python這種虛擬碼本質是它最大的優點之一,它使你能夠專注於解決問題而不是搞明白語言本身。
易學:Python極易上手,它有著極其簡單的語法,Python採用強制縮排的方式使得程式碼具有極佳的可讀性。
免費、開源:Python是FLOS(自由/開放原始碼軟體)之一。可以自由地釋出這個軟體的拷貝、閱讀它的原始碼、並改動它和閉源。
高層語言:無需關心記憶體方面的管理之類的底層細節。
跨平臺(可移植性):Python已經被移植在多個平臺,在任何平臺都可以在不修改原始碼的情況下執行Python程式。
解釋性:Python程式不需要編譯成二進位制碼,可以直接原始碼執行程式,在計算機內部,Python直譯器把原始碼轉換成位元組碼的中間形式,再把它翻譯成計算機使用的機器語言執行。
面向物件:Python既支援面向過程程式設計也支援面向物件程式設計,相比其它語言如Java和C#相比,它以一種非常強大又簡單的方式實現面向物件程式設計。
可擴充套件性:如果需要關鍵程式碼執行得更快或希望某些演算法不公開,可以把這一部分使用C或C++編寫,然後在Python程式中使用它們。
豐富的庫:Python標準庫很龐大。
2.缺點
執行速度:如果對執行速度有要求的話,用C++改寫關鍵部分。
中文資源匱乏:入門資料多,高階內容還得看英文版。
架構選擇太多:沒有像C#這樣的官方.NET企業架構,
3.應用場景
Web應用開發:一些Web框架,如 Django , TurboGears , web2py , Zope 等,可以讓程式設計師輕鬆地開發和管理複雜Web程式。
作業系統管理、伺服器運維和自動化指令碼:在很多作業系統裡,Python是標準的系統元件。大多數Linux發行版和MacOS都集成了Python,可以在終端直接執行Python。Python能夠訪問Windows的COM服務及其它Windows API。使用IroPython,Python程式可以直接呼叫.Net Frameword。
科學計算: NumPy 、 SciPy 、 Matplotlib 、 Pandas 等,可以讓Python程式設計師編寫科學計算程式。
桌面軟體:PyQt,PySide,wxPython,PyGTK可以使用Python快速開發桌面應用程式。
伺服器軟體:Python對於各種網路協議的支援非常完美,因此常被用於編寫伺服器軟體、網路爬蟲、第三方庫Twisted支援非同步網路程式設計和多數標準的網路協議,並且提供了多種工具,被廣泛用於編寫高效能的伺服器軟體。
遊戲:很多遊戲使用C++編寫圖形顯示等高效能模組,使用Python編寫遊戲的邏輯、伺服器。
註釋
1.單行註釋
以 # 開頭、 # 右邊的所有內容當作說明而非真正要執行的內容。
1 #我是單號註釋 2 print('Hello Jonins')
2.多行註釋
以 ''' (3個單引號)開始以 ''' (3個單引號)結尾,中間的內容被當作說明。(也可以用3個雙引號""")
1 ''' 2 我是多行註釋 3 ''' 4 """ 5 我是多行註釋 6 """ 7 print('Hello Jonins')
中文支援
Python3支援中文,但在 Python2中 ,程式只要包含中文, python2的直譯器不能識別 所以會報錯,所以需要在程式的最開頭輸入如下程式碼:
1 #conding=utf-8
還有一種寫法,是 python的語法規範中推薦 使用的:
1 #-*- conding:utf-8 -*-
完整的示例如下:
變數及型別
1.變數定義
python是一門 弱型別 語言,意味著不用強調變數的型別,在變數的定義前面不需要加變數的型別。
1 num1 = 10#num1在變數賦值的過程中自動賦值自己的型別 2 num2 = 20 3 total = num1+num2 4 print(total)
若想檢視變數的型別,可以使用type(變數名):
1 num1 = 10 2 num1 = '1' 3 print(type(num1))
2.變數型別
為了更充分的利用記憶體空間以及更高效的管理記憶體,變數有不同型別的,常用的資料型別如下:
識別符號和關鍵字
識別符號是我們自己定義的如:變數名、函式名等。
識別符號只能由 數字、字母和 下劃線 組成,並且數字不能在開頭 。
關鍵詞是python已經使用了的,具有特殊功能的識別符號。python不允許開發者自己定義和關鍵詞相同名字的識別符號。可以通過程式碼檢視python具有哪些關鍵詞:
import keyword keys = keyword.kwlist; print(keys)
大致有如下這些:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
輸入(input)
1.Python2中輸入
在 python2 中,獲取鍵盤輸入的資料的方式採用 raw-input() 函式,示例如下:
name=raw_input("請輸入姓名:") print(name)
說明:
raw-input() 的小括號中放入的是,提示資訊,用來在獲取資料之前給使用者一個提示。
raw-input() 在從鍵盤獲取到資料以後,會將資料存放到等號右邊的變數中。
raw-input() 會把使用者輸入的 任何值都作為字串 來儲存。
而 python2 中的 input() 函式於 raw_input() 類似,但其接受的輸入必須是表示式(切換 python2 的互動視窗進行驗證)如下所示:
1 >>> num=input() 2 123#輸入123自動識別為int 3 4 >>> num 5 123 6 >>> type(num) 7 <type 'int'> 8 >>> str=input() 9 'jonins'#輸入"或'自動識別為string 10 11 >>> str 12 'jonins' 13 >>> type(str) 14 <type 'str'> 15 >>> num=input() 16 1+2+3#同類型可以相加 17 18 >>> num 19 6 20 >>> str=input() 21 '1010'+'jonsin'#string同類型則會拼接 22 23 >>> str 24 '1010jonsin' 25 >>>
2.Python3中輸入
在 python3 中沒有 raw_input() 函式,只有 input() , 並且 python3 中的 input() 功能與 python2 中的 raw_inpu() 功能一樣。
輸出(print)
1.普通輸出
1 print('hello jonins') 2 age=18 3 print(age)
2.格式化輸出
在程式中若想在輸出中給變數佔位需要使用 % 號格式化輸出,如下所示
1 age=18 2 print('年齡是:%d已成年!'%age) 3 name='jonins' 4 print('姓名%s,年齡%d歲.'%(name,age))
在程式,看到 % 這樣的操作符, 就是python的格式化輸出 。
3.常用的格式符號
下面是完整的,可以與 % 符號配合使用的列表:
格式符號 | 轉換 |
%c | 字元 |
%s | 通過str()字串轉換來的格式化 |
%i | 有符號十進位制整數 |
%d | 有符號十進位制整數 |
%u | 無符號十進位制整數 |
%o | 八進位制整數 |
%x | 十六進位制整數(小寫字母) |
%X | 十六進位制整數(大寫字母) |
%e | 索引符號(小寫e) |
%E | 索引符號(大寫E) |
%f | 浮點實數 |
%g | %f和%e的簡寫 |
%G | %f和%E的簡寫 |
4.換行輸出
在輸出的時候,如果有 \n 那麼,此時 \n 後的內容會在另外一行顯示
1 print('姓名jonins\n年齡18歲')
運算子
1.算術運算子
注意 :當算術的運算兩個物件不是同類型,也是可以計算的,結果會跟隨型別較大的物件。如:9/3.0 =3.0
2.賦值運算子
運算子 = ,為 賦值 運算子,作用是把等號右邊的結果給左邊的變數,示例如下:
1 a,b=1,3 2 print(a+b) 3 c,d=2.0,'jonins' 4 print(c) 5 print(d)
3.複合賦值運算子
運算子 | 描述 | 示例 |
+= | 加法賦值 | a+=b等效於a=a+b |
-= | 減法賦值 | a-=b等效於a=a-b |
*= | 乘法賦值 | a*=b等效於a=a*b |
/= | 除法賦值 | a/=b等效於a=a/b |
//= | 取整除賦值 | a//=b等效於a=a//b |
%= | 取餘賦值 | a%=b等效於a=a%b |
**= | 冪計算賦值 | a**=b等效於a=a**b |
資料型別轉換
示例
1 str='3' 2 num=float(str) 3 print(num)
判斷語句(if&elif)
1.if-else語句
if-else 的使用格式:
1 if 條件: 2滿足條件時要做的事情1 3滿足條件時要做的事情2 4滿足條件時要做的事情3 5滿足條件時要做的事情4 6...(省略)... 7 else: 8不滿足條件時要做的事情1 9不滿足條件時要做的事情2 10不滿足條件時要做的事情3 11不滿足條件時要做的事情4 12...(省略)...
示例如下:
1 age=18 2 print('--------if判斷開始----------') 3 if age>=18: 4print('已成年') 5print('年齡是%i'%age) 6 else: 7print('未成年') 8print('年齡是%i'%age) 9 print('--------if判斷結束----------')
注意: 程式碼的縮排為一個tab鍵,或者4個空格 。直譯器會將縮排的語句判定為滿足條件時執行的程式碼。對應的C#程式碼如下所示:
1int age = 18; 2Console.WriteLine("--------if判斷開始----------"); 3if (age >= 18) 4{ 5Console.WriteLine("已成年"); 6Console.WriteLine($"年齡是{age}"); 7} 8else 9{ 10Console.WriteLine("未成年"); 11Console.WriteLine($"年齡是{age}"); 12} 13Console.WriteLine("--------if判斷結束----------"); 14Console.ReadKey(); C# Code
2.elif語句
elif 的使用格式如下:
1 if 條件1: 2滿足條件1時要做的事情1 3滿足條件1時要做的事情2 4滿足條件1時要做的事情3 5滿足條件1時要做的事情4 6...(省略)... 7 elif 條件2: 8滿足條件2時要做的事情1 9滿足條件2時要做的事情2 10滿足條件2時要做的事情3 11滿足條件2時要做的事情4 12...(省略)... 13 else: 14不滿足上述所有條件時要做的事情1 15不滿足上述所有條件時要做的事情2 16不滿足上述所有條件時要做的事情3 17不滿足上述所有條件時要做的事情4 18...(省略)...
示例如下:
1 age=18 2 print('--------if判斷開始----------') 3 if age==16: 4print('已年滿16歲') 5 elif age==18: 6print('已成年') 7print('年齡是%i'%age) 8 else: 9print('未成年') 10print('年齡是%i'%age) 11 print('--------if判斷結束----------')
elif 語句一定要配合 if 使用,可以有 else 也可以沒有, elif 的條件不限制,對應的C#程式碼如下所示:
1int age = 18; 2Console.WriteLine("--------if判斷開始----------"); 3 4if (age == 16) 5Console.WriteLine("已年滿16歲"); 6else if (age == 18) 7{ 8Console.WriteLine("已成年"); 9Console.WriteLine($"年齡是{age}"); 10} 11else 12{ 13Console.WriteLine("未成年"); 14Console.WriteLine($"年齡是{age}"); 15} 16Console.WriteLine("--------if判斷結束----------"); 17Console.ReadKey(); C# Code
3.if巢狀
if巢狀的格式大致如下:
1 if 條件1: 2滿足條件1時要做的事情1 3滿足條件1時要做的事情2 4...(省略)... 5if 條件2: 6滿足條件2時要做的事情1 7滿足條件2時要做的事情2 8滿足條件2時要做的事情3 9滿足條件2時要做的事情4 10..(省略)...
注意:
外層的if判斷,也可以是if-else
內層的If判斷,也可以是if-else
比較&關係運算符
1.比較運算子
2.邏輯運算子
迴圈語句(while)
1.while語句
while 迴圈的格式如下:
1 while 條件: 2滿足條件時,做事情1 3滿足條件時,做事情2 4滿足條件時,做事情3 5...(省略)...
示例如下:
1 i=1 2 sum=0 3 while i<=100: 4sum+=i 5i+=1 6 print("1-100的累積和為:%i"%sum)
2.迴圈巢狀
1 while 條件: 2滿足條件時,做事情1 3滿足條件時,做事情2 4滿足條件時,做事情3 5...(省略)... 6while 條件: 7滿足條件時,做事情1 8滿足條件時,做事情2 9滿足條件時,做事情3 10...(省略)...
示例如下:
1 i=1 2 while i<=5: 3j=1 4while j<=i: 5print("* ",end=" ") 6j+=1 7print("\n") 8i+=1
迴圈語句(for)
在 python 中 for 迴圈可以遍歷任何序列的專案,如一個列表或者一個字串
1 for 臨時變數 in 列表或者字串等: 2滿足迴圈條件時執行的程式碼 3 else: 4滿足不迴圈條件時執行的程式碼
示例如下:
1 name='jonins' 2 for x in name: 3print(x) 4 else: 5print('遍歷完成')
break&continue
break 的作用:用來結束整個迴圈。
continue 的作用:用來結束本次迴圈,緊接著執行下一次的迴圈。
示例如下:
1 name='jonins.com' 2 for x in name: 3if(x=='o'): 4continue; 5if(x=='.'): 6break; 7print(x)
注意:
break / continue 只能用在迴圈中,除此以外不能單獨使用。
break / continue 在巢狀迴圈中,只對最近的一層迴圈起作用。