Python學習筆記整理(python 3)

一、tuple(元組)

tuplelist非常類似,但是tuple一旦初始化就不能修改,如:

classmates = ('Michael', 'Bob', 'Tracy')

classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素

不可變的tuple有什麼意義?因為tuple不可變,所以程式碼更安全。如果可能,能用tuple代替list就儘量用tuple

tuple的陷阱

要定義一個只有1個元素的tuple,如果你這麼定義:

t = (1)
t
1

定義的不是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_indexend_index-1之間的連續物件

con[start_index: end_index : step]:返回索引值為start_indexend_index-1之間,並且索引值與start_index之差可以被step整除的連續物件,即步長

這裡寫圖片描述

2、預設用法

con[start_index: ]:預設end_index,表示從start_index開始到序列中最後一個物件

con[: end_index]:預設start_index,表示從序列中第一個物件到end_index-1之間的片段

con[:]:預設start_indexend_index,表示從第一個物件到最後一個物件的完整片段

con[::step]:預設start_indexend_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)