列表解析式和字典解析式
datetime模塊
對日期,時間,時間戳的處理
datetime類
today()返回本地時區當前的datetime對象
now(tz=None)返回當前時間的datetime對象,時間到微秒,如果tz為None,返回和today()一樣
utcnow()沒有時區的當前時間
fromtimestamp(timestamp,tz=Zone)從時間戳返回另一個datetime對象
datetime對象
Timestamp()返回一個到微秒的時間戳
時間戳:格林威治時間1970年1月1日0點到現在的秒數
標準庫datetime
日期格式化
類方法strptime(date_string,format),返回datetime對象
對象方法strfime(format),返回字符串
字符串format函數格式化
timedate對象
datetime2 = datetime1 + datetime2
datetime2 =datetime1 – timedate
timedate = datetime -datetime2
構造方法
Datetime.timedelta(days=0,seconfs=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
Year = datetime.timedelta(days=365)
Total_seconds()返回時間差的總秒數
標準庫time
time.sleep(secs)將調用線程掛起指定的秒數
列表解析
生成一個列表,元素0~9對每一個元素自增1后求平方返回新的列表
lst1 = list(range(10))
lst2 = []
for i in lst1:
????lst2.append((i+1)**2)
print(lst2)
列表解析式
lst1 = list(range(10))
lst2 = [lst2.append((i+1)**2) for i in lst1]
print(lst2)
print(type(lst2))
列表解析
語法:[返回值 for 元素 in ?可迭代對象 if條件]
使用中括號[],內部是for循環,if條件語句可選
返回一個新的列表
列表解析式是一種語法糖
編譯器會優化,不會因為簡寫而影響效率,反而優化提高了效率
減少程序員工作量,減少出錯
簡化了代碼,但可讀性強
舉例:獲取10以內的偶數,比較執行效率
lst = []
for i in range(10):
????if i % 2 == 0:
????????print(i)
解析式:[i for i in range(10) if i % 2 == 0]
列表解析式進階
[expr for i in iterable1 for j in iterable2]等價于
expr = []
for i in iterable1:
????for j in range(iterable2):
????????ret.append(expr)
練習題:返回1-10平方的列表
[i**2 for i in range(1,11)]
有一個新列表 lst = [] ,生成一個新列表,要求列表元素是lst相鄰之和
?[ (lst[i]+lst[i+1]) for i in range(7)]
打印99乘法表
print(“”.join([‘{}*{}={:<3}{}’.format(j,i,j*i, ‘\n’if j==i else ”) for i in range(1,10) for j in range(1,i+1) ]) )
[print(‘{}*{}={:<3}{}’.format(i,j,i*j,’\n’ if i==j else ‘ ‘),end=”) for i in range(1,10) for j in range(1,i+1)]
生成器表達式
語法:返回值 for 元素 in 可迭代對象 if 條件
列表解析式的中括號換成小括號
返回一個生成器
和列表解析式的區別
生成器表達式是按需計算(或者說是惰性求值,延遲計算),需要的時候才計算值
列表解析式是立即返回值
生成器:可迭代對象,迭代器
舉例:
g = (“{:04}”.format(i) ?for i in range(1,11))
next(g)
next(g)
for x in g:
????print(x)
print(‘——————–‘)
for x in g:
????print(x)
總結:延遲計算
?返回迭代器,可以迭代
從前到后走完一遍,不能回頭
對比列表:
g = (“{:04}”.format(i) ?for i in range(1,11))
for x in g:
????print(x)
print(‘———————‘)
for x in g:
????print(x)
立即計算,返回的不是迭代器,返回的事迭代對象列表
從前到后走完一遍后,可以重新回頭迭代
和列表解析式的對比
計算方式
生成器表達式延遲計算,列表解析式立即計算
內存占用
單從返回值來說,生成器表達式省內存,列表解析式返回新的列表
生成器沒有數據,內存占用極少,但是使的時候,雖然一個個返回數據,但是合起來占用的內存也差不多
列表解析式構造新的列表需要占內存
計算速度
但看時間看,生成器表達式耗時非常短,列表解析式耗時長
但是生成器本身沒有返回值,只返回了一個生成器對象
列表解析式構造并返回了一個新的列表
集合解析式
語法:{返回值for 元素 in 可迭代對象 if 條件}
列表解析式的中括號換成大括號{}就行了
;立即返回一個集合
用法:{(x,x+1)for i in range(10)}
字典解析式
用法;{str(x):y for i in range(3) for y in range(4)}等價于
lsr = {}
for i in range(3):
????for y in range(4):
????????lsr[str(x)] = y
print(lsr)
總結
Python2 引入了列表解析式
Python2.4 引入了生成器表達式
Python3 引入了集合,字典解析式,并遷移到了2.7
一般來說,應該多應用解析式,簡短高效
如果一個解析式非常復雜,難以讀懂,要考慮解成for循環
生成器和迭代器是不同的對象,但是都是可迭代對象
內建函數
標識id
返回對象的逶迤標識CPython的內存地址
哈希hash()
返回一個對象的哈希值
類型type()
返回對象的類型
類型轉換
Float() int() bin() hex() oct() bool() list() ?tuple() ??dict() set() ?complex() ?bytes() bytearray()
輸入input([prompt])
接收用戶輸入,返回一個字符串
打印print()
????打印輸出,默認使用空格分割,換行結尾,輸出到控制臺
對象長度len()
返回一個集合類型的元素個數
Isinstance(obj,class_or_tuple)
判斷對象obj是否屬于某種類型或者元組中列出的某個類型
Isinstance(Ture,int)
判斷類型cls是否某種類型的子類或者元組中列出的某個類型的子類
Issubclass(bool,int)
絕對值abs(x) x為數值
最大值max() ?最小值min()
返回值可迭代對象中最大或者最小值
返回多個參數中最大或者最小值
Round() 四舍六入五取偶 round(-0.5)
?
?
?
?
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95569