列表生成式 [x*x for x in range(1,11)]
生成器()小括號 表示生成器g 表示list g儲存的是演算法 用next()函式可以檢視下乙個生成器的值 用for迴圈迭代出結果 如果函式中有yield 表示該函式為生成器 yield()有列印print的功能
遇到yield
就中斷,下次又繼續執行generator函式的「呼叫」實際返回乙個generator物件
可以直接作用於for
迴圈的資料型別有以下幾種:
一類是集合資料型別,如list
、tuple
、dict
、set
、str
等;
一類是generator
,包括生成器和帶yield
的generator function。
這些可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable
。
可以使用isinstance()
判斷乙個物件是否是iterable
物件
可以被next()
函式呼叫並不斷返回下乙個值的物件稱為迭代器:iterator
生成器都是iterator
物件,但list
、dict
、str
雖然是iterable
,卻不是iterator
。
把list
、dict
、str
等iterable
變成iterator
可以使用iter()
函式
凡是可作用於for
迴圈的物件都是iterable
型別;
凡是可作用於next()
函式的物件都是iterator
型別,它們表示乙個惰性計算的序列;
集合資料型別如list
、dict
、str
等是iterable
但不是iterator
,不過可以通過iter()
函式獲得乙個iterator
物件。
python的for
迴圈本質上就是通過不斷呼叫next()
函式實現的
直接呼叫abs()
函式和呼叫變數f()
完全相同
既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式
map每乙個對應元素 全部用指定函式計算
reduce函式 將前兩個值進行函式f運算,運算的結果再和第三個引數運算,以此類推下去
filter 過濾引數 依次作用於引數 判斷結果是否為true 然後保留
python內建的sorted()
函式就可以對list進行排序sorted()
函式也是乙個高階函式,它還可以接收乙個key
函式來實現自定義的排序
sorted()
也是乙個高階函式。用sorted()
排序的關鍵在於實現乙個對映函式
高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回
閉包 返回函式不懂
裝飾器 呼叫now()
函式,不僅會執行now()
函式本身,還會在執行now()
函式前列印一行日誌: 輸出一行日誌
>>> now()
call now():
2015-3-25
要讓函式是可匯入的,得先建立模組。模組 是擴充套件名為.py的檔案,包含要匯入到程式中的**。下面來建立乙個包含函式make_pizza() 的模組。為此,我們將檔案pizza.py中
除函式make_pizza() 之外的其他**都刪除
import 模組 呼叫模組內函式 (模組名.py檔案) 模組名.函式名
匯入特定函式 from 模組 import 函式
別名 as 模組與函式均可別名
使用*號匯入所有模組中的函式時 如果有重名 最好只匯入想使用的函式 避免出錯
給形參指定預設值時,等號兩邊不要有空格:
def function_name(parameter_0, parameter_1='default value')
建議**行的長度不要超過79字元,這樣只要編輯器視窗適中,就能看到整行**。如果形參很多,導致函式定義的長度超過了
79字元,可在函式定義中輸入左括號後按回車鍵,並在下一行按兩次tab鍵,從而將形參列表和只縮排一層的函式體區分開來。
編寫類。類將函式和資料整潔地封裝起來,能夠靈活而高效地使用它們
在python中,首字母大寫的名稱指的是類
方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免python預設方法與普通方法發生名稱衝突
將方法__init__() 定義成了包含三個形參:self 、name 和age 。在這個方法的定義中,形參self 必不可少,還必須位於其他形參的前面。為何必須在方法定義中包含形參self 呢?因為python呼叫這個__init__() 方法來建立dog 例項時,將自動傳入實參self 。每個與類相關聯的方法呼叫都自動傳遞實參self ,它是乙個指向例項本身
的引用,讓例項能夠訪問類中的屬性和方法。我們建立dog 例項時,python將呼叫dog 類的方法__init__() 。我們將通過實參向dog() 傳遞名字和年齡;self 會自動傳遞,因此我們不需要傳遞它。每當我們根據dog 類建立例項時,都只需給最後兩個形參(name 和age )提供值
在python 2.7中建立類時,需要做細微的修改——在括號內包含單詞object
可以以三種不同的方式修改屬性的值:直接通過例項進行修改;通過方法進行設定;通過方法進行遞增(增加特定的值)
繼承 繼承時使用super()繼承並初始化父類
首先是car 類的**(見❶)。建立子類時,父類必須包含在當前檔案中,且位於子類前面。在❷處,我們定義了子類electriccar 。定義子類時,必須在括號內指定父類的名稱。方法__init__() 接受建立car 例項所需的資訊(見❸
❹處的super() 是乙個特殊函式,幫助python將父類和子類關聯起來。這行**讓python呼叫electriccar 的父類的方法__init__() ,讓electriccar 例項包含父類的所有屬性。父類也稱為超類 (superclass),名稱super因此而得名
重寫父類的方法
開啟檔案 with open
關鍵字with的用法
以寫入('w' )模式開啟檔案時千萬要小心,因為如果指定的檔案已經存在,python將在返回檔案物件前清空該檔案。
python只能將字串寫入文字檔案。要將數值資料儲存到文字檔案中,必須先使用函式str() 將其轉換為字串格式
函式write() 不會在你寫入的文字末尾新增換行符
模組json 來儲存資料 json.dump()儲存資料 json.load()
重構你經常會遇到這樣的情況:**能夠正確地執行,但可做進一步的改進——將**劃分為一系列完成具體工作的函式。這樣的過程被稱為重構 。重構讓**更清晰、更易於理解、更容易擴充套件
使用python模組unittest 中的工具來測試**
unittest module中的斷言方法
python基礎學習(2)
seq physical chemical 1997,2000 seq 1 chemical seq 0 1 切片 physical 更新 seq 3 1000列表長度 刪除 del seq 3 print seq physical chemical 1997 len 列表長度 max min 列表...
Python 基礎學習2
1.bool值是false none false 所有的值為零的數 0.0 0.0j 複數 2.import import語句 import model from import語句 指定模組名匯入當前作用域 from module import name1 name2 namen 擴充套件的impo...
Python基礎學習(2)
鏈式賦值 用於同乙個物件賦值給多個變數 x y 123 系列解包賦值 系列資料賦值給對應相同個數的變數。a,b,c 1,2,3 python實際上不支援常量,實際上是可以改的,只是邏輯上下不做修改。使用divmod可以同時得到商和餘數 python中除了十進位制,還有其他三種進製 1 二進位制 0b...