自用
Task1:
如果對一個列表,既要遍歷索引又要遍歷元素時,首先可以這樣寫:
list1 = ["這", "是", "一個", "測試"]
for i in range (len(list1)):print i ,list1[i]#上述方法有些累贅,利用enumerate()會更加直接和優美:list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1):print index, item
>>>
0 這
1 是
2 一個
3 測試
#enumerate還可以接收第二個參數,用于指定索引起始值,如:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1, 1):print index, item
>>>
1 這
2 是
3 一個
4 測試#如果要統計文件的行數,可以這樣寫:
count = len(open(filepath, 'r').readlines())
#這種方法簡單,但是可能比較慢,當文件比較大時甚至不能工作。#可以利用enumerate():
count = 0
for index, line in enumerate(open(filepath,'r')): count += 1
列表推導式
task2:
這個用法就和C語言的格式化輸出很像
print('%c' % 97) # a
print('%f' % 27.658) # 27.658000
print('%5.1f' % 27.658) # ' 27.7'
注意:如果我們取的鍵在字典(dict)中不存在,會直接報錯KeyError
C++的Map會創建這個key的元素,為它賦初值為0。
dict創建的語法有些特殊:
dic1 = dict([('apple', 4139), ('peach', 4127), ('cherry', 4098)])
dic2 = dict((('apple', 4139), ('peach', 4127), ('cherry', 4098)))
dick的函數keys和vaules
list.remove(obj) 移除列表中某個值的第一個匹配項
remove 和 pop 都可以刪除元素,前者是指定具體要刪除的元素,后者是指定一個索引。
不知道Python其他 的list刪除會不會有迭代器失效的問題,《Python核心編程》提到的問題,待測。
通過將索引指定為-1,可讓Python返回最后一個列表元素,索引 -2 返回倒數第二個列表元素,以此類推。
Python的數值(列表)切片非常常用,取值范圍前閉后開。x[start : stop : step] step為步長,默認為1。
注意最后把 step 設為 -1,相當于將列表反向排列。
tuple(sub) 把一個可迭代對象轉換為元組。
task 3
我為啥之前不復制要截圖捏
函數
內嵌函數
閉包
- 是函數式編程的一個重要的語法結構,是一種特殊的內嵌函數。
- 如果在一個內部函數里對外層非全局作用域的變量進行引用,那么內部函數就被認為是閉包。
- 通過閉包可以訪問外層非全局作用域的變量,這個作用域稱為 閉包作用域。
def funX(x):def funY(y):return x * yreturn funYi = funX(8)
print(type(i)) # <class 'function'>
print(i(5)) # 40
#這語法巨奇怪有啥用啊
Python 的魔法方法
據說,Python 的對象天生擁有一些神奇的方法,它們是面向對象的 Python 的一切…
它們是可以給你的類增加魔力的特殊方法…
如果你的對象實現了這些方法中的某一個,那么這個方法就會在特殊的情況下被 Python 所調用,而這一切都是自動發生的…
類有一個名為__init__(self[, param1, param2...])
的魔法方法,該方法在類實例化時會自動調用。
也就是c++的構造函數
公有和私有
在 Python 中定義私有變量只需要在變量名或函數名前加上“__”兩個下劃線,那么這個函數或變量就會為私有的了。
class JustCounter:__secretCount = 0 # 私有變量publicCount = 0 # 公開變量
繼承
Python 同樣支持類的繼承,派生類的定義如下所示:
class DerivedClassName(BaseClassName):
? ? ? ?statement-1
? ? ? ?? ? ? ?.
? ? ? ?? ? ? ?.
? ? ? ?? ? ? ?.
? ? ? ?statement-N
BaseClassName
(基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用:
class DerivedClassName(modname.BaseClassName):
? ? ? ?statement-1
? ? ? ?? ? ? ?.
? ? ? ?? ? ? ?.
? ? ? ?? ? ? ?.
? ? ? ?statement-N
參考資料:
天池龍珠計劃之Python學習電子書_v0.0.2.pdf
https://blog.csdn.net/churximi/article/details/51648388
http://joyfulpandas.datawhale.club/Content/index.html