一、tuple(元組)
tuple和list非常類似,但是tuple一旦初始化就不能修改,如:
classmates = ('Michael', 'Bob', 'Tracy')
classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他擷取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素
不可變的tuple有什麼意義。因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple tuple的陷阱
要定義一個只有1個元素的tuple,如果你這麼定義:
t = (1)t1
定義的不是tuple,是1這個數。這是因為括弧()既可以表示tuple,又可以表示數學公式中的小括弧,這就產生了歧義,因此,Python規定,這種情況下,按小括弧進行計算,計算結果自然是1。
所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:
t = (1,)t(1,)
Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括弧。
最後來看一個“可變的”tuple:
t = ('a', 'b', ['A', 'B'])t[2][0] = 'X't[2][1] = 'Y't('a', 'b', ['X', 'Y'])
二、Python中list類型切片
1、基本用法
①con[start_index]:返回索引值為start_index的對象
②con[start_index: end_index]:返回索引值為start_index到end_index-1之間的連續對象
③con[start_index: end_index : step]:返回索引值為start_index到end_index-1之間,並且索引值與start_index之差可以被step整除的連續對象,即步長
2、預設用法
①con[start_index: ]:預設end_index,表示從start_index開始到序列中最後一個對象
②con[: end_index]:預設start_index,表示從序列中第一個對象到end_index-1之間的片段
③con[:]:預設start_index和end_index,表示從第一個對象到最後一個對象的完整片段
④con[::step]:預設start_index和end_index,表示對整個序列按照索引可以被step整除的規則取值
可以用負數做切片。負數用在從序列尾開始計算的位置
s[::-1]可視為翻轉效果
3、Numpy中的二維ndarray切片
對於一維資料的具體用法和Python中的類似
對於二維數值用法如下,X[:,:]用逗號分隔兩個維度,對於每個維度用法一樣,以下面這個二維數組為例:
x[:,1] 取x軸方向所有值,y軸等於1,結果:
x[1:3,1] 取x軸 x大於等於1,小於3,y軸等於1,結果:
三、lambda運算式簡單用法
對於簡單的函數,也存在一種簡便的表示方式,即:lambda運算式
# ###################### 普通函數 ####################### 定義函數(普通方式)def func(arg): return arg + 1# 執行函數result = func(123)# ###################### lambda ####################### 定義函數(lambda運算式)my_lambda = lambda arg : arg + 1# 執行函數result = my_lambda(123)
四、__call__
class X(object): def __init__(self, a, b, range): self.a = a self.b = b self.range = range def __call__(self, a, b): self.a = a self.b = b print('__call__ with ({}, {})'.format(self.a, self.b)) def __del__(self, a, b, range): del self.a del self.b del self.range
>>> xInstance = X(1, 2, 3)>>> xInstance(1,2)__call__ with (7, 8)