python第三周笔记_Python第三周 学习笔记(1)
key-value鍵值對的數據的集合
可變的、無序的、key不重復
初始化:
d = dict()
d = {}
d = dict(**kwargs) 如:d = dict(a=1,b=2)
dict(iterable, **kwarg)
使用可迭代對象和name=value對構造字典,不過可迭代對象的元素必須是一個二元結構
dict(mapping, **kwarg)
dict.fromkeys(iterable, value)
字典元素的訪問
d[key]
返回key對應的值value
key不存在拋出KeyError異常
get(key[, default])
返回key對應的值value
key不存在返回缺省值,如果沒有設置缺省值就返回None
setdefault(key[, default])
返回key對應的值value
key不存在,添加kv對,value為default,并返回default,如果default沒有設置,缺省為None
字典增加和修改
d[key] = value
將key對應的值修改為value
key不存在添加新的kv對
update([other]) -> None
使用另一個字典的kv對更新本字典
key不存在,就添加
key存在,覆蓋已經存在的key對應的值
就地修改
d.update(red=1)
d.update(((‘red‘,2),))
d.update({‘red‘:3})
字典刪除
pop(key[, default])
key存在,移除它,并返回它的value
key不存在,返回給定的default
default未設置,key不存在則拋出KeyError異常
popitem()
移除并返回一個任意的鍵值對
字典為empty,拋出KeyError異常
clear()
清空字典
del語句
本質上減少了一個對象的引用,del 實際上刪除的是名稱,而不是對象
字典遍歷:
遍歷key:
for k in d:
print(k)
for k in d.keys():
print(k)
遍歷values:
for k in d:
print(d[k])
for k in d:
print(d.get(k))
for v in d.values():
print(v)
*遍歷item,即kv對:
for item in d.items():
print(item)
for item in d.items():
print(item[0], item[1])
for k,v in d.items():
print(k, v)
for k, _ in d.items():
print(k)
for _ ,v in d.items():
print(v)
總結
Python3中,keys、values、items方法返回一個類似一個生成器的可迭代對象,不會把函數的返回結果復制到內存中
Dictionary view對象
字典的entry的動態的視圖,字典變化,視圖將反映出這些變化
字典遍歷和移除
遍歷字典時,不允許增刪元素
可先記錄key值再遍歷刪除
d = dict(a=1, b=2, c=‘abc‘)
keys = []
for k,v in d.items():
if isinstance(v, str):
keys.append(k)
for k in keys:
d.pop(k)
print(d)
defaultdict
collections.defaultdict([default_factory[, ...]])
第一個參數是default_factory,缺省是None,它提供一個初始化函數。當key不存在的時候,會調用這個工廠函數來生成key對應的value
ordereddict
collections.OrderedDict([items])
key并不是按照加入的順序排列,可以使用OrderedDict記錄順序
標準庫datetime
datetime模塊
datetime類
today()
返回本地時區當前時間的datetime對象
now(tz=None)
返回當前時間的datetime對象,時間到微秒,如果tz為None,返回和today()一樣
fromtimestamp(timestamp, tz=None) 從一個時間戳返回一個datetime對象
日期格式化
類方法 strptime(date_string, format) ,返回datetime對象
對象方法 strftime(format) ,返回字符串
字符串format函數格式化
import datetime
dt = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
print("{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}".format(dt))
timedelta對象
與datetime對象做加減運算
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,minutes=0, hours=0, weeks=0)
total_seconds() 返回時間差的總秒數
標準庫time
time.sleep(secs) 將調用線程掛起指定的秒數
列表解析式
語法
[返回值 for 元素 in 可迭代對象 if 條件]
使用中括號[],內部是for循環,if條件語句可選
返回一個新的列表
列表解析式是一種語法糖
編譯器會優化,不會因為簡寫而影響效率,反而因優化提高了效率
減少程序員工作量,減少出錯
簡化了代碼,但可讀性增強
列表解析進階
[expr for item in iterable if cond1 if cond2]
等價于
ret = []
for item in iterable:
if cond1:
if cond2:
ret.append(expr)
[expr for i in iterable1 for j in iterable2 ]
等價于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
生成器表達式
(返回值 for 元素 in 可迭代對象 if 條件)
生成器表達式是按需計算(或稱惰性求值、延遲計算),需要的時候才計算值
列表解析式是立即返回值
生成器是可迭代對象、迭代器
使用next(itetator)迭代
生成器迭代與列表迭代對比
生成器
延遲計算
返回迭代器,可以迭代
從前到后走完一遍后,不能回頭
列表
立即計算
返回的不是迭代器,返回可迭代對象列表
從前到后走完一遍后,可以重新回頭迭代
計算方式
生成器表達式延遲計算,列表解析式立即計算
內存占用
單從返回值本身來說,生成器表達式省內存,列表解析式返回新的列表
生成器沒有數據,內存占用極少,但是使用的時候,雖然一個個返回數據,但是合起來占用的內存也差不多
列表解析式構造新的列表需要占用內存
計算速度
單看計算時間看,生成器表達式耗時非常短,列表解析式耗時長
但是生成器本身并沒有返回任何值,只返回了一個生成器對象
列表解析式構造并返回了一個新的列表
集合解析式
{返回值 for 元素 in 可迭代對象 if 條件}
立即返回一個集合
字典解析式
{返回值 for 元素 in 可迭代對象 if 條件}
使用key:value形式
立即返回一個字典
內建函數
標識 id
返回對象的唯一標識,CPython返回內存地址
哈希 hash()
返回一個對象的哈希值
類型 type()
返回對象的類型
類型轉換
float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray()
輸入 input([prompt])
接收用戶輸入,返回一個字符串
打印 print(*objects, sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False)
打印輸出,默認使用空格分割、換行結尾,輸出到控制臺
對象長度 len(s)
返回一個集合類型的元素個數
isinstance(obj, class_or_tuple)
判斷對象obj是否屬于某種類型或者元組中列出的某個類型
isinstance(True, int)
issubclass(cls, class_or_tuple)
判斷類型cls是否是某種類型的子類或元組中列出的某個類型的子類
issubclass(bool, int)
絕對值abs(x)
x為數值
最大值max() 最小值min()
返回可迭代對象中最大或最小值
返回多個參數中最大或最小值
round(x)
四舍六入五取偶,round(-0.5)
pow(x , y)
等價于 x**y
range(stop)
從0開始到stop-1的可迭代對象;range(start, stop[, step])從start開始到stop-1結束步長為step的可迭代對象
divmod(x, y)
等價于 tuple (x//y, x%y)
sum(iterable[, start])
對可迭代對象的所有數值元素求和
sum(range(1,100,2))
chr(i)
給一個一定范圍的整數返回對應的字符
ord(c)
返回字符對應的整數
sorted(iterable[, key][, reverse]) 排序
返回一個新的列表,默認升序
reversed()
反轉
枚舉 enumerate(seq, start=0)
迭代一個序列,返回索引數字和元素構成的二元組
*start表示索引開始的數字,默認是0
迭代器和取元素 iter(iterable)、next(iterator[, default])
iter將一個可迭代對象封裝成一個迭代器
next對一個迭代器取下一個元素。如果全部元素都取過了,再次next會拋StopIteration異常
拉鏈函數zip(*iterables)
像拉鏈一樣,把多個可迭代對象合并在一起,返回一個迭代器
將每次從不同對象中取到的元素合并成一個元組
木桶原理,取最小迭代次數迭代
可迭代對象
能夠通過迭代一次次返回不同的元素的對象。
所謂相同,不是指值是否相同,而是元素在容器中是否是同一個,例如列表中值可以重復的,[‘a‘,‘a‘],雖然這個列表有2個元素,值一樣,但是兩個‘a‘是不同的元素
可以迭代,但是未必有序,未必可索引
可迭代對象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
可以使用成員操作符in、not in,in本質上就是在遍歷對象
迭代器
特殊的對象,一定是可迭代對象,具備可迭代對象的特征
通過iter方法把一個可迭代對象封裝成迭代器
通過next方法,迭代 迭代器對象
生成器對象,就是迭代器對象
原文地址:http://blog.51cto.com/11281400/2095710
總結
以上是生活随笔為你收集整理的python第三周笔记_Python第三周 学习笔记(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python完全支持面向对象编程_[Py
- 下一篇: 进程用户态 上下文切换需要保存哪些_漫话