有c/c++的基礎快速上手python總結
Python語法
Python基礎
資料型別和變數
- python沒有 || && 等,用and, or, not
字串和編碼
ASCII(僅英文) ,Unicode(所有語言編碼,但是耗一倍空間) ,UTF-8 (前兩者折中,可變長編碼,建議使用)
ord()
函式獲取字元的整數表示 ,chr()
函式把編碼轉換為對應的字元>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
要計算
str
包含多少個字元,可以用len()
>>> len('ABC') 3 >>> len('中文') 2
%
運算子就是用來格式化字串的print('%2d-%02d' % (3, 1)) print('%.2f' % 3.1415926)
另一種格式化字串的方法是使用字串的
format()
方法,它會用傳入的引數依次替換字串內的佔位符{0}
、{1}
……>>> 'Hello, {0}, 成績提升了 {1:.1f}%'.format('小明', 17.125) 'Hello, 小明, 成績提升了 17.1%'
列表list和元組tuple
用
len()
函式可以獲得list元素的個數>>> len(classmates) 3
還可以用
-1
做索引,直接獲取最後一個元素:>>> classmates[-1] 'Tracy'
以此類推,可以獲取倒數第2個、倒數第3個:
>>> classmates[-2] 'Bob' >>> classmates[-3] 'Michael' >>> classmates[-4]
list是一個可變的有序表,所以,可以往list中追加元素到末尾:
>>> classmates.append('Adam') >>>
也可以把元素插入到指定的位置,比如索引號為
1
的位置:>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
要刪除list末尾的元素,用
pop()
方法:>>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy']
要刪除指定位置的元素,用
pop(i)
方法,其中i
是索引位置:>>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy']
要把某個元素替換成別的元素,可以直接賦值給對應的索引位置:
>>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy']
tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改
classmates = ('Michael', 'Bob', 'Tracy')
只有1個元素的tuple定義時必須加一個逗號
,
,來消除歧義:>>> t = (1,) >>> t (1,)
條件判斷
if,else後需要加冒號
if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
Python提供了
int()
函式來把str
轉換成整數s = input('birth: ') birth = int(s)
迴圈
for迴圈
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)
Python提供一個
range()
函式,可以生成一個整數序列,再通過list()
函式可以轉換為list。比如range(5)
生成的序列是從0開始小於5的整數:>>> list(range(5)) [0, 1, 2, 3, 4]
range(101)
就可以生成0-100的整數序列,計算如下:sum = 0 for x in range(101): sum = sum + x print(sum)
while迴圈,不加括號,加冒號
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
字典dict和集合set
dict
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
把資料放入dict的方法,除了初始化時指定外,還可以通過key放入:
>>> d['Adam'] = 67 >>> d['Adam'] 67
由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值沖掉:
>>> d['Jack'] = 90 >>> d['Jack'] 90 >>> d['Jack'] = 88 >>> d['Jack'] 88
通過
in
判斷key是否存在:>>> 'Thomas' in d False
通過dict提供的
get()
方法,如果key不存在,可以返回None
,或者自己指定的value:>>> d.get('Thomas') >>> d.get('Thomas', -1) -1
刪除一個key,用
pop(key)
方法,對應的value也會從dict中刪除:>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}
請務必注意,dict內部存放的順序和key放入的順序是沒有關係的。
和list比較,dict有以下幾個特點:
- 查詢和插入的速度極快,不會隨著key的增加而變慢;
- 需要佔用大量的記憶體,記憶體浪費多。
而list相反:
- 查詢和插入的時間隨著元素的增加而增加;
- 佔用空間小,浪費記憶體很少。
所以,dict是用空間來換取時間的一種方法。
集合set:set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
要建立一個set,需要提供一個list作為輸入集合:
>>> s = set([1, 2, 3]) >>> s {1, 2, 3}
通過
add(key)
方法可以新增元素到set中,可以重複新增,但不會有效果:>>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) >>> s {1, 2, 3, 4}
通過
remove(key)
方法可以刪除元素:>>> s.remove(4) >>> s {1, 2, 3}
set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作:
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 {2, 3} >>> s1 | s2 {1, 2, 3, 4}
函式
呼叫函式
ython內建的常用函式還包括資料型別轉換函式,比如
int()
函式可以把其他資料型別轉換為整數:>>> int('123') 123 >>> int(12.34) 12 >>> float('12.34') 12.34 >>> str(1.23) '1.23' >>> str(100) '100' >>> bool(1) True >>> bool('') False
定義函式
空函式如果想定義一個什麼事也不做的空函式,可以用
pass
語句:def nop(): pass
pass
語句什麼都不做,那有什麼用?實際上pass
可以用來作為佔位符,比如現在還沒想好怎麼寫函式的程式碼,就可以先放一個pass
,讓程式碼能執行起來。pass
還可以用在其他語句裡,比如:if age >= 18: pass
缺少了
pass
,程式碼執行就會有語法錯誤。資料型別檢查可以用內建函式
isinstance()
實現:def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
函式的引數
必選引數在前,預設引數在後
可變引數:
要定義出這個函式,我們必須確定輸入的引數。由於引數個數不確定,我們首先想到可以把a,b,c……作為一個list或tuple傳進來,這樣,函式可以定義如下:
def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
但是呼叫的時候,需要先組裝出一個list或tuple:
>>> calc([1, 2, 3]) 14 >>> calc((1, 3, 5, 7)) 84
如果利用可變引數,呼叫函式的方式可以簡化成這樣:
>>> calc(1, 2, 3) 14 >>> calc(1, 3, 5, 7) 84
所以,我們把函式的引數改為可變引數:
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
*nums
表示把nums
這個list的所有元素作為可變引數傳進去。如果已經有一個list或者tuple,要呼叫一個可變引數怎麼辦?可以這樣做:
>>> nums = [1, 2, 3] >>> calc(nums[0], nums[1], nums[2]) 14
這種寫法當然是可行的,問題是太繁瑣,所以Python允許你在list或tuple前面加一個
*
號,把list或tuple的元素變成可變引數傳進去:>>> nums = [1, 2, 3] >>> calc(*nums) 14
*nums
表示把nums
這個list的所有元素作為可變引數傳進去。這種寫法相當有用,而且很常見。
有毒命名關鍵字引數
如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收
city
和job
作為關鍵字引數。這種方式定義的函式如下:def person(name, age, *, city, job): print(name, age, city, job)
和關鍵字引數
**kw
不同,命名關鍵字引數需要一個特殊分隔符*
,*
後面的引數被視為命名關鍵字引數。