Python从入门到入土
Python從入門到入土
簡介
Python 是一種通用編程語言,其在科學計算和機器學習領域具有廣泛的應用。如果我們打算利用 Python 來執行機器學習,那么對 Python 有一些基本的了解就是至關重要的。本 Python 入門系列體驗就是為這樣的初學者精心準備的。
1 變量、運算符與數據類型
1. 注釋
在 Python 中,# 表示注釋,作用于整行。
【例子】單行注釋
‘’’ ‘’’ 或者 “”" “”" 表示區間注釋,在三引號之間的所有內容被注釋
【例子】多行注釋
2. 運算符
| + | 加 | 1 + 1 |
| - | 減 | 2 - 1 |
| * | 乘 | 3 * 4 |
| / | 除 | 3 / 4 |
| // | 整除(地板除) | 3 // 4 |
| % | 取余 | 3 % 4 |
| ** | 冪 | 2 ** 3 |
【例子】
print(1 + 1) # 2 print(2 - 1) # 1 print(3 * 4) # 12 print(3 / 4) # 0.75 print(3 // 4) # 0 print(3 % 4) # 3 print(2 ** 3) # 83. 變量和賦值
4. 數據類型與轉換
| int | 整型 <class ‘int’> | -876, 10 |
| float | 浮點型<class ‘float’> | 3.149, 11.11 |
| bool | 布爾型<class ‘bool’> | True, False |
整型
【例子】通過 print() 可看出 a 的值,以及類 (class) 是int。
a = 1031print(a, type(a))# 1031 <class 'int'>Python 里面萬物皆對象(object),整型也不例外,只要是對象,就有相應的屬性 (attributes) 和方法(methods)。
【例子】
b = dir(int) print(b)# ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', # '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', # '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', # '__getattribute__', '__getnewargs__', '__gt__', '__hash__', # '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', # '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', # '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', # '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', # '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', # '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', # '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', # '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', # 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', # 'numerator', 'real', 'to_bytes']對它們有個大概印象就可以了,具體怎么用,需要哪些參數 (argument),還需要查文檔。看個bit_length()的例子。
【例子】找到一個整數的二進制表示,再返回其長度。
a = 1031 print(bin(a)) # 0b10000000111 print(a.bit_length()) # 11浮點型
【例子】
print(1, type(1)) # 1 <class 'int'>print(1., type(1.)) # 1.0 <class 'float'>a = 0.00000023 b = 2.3e-7 print(a) # 2.3e-07 print(b) # 2.3e-07有時候我們想保留浮點型的小數點后 n 位。可以用 decimal 包里的 Decimal 對象和 getcontext() 方法來實現。
import decimal from decimal import DecimalPython 里面有很多用途廣泛的包 (package),用什么你就引進 (import) 什么。包也是對象,也可以用上面提到的dir(decimal) 來看其屬性和方法。
【例子】getcontext() 顯示了 Decimal 對象的默認精度值是 28 位 (prec=28)。
a = decimal.getcontext() print(a)# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, # capitals=1, clamp=0, flags=[], # traps=[InvalidOperation, DivisionByZero, Overflow])b = Decimal(1) / Decimal(3) print(b)# 0.3333333333333333333333333333【例子】使 1/3 保留 4 位,用 getcontext().prec 來調整精度。
decimal.getcontext().prec = 4 c = Decimal(1) / Decimal(3) print(c)# 0.3333布爾型
布爾 (boolean) 型變量只能取兩個值,True 和 False。當把布爾型變量用在數字運算中,用 1 和 0 代表 True 和 False。
【例子】
print(True + True) # 2 print(True + False) # 1 print(True * False) # 0除了直接給變量賦值 True 和 False,還可以用 bool(X) 來創建變量,其中 X 可以是
- 基本類型:整型、浮點型、布爾型
- 容器類型:字符串、元組、列表、字典和集合
【例子】bool 作用在基本類型變量:X 只要不是整型 0、浮點型 0.0,bool(X) 就是 True,其余就是 False。
print(type(0), bool(0), bool(1)) # <class 'int'> False Trueprint(type(10.31), bool(0.00), bool(10.31)) # <class 'float'> False Trueprint(type(True), bool(False), bool(True)) # <class 'bool'> False True【例子】bool 作用在容器類型變量:X 只要不是空的變量,bool(X) 就是 True,其余就是 False。
print(type(''), bool(''), bool('python')) # <class 'str'> False Trueprint(type(()), bool(()), bool((10,))) # <class 'tuple'> False Trueprint(type([]), bool([]), bool([1, 2])) # <class 'list'> False Trueprint(type({}), bool({}), bool({'a': 1, 'b': 2})) # <class 'dict'> False Trueprint(type(set()), bool(set()), bool({1, 2})) # <class 'set'> False True確定bool(X) 的值是 True 還是 False,就看 X 是不是空,空的話就是 False,不空的話就是 True。
- 對于數值變量,0, 0.0 都可認為是空的。
- 對于容器變量,里面沒元素就是空的。
獲取類型信息
- 獲取類型信息 type(object)
【例子】
print(isinstance(1, int)) # True print(isinstance(5.2, float)) # True print(isinstance(True, bool)) # True print(isinstance('5.2', str)) # True注:
- type() 不會認為子類是一種父類類型,不考慮繼承關系。
- isinstance() 會認為子類是一種父類類型,考慮繼承關系。
如果要判斷兩個類型是否相同推薦使用 isinstance()。
類型轉換
- 轉換為整型 int(x, base=10)
- 轉換為字符串 str(object=‘’)
- 轉換為浮點型 float(x)
【例子】
print(int('520')) # 520 print(int(520.52)) # 520 print(float('520.52')) # 520.52 print(float(520)) # 520.0 print(str(10 + 10)) # 20 print(str(10.1 + 5.2)) # 15.35. print()函數
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)- 將對象以字符串表示的方式格式化輸出到流文件對象file里。其中所有非關鍵字參數都按str()方式進行轉換為字符串輸出;
- 關鍵字參數sep是實現分隔符,比如多個參數輸出時想要輸出中間的分隔字符;
- 關鍵字參數end是輸出結束時的字符,默認是換行符\n;
- 關鍵字參數file是定義流輸出的文件,可以是標準的系統輸出sys.stdout,也可以重定義為別的文件;
- 關鍵字參數flush是立即把內容輸出到流文件,不作緩存。
【例子】沒有參數時,每次輸出后都會換行。
shoplist = ['apple', 'mango', 'carrot', 'banana'] print("This is printed without 'end'and 'sep'.") for item in shoplist:print(item)# This is printed without 'end'and 'sep'. # apple # mango # carrot # banana【例子】每次輸出結束都用end設置的參數&結尾,并沒有默認換行。
shoplist = ['apple', 'mango', 'carrot', 'banana'] print("This is printed with 'end='&''.") for item in shoplist:print(item, end='&') print('hello world')# This is printed with 'end='&''. # apple&mango&carrot&banana&hello world【例子】item值與’another string’兩個值之間用sep設置的參數&分割。由于end參數沒有設置,因此默認是輸出解釋后換行,即end參數的默認值為\n。
shoplist = ['apple', 'mango', 'carrot', 'banana'] print("This is printed with 'sep='&''.") for item in shoplist:print(item, 'another string', sep='&')# This is printed with 'sep='&''. # apple&another string # mango&another string # carrot&another string # banana&another string2 位運算
1. 原碼、反碼和補碼
二進制有三種不同的表示形式:原碼、反碼和補碼,計算機內部使用補碼來表示。
原碼:就是其二進制表示(注意,有一位符號位)。
00 00 00 11 -> 3
10 00 00 11 -> -3
反碼:正數的反碼就是原碼,負數的反碼是符號位不變,其余位取反(對應正數按位取反)。
00 00 00 11 -> 3
11 11 11 00 -> -3
補碼:正數的補碼就是原碼,負數的補碼是反碼+1。
00 00 00 11 -> 3
11 11 11 01 -> -3
符號位:最高位為符號位,0表示正數,1表示負數。在位運算中符號位也參與運算。
2. 按位運算
- 按位非操作 ~
~ 把num的補碼中的 0 和 1 全部取反(0 變為 1,1 變為 0)有符號整數的符號位在 ~ 運算中同樣會取反。
00 00 01 01 -> 5 ~ ———————————————— 11 11 10 10 -> -611 11 10 11 -> -5 ~ ———————————————— 00 00 01 00 -> 4- 按位與操作 &
只有兩個對應位都為 1 時才為 1
00 00 01 01 -> 5 & 00 00 01 10 -> 6 ———————————————— 00 00 01 00 -> 4- 按位或操作 |
只要兩個對應位中有一個 1 時就為 1
00 00 01 01 -> 5 | 00 00 01 10 -> 6 ———————————————— 00 00 01 11 -> 7- 按位異或操作 ^
只有兩個對應位不同時才為 1
00 00 01 01 -> 5 ^ 00 00 01 10 -> 6 ———————————————— 00 00 00 11 -> 3異或操作的性質:滿足交換律和結合律
A: 00 00 11 00 B: 00 00 01 11A^B: 00 00 10 11 B^A: 00 00 10 11A^A: 00 00 00 00 A^0: 00 00 11 00A^B^A: = A^A^B = B = 00 00 01 11- 按位左移操作 <<
num << i 將num的二進制表示向左移動i位所得的值。
00 00 10 11 -> 11 11 << 3 ———————————————— 01 01 10 00 -> 88- 按位右移操作 >>
num >> i 將num的二進制表示向右移動i位所得的值。
00 00 10 11 -> 11 11 >> 2 ———————————————— 00 00 00 10 -> 23. 利用位運算實現快速計算
通過 <<,>> 快速計算2的倍數問題。
n << 1 -> 計算 n*2 n >> 1 -> 計算 n/2,負奇數的運算不可用 n << m -> 計算 n*(2^m),即乘以 2 的 m 次方 n >> m -> 計算 n/(2^m),即除以 2 的 m 次方 1 << n -> 2^n通過 ^ 快速交換兩個整數。 通過 ^ 快速交換兩個整數。
a ^= b b ^= a a ^= b通過 a & (-a) 快速獲取a的最后為 1 位置的整數。
00 00 01 01 -> 5 & 11 11 10 11 -> -5 ———————————————— 00 00 00 01 -> 100 00 11 10 -> 14 & 11 11 00 10 -> -14 ———————————————— 00 00 00 10 -> 24. 利用位運算實現整數集合
一個數的二進制表示可以看作是一個集合(0 表示不在集合中,1 表示在集合中)。
比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10 而對應的位運算也就可以看作是對集合進行的操作。
元素與集合的操作:
a | (1<<i) -> 把 i 插入到集合中 a & ~(1<<i) -> 把 i 從集合中刪除 a & (1<<i) -> 判斷 i 是否屬于該集合(零不屬于,非零屬于)集合之間的操作:
a 補 -> ~a a 交 b -> a & b a 并 b -> a | b a 差 b -> a & (~b)注意:整數在內存中是以補碼的形式存在的,輸出自然也是按照補碼輸出。
【例子】 Python 的bin() 輸出。
是不是很顛覆認知,我們從結果可以看出:
- Python中bin一個負數(十進制表示),輸出的是它的原碼的二進制表示加上個負號,巨坑。
- Python中的整型是補碼形式存儲的。
- Python中整型是不限制長度的不會超范圍溢出。
所以為了獲得負數(十進制表示)的補碼,需要手動將其和十六進制數0xffffffff進行按位與操作,再交給bin()進行輸出,得到的才是負數的補碼表示。
3 條件語句
1. if 語句
if expression:expr_true_suiteif 語句的 expr_true_suite 代碼塊只有當條件表達式 expression 結果為真時才執行,否則將繼續執行緊跟在該代碼塊后面的語句。
單個 if 語句中的 expression 條件表達式可以通過布爾操作符 and,or和not 實現多重條件判斷。
【例子】
2. if - else 語句
if expression:expr_true_suite else:expr_false_suitePython 提供與 if 搭配使用的 else,如果 if 語句的條件表達式結果布爾值為假,那么程序將執行 else 語句后的代碼。
【例子】
if語句支持嵌套,即在一個if語句中嵌入另一個if語句,從而構成不同層次的選擇結構。
【例子】Python 使用縮進而不是大括號來標記代碼塊邊界,因此要特別注意else的懸掛問題。
hi = 6 if hi > 2:if hi > 7:print('好棒!好棒!') else:print('切~')# 無輸出【例子】
temp = input("猜一猜小姐姐想的是哪個數字?") guess = int(temp) if guess > 8:print("大了,大了") else:if guess == 8:print("你太了解小姐姐的心思了!")print("哼,猜對也沒有獎勵!")else:print("小了,小了") print("游戲結束,不玩兒啦!")3. if - elif - else 語句
if expression1:expr1_true_suite elif expression2:expr2_true_suite.. elif expressionN:exprN_true_suite else:expr_false_suite- elif 語句即為 else if,用來檢查多個表達式是否為真,并在為真時執行特定代碼塊中的代碼。
【例子】
temp = input('請輸入成績:') source = int(temp) if 100 >= source >= 90:print('A') elif 90 > source >= 80:print('B') elif 80 > source >= 60:print('C') elif 60 > source >= 0:print('D') else:print('輸入錯誤!')4. assert 關鍵詞
- assert這個關鍵詞我們稱之為“斷言”,當這個關鍵詞后邊的條件為 False 時,程序自動崩潰并拋出AssertionError的異常。
【例子】
my_list = ['lsgogroup'] my_list.pop(0) assert len(my_list) > 0# AssertionError4 循環語句
【例子】在進行單元測試時,可以用來在程序中置入檢查點,只有條件為 True 才能讓程序正常工作。
assert 3 > 7# AssertionError2. while - else 循環
while語句最基本的形式包括一個位于頂部的布爾表達式,一個或多個屬于while代碼塊的縮進語句。
while 布爾表達式:代碼塊while循環的代碼塊會一直循環執行,直到布爾表達式的值為布爾假。
如果布爾表達式不帶有<、>、==、!=、in、not in等運算符,僅僅給出數值之類的條件,也是可以的。當while后寫入一個非零整數時,視為真值,執行循環體;寫入0時,視為假值,不執行循環體。也可以寫入str、list或任何序列,長度非零則視為真值,執行循環體;否則視為假值,不執行循環體。
【例子】
3. for 循環
4. for - else 循環
5. range() 函數
6. enumerate()函數
7. break 語句
8. continue 語句
9. pass 語句
10. 推導式
5 異常處理
1. Python 標準異常總結
2. Python 標準警告總結
3. try - except 語句
4. try - except - finally 語句
5. try - except - else 語句
6. raise語句
總結
以上是生活随笔為你收集整理的Python从入门到入土的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat 集群搭建入门
- 下一篇: NMF算法python源代码