基礎知識複習

2022-05-12 13:53:21 字數 4247 閱讀 5845

總結:

1. 閉包: 閉包的好處就是讓乙個變數常駐記憶體, 供後續的程式使用

2. 檢視乙個物件是可迭代物件的方法

(1) 使用dir()函式. 如果結果中有 __iter__ 就是可迭代物件

print(dir(obj))

(2) 通過isinstance()函式, 返回true就是可迭代物件

from collections import iterator, iterable

print(isinstance(obj, iterator)) 

print(isinstance(obj, iterable))

3. 如果乙個物件有 __iter__函式, 則這個物件遵守了可迭代協議, 就可以獲得相應的迭代器

通過iter()或__iter__()來獲取迭代器

通過next()或__next__()來獲取到迭代器中的元素

iterabke: 可迭代物件, 內部包含 __iter__()

iterator: 迭代器, 內部包含 __iter__() 同時包含 __next__()

迭代器特點: 1. 節省記憶體 2. 惰性機制 3. 不能反覆, 只能向下執行

4. for迴圈的機制

使用while迴圈+_迭代器來模擬for迴圈

def my_for(iterable_obj):

iterator_obj = iter(iterable_obj)

wnhile 1:

try:

i = next(iterator_obj)

print(i)

except stopiteration:

break

my_for(iterable_obj)

5. 生成器 generator

生成器實質就是迭代器, 在python中有3中方法獲得生成器:

(1). 通過生成器函式

(2). 通過各種推導式來實現生成器

(3). 通過資料的轉換來獲取生成器

def func():

print("111")

yield 222

ret = func()

print(ret)

# 將函式中的return換成yield就是生成器, 這個時候執行函式, 就不再是函式的執行了, 而是獲得這個生成器, 執行生成器通過next()

yield和return的區別: yield是分段執行乙個函式, return是直接停止執行函式

當程式執行完最後乙個yield, 在繼續執行next()會報錯 # stopiteration

send() 和 next()的區別:

(1). send()和next()都是讓生成器向下走一次

(2). send()可以給上乙個yield傳值, 不嫩給最後乙個yield傳送值, 在第一次執行生成器的時候不能使用send()

6. 列表推導式, 生成器表示式

列表推導式是通過一行**來構建想要的列表, 看似簡單, 但出錯後很難排查

常用寫法: lst = [結果 for 變數 in 可迭代物件]

還可以對列表中的資料進行篩選

篩選模式: [結果 for 變臉 in 可迭代物件 if 條件]

生成器表示式的語法和列表推導式的語法基本一致, 只是把替換成了()

生成器表示式和列表推導式的區別:

(1). 列表推導式比較耗記憶體, 一次性載入, 生成器表示式幾乎不佔記憶體, 使用的時候才分配和使用記憶體

(2). 得到的值不一樣, 列表推導式得到的是乙個列表, 生成器表示式獲取的是乙個生成器

生成器的惰性機制: 生成器只有在訪問的時候才取值

總結: 推導式有: 列表推導式, 字典推導式, 集合推導式, 沒有元祖推導式

生成器表示式: gen = (結果 for 變數 in 可迭代物件 if 條件篩選)

生成器表示式可以直接獲取到生成器物件, 生成器物件可以直接進行for迴圈, 生成器具有惰性機制

7. 內建函式

locals()    返回當前作用域中的名字

globals()    返回全域性作用域中的名字

eval()        執行字串型別的**, 並最終返回結果

exec()        執行字串型別的**

compile()    把字串型別的**變異, **物件能夠通過exec語句來執行或者eval()進行求值

compile()引數說明: resoures: 要執行的**, 動態**片段; 檔名: 存放檔案的檔名, 當傳入了第乙個引數的時候, 這個引數給空就可以了; 模式: 取值有三個 (1)"exec" 一般放一些流程語句的時候, (2)"eval" resourse只存放乙個求值表示式 (3)"single" resourse存放的**有互動的時候 

有返回值的字串形式的**用eval(), 沒有返回值的字串形式的**用exec(), 一般很少用compile()

hash()        獲取到物件的雜湊值(int, str, bool, tuple)

id()        獲取到物件的記憶體位址

__import__()    用於動態載入類和函式

help()        用於檢視函式或模組用途的詳細說明

dir()        檢視物件的內建屬性, 方法, 訪問的是物件的 __dir__() 方法

complex()    建立乙個複數, 第乙個引數是實部, 第二個引數是虛部, 或者第乙個引數直接用字串來描述複數

pow(a, b)    求a的b次冪, 如果有三個引數, 則求完次冪後對第三個數取餘

reversed()    將乙個序列翻轉, 返回翻轉序列的迭代器

slice()        列表的切片 

fomeat()    與具體的資料有關, 用於計算各種小數, 精算

bytes()        將字串轉換成bytes型別

byteattay()    返回乙個新位元組陣列, 這個數字裡的元素時可變的, 並且每個元素的值的範圍是[0, 256)

memoryview()    檢視bytes在記憶體中的情況

ord()        輸入字元找帶字元編碼的位置

chr()        輸入位置數字找出對應的字元

ascii()        是ascii碼中的返回該值, 不是就返回\u

repr()        返回乙個物件的string形式

frozenset()    建立乙個凍結的集合, 凍結的集合不能進行新增和刪除操作

enumerate()    獲取結合的列舉物件

all()        可迭代物件中全部是true, 結果才是true

any()        可迭代物件中有乙個是true, 結果就是true

zip()        用於將可迭代物件作為引數, 將物件中對應的元素打包成乙個個元祖, 然後返回由這些元祖組成的迭代器, 如果各個迭代器的元素個數不一致, 則返回列表長度與最短的物件相同

8. lambda匿名函式

為了解決一些簡單的需求而設計的一句話函式, lambda表示的是匿名函式, 不需要用def宣告, 一句話就能宣告出乙個函式

語法: 函式名 = lambda 引數: 返回值

(1). 函式的引數可以有多個, 多個引數之間用逗號隔開

(2). 匿名函式不管多複雜, 只能寫一行, 且邏輯結束後直接返回資料

(3). 返回值和正常的函式一樣, 可以是任意資料型別 

9. sorted() 排序函式

語法: sorted(iterable, key=none, reverse=false)

iterable: 可迭代物件

key: 排序規則(排序函式), 在sorted內部會將可迭代物件中的每乙個元素傳遞給這個函式的引數, 根據函式運算的結果進行排序

reverse: 是否是倒序, true倒序, false正序

10. filter() 篩選函式

語法: filter(function, iterable)

function: 用來篩選的函式, 在filter中會自動的把iterable中的元素傳遞給function, 然後根據function返回的是true還是false來判斷是否保留此項資料

iterable: 可迭代物件

返回的是迭代器

11. map() 對映函式

可以對可迭代物件中的每乙個元素進行對映, 分別去執行function

語法: map(function, iterable)

返回的是迭代器

12. 遞迴

在函式中呼叫函式本身就是遞迴

python中的最大遞迴深度是998

c基礎知識複習

c的發展歷程 c原本是為了開發unix作業系統而設計的語言 如此說,應該c比unix更早問世,而事實並非如此,最早的unix是由彙編寫的 c語言本來是美國人開發的,解讀c的宣告,最好還是用英語來讀 解讀c宣告的步驟 1 首先著眼於識別符號 變數名或者函式名 2 從距離識別符號最近的地方開始,依照優先...

DayOne C 基礎知識複習

在c 中,一般在標頭檔案 h 中定義,然後在原始檔 cpp 中進行實現。舊版c 中使用 ifndef key endif 來確保標頭檔案只引用了一次,保證不會迴圈引用。最新的編譯器使用 pragma once指令來確保不會出現迴圈引用。使用endl來表示一行輸出的結尾,或者是使用 n 來表示一行的結...

複習基礎知識1

1,classloader 基本概念 2 unicode 3static,其中味靜態 塊為區域性變數 4 j j 無論加多少次,j的值都是不變的 temp j j j 1 j temp 5 j j j j 6 length用法 char c 13c short byte char int long ...