Python入門教程完整版(懂中文就能學會)資料-基礎(chǔ)2_第1頁
Python入門教程完整版(懂中文就能學會)資料-基礎(chǔ)2_第2頁
Python入門教程完整版(懂中文就能學會)資料-基礎(chǔ)2_第3頁
Python入門教程完整版(懂中文就能學會)資料-基礎(chǔ)2_第4頁
Python入門教程完整版(懂中文就能學會)資料-基礎(chǔ)2_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、變量進階(理解)目標變量的引用可變和不可變類型局部變量和全局變量01.變量的引用變量 和 數(shù)據(jù) 都是保存在 內(nèi)存 中的在 Python中 函數(shù) 的 參數(shù)傳遞 以及 返回值 都是靠 引用 傳遞的1.1引用的概念在 Python中變量 和 數(shù)據(jù) 是分開存儲的數(shù)據(jù) 保存在內(nèi)存中的一個位置變量 中保存著數(shù)據(jù)在內(nèi)存中的地址變量 中 記錄數(shù)據(jù)的地址,就叫做 引用使用 id()函數(shù)可以查看變量中保存數(shù)據(jù)所在的 內(nèi)存地址注意:如果變量已經(jīng)被定義,當給一個變量賦值的時候,本質(zhì)上是 修改了數(shù)據(jù)的引用變量 不再 對之前的數(shù)據(jù)引用變量 改為 對新賦值的數(shù)據(jù)引用1.2變量引用 的示例在 Python中,變量的名字類似于

2、 便簽紙 貼在 數(shù)據(jù) 上定義一個整數(shù)變量 a,并且賦值為 1| 代碼 | 圖示 | | :-: | :-: | | a = 1 | |將變量 a 賦值為 2| 代碼 | 圖示 | | :-: | :-: | | a = 2 | |定義一個整數(shù)變量 b,并且將變量 a 的值賦值給 b| 代碼 | 圖示 | | :-: | :-: | | b = a | |變量 b 是第 2 個貼在數(shù)字 2上的標簽1.3函數(shù)的參數(shù)和返回值的傳遞在 Python 實參/中,函數(shù)的 返回值 都是是靠 引用 來傳遞來的python def test(num):print("-" * 50)print

3、("%d 在函數(shù)內(nèi)的內(nèi)存地址是 %x" % (num, id(num)result = 100print("返回值 %dprint("-" * 50)在內(nèi)存中的地址是 %x" % (result, id(result)return resulta = 10 print("調(diào)用函數(shù)前 內(nèi)存地址是 %x" % id(a)r = test(a)print("調(diào)用函數(shù)后 實參內(nèi)存地址是 %x" % id(a) print("調(diào)用函數(shù)后 返回值內(nèi)存地址是 %x" % id(r)02.可

4、變和不可變類型不可變類型,內(nèi)存中的數(shù)據(jù)不允許被修改:數(shù)字類型 int, bool, float, complex, long(2.x)字符串 str元組 tuple可變類型,內(nèi)存中的數(shù)據(jù)可以被修改:列表 list字典 dictpython a = 1 a = "hello" a = 1, 2, 3 a = 3, 2, 1python demo_list = 1, 2, 3print("定義列表后的內(nèi)存地址 %d" % id(demo_list)demolist.append(999) demolist.pop(0) demolist.remove(2)

5、demolist0 = 10print("修改數(shù)據(jù)后的內(nèi)存地址 %d" % id(demo_list)demo_dict = "name": "小明"print("定義字典后的內(nèi)存地址 %d" % id(demo_dict)demodict"age" = 18 demodict.pop("name") demo_dict"name" = "老王"print("修改數(shù)據(jù)后的內(nèi)存地址 %d" % id(demo_dict

6、)注意:字典的 key只能使用不可變類型的數(shù)據(jù)注意1.可變類型的數(shù)據(jù)變化,是通過 方法 來實現(xiàn)的2.如果給一個可變類型的變量,賦值了一個新的數(shù)據(jù),引用會修改變量 不再 對之前的數(shù)據(jù)引用變量 改為 對新賦值的數(shù)據(jù)引用哈希 (hash)Python 中內(nèi)置有一個名字叫做 hash(o)的函數(shù)接收一個 不可變類型 的數(shù)據(jù)作為 參數(shù)返回 結(jié)果是一個 整數(shù)哈希 是一種 算法,其作用就是提取數(shù)據(jù)的 特征碼(指紋)相同的內(nèi)容 得到 相同的結(jié)果不同的內(nèi)容 得到 不同的結(jié)果在 Python 鍵值對 時,會首先對 key 進行 hash中,設(shè)置字典的 已決定如何在內(nèi)存中保存字典的數(shù)據(jù),以方便 后續(xù) 對字典的操作:

7、增、刪、改、查鍵值對的 key必須是不可變類型數(shù)據(jù)鍵值對的 value可以是任意類型的數(shù)據(jù)03.局部變量和全局變量局部變量 是在 函數(shù)內(nèi)部 定義的變量,只能在函數(shù)內(nèi)部使用全局變量 是在 函數(shù)外部定義 的變量(沒有定義在某一個函數(shù)內(nèi)),所有函數(shù) 內(nèi)部 都可以使用這個變量提示:在其他的開發(fā)語言中,大多 可變范圍太大,導致程序不好維護!不推薦使用全局變量 3.1局部變量局部變量 是在 函數(shù)內(nèi)部 定義的變量,只能在函數(shù)內(nèi)部使用函數(shù)執(zhí)行結(jié)束后,函數(shù)內(nèi)部的局部變量,會被系統(tǒng)回收不同的函數(shù),可以定義相同的名字的局部變量,但是 彼此之間 不會產(chǎn)生影響局部變量的作用在函數(shù)內(nèi)部使用,臨時 保存 函數(shù)內(nèi)部需要使用的

8、數(shù)據(jù)python def demo1():num = 10print(num)num = 20print("修改后 %d" % num)def demo2():num = 100print(num)demo1() demo2()print("over")局部變量的生命周期所謂 生命周期 就是變量從 被創(chuàng)建 到 被系統(tǒng)回收 的過程局部變量 在 函數(shù)執(zhí)行時 才會被創(chuàng)建函數(shù)執(zhí)行結(jié)束后 局部變量 被系統(tǒng)回收局部變量在生命周期 內(nèi),可以用來存儲 函數(shù)內(nèi)部臨時使用到的數(shù)據(jù)3.2全局變量全局變量 是在 函數(shù)外部定義 的變量,所有函數(shù)內(nèi)部都可以使用這個變量python定

9、義一個全局變量num = 10def demo1():print(num)def demo2():print(num)demo1() demo2()print("over")注意:函數(shù)執(zhí)行時,需要處理變量時 會:1.首先 查找 函數(shù)內(nèi)部 是否存在 指定名稱 的局部變量,如果有,直接使用2.3.如果沒有,查找函數(shù)外部 是否存在 指定名稱如果還沒有,程序報錯!的全局變量,如果有,直接使用1)函數(shù)不能直接修改 全局變量的引用全局變量 是在 函數(shù)外部定義 的變量(沒有定義在某一個函數(shù)內(nèi)),所有函數(shù) 內(nèi)部 都可以使用這個變量提示:在其他的開發(fā)語言中,大多 可變范圍太大,導致程序不好維

10、護!不推薦使用全局變量 在函數(shù)內(nèi)部,可以 通過全局變量的引用獲取對應的數(shù)據(jù)但是, 使用賦值語句修改全局變量的值不允許直接修改全局變量的引用 python num = 10def demo1():print("demo1" + "-" * 50)#只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已num = 100 print(num)def demo2():print("demo2" + "-" * 50)print(num)demo1() demo2()print("over")注

11、意:只是在函數(shù)內(nèi)部定義了一個局部變量而已,只是變量名相同 在函數(shù)內(nèi)部不能直接修改全局變量的值2)在函數(shù)內(nèi)部修改全局變量的值如果在函數(shù)中需要修改全局變量,需要使用 global進行聲明python num = 10def demo1():print("demo1" + "-" * 50)# global 關(guān)鍵字,告訴 Python 解釋器 num是一個全局變量global num#只是定義了一個局部變量,不會修改到全局變量,只是變量名相同而已num = 100 print(num)def demo2():print("demo2" +

12、"-" * 50)print(num)demo1() demo2()print("over")3)全局變量定義的位置為了保證所有的函數(shù)都能夠正確使用到全局變量,應該 將全局變量定義在其他函數(shù)的上方python a = 10def demo(): print("%d" % a) print("%d" % b) print("%d" % c)b = 20 demo() c = 30注意由于全局變量 c,是在調(diào)用函數(shù)之后,才定義的,在執(zhí)行函數(shù)時,變量還沒有定義,所以程序會報錯!代碼結(jié)構(gòu)示意圖如下4)全

13、局變量命名的建議為了避免局部變量和全局變量出現(xiàn)混淆,在定義全局變量時,有些公司會有一些開發(fā)要求,例如:全局變量名前應該增加 g_ 或者 gl_的前綴提示:具體的要求格式,各公司要求可能會有些差異函數(shù)進階目標函數(shù)參數(shù)和返回值的作用函數(shù)的返回值 進階函數(shù)的參數(shù) 進階遞歸函數(shù)01.函數(shù)參數(shù)和返回值的作用函數(shù)根據(jù) 有沒有參數(shù) 以及 有沒有返回值,可以相互組合,一共有 4種 組合形式1.無參數(shù),無返回值2.無參數(shù),有返回值3.有參數(shù),無返回值4.有參數(shù),有返回值定義函數(shù)時,是否接收參數(shù),或者是否返回結(jié)果,是根據(jù) 實際的功能需求 來決定的!1.2.如果函數(shù) 內(nèi)部處理的數(shù)據(jù)不確定,就可以將外界的數(shù)據(jù)以參數(shù)傳

14、遞到函數(shù)內(nèi)部如果希望一個函數(shù) 執(zhí)行完成后,向外界匯報執(zhí)行結(jié)果,就可以增加函數(shù)的返回值1.1無參數(shù),無返回值此類函數(shù),不接收參數(shù),也沒有返回值,應用場景如下:1.只是單純地做一件事情,例如 顯示菜單2.在函數(shù)內(nèi)部 針對全局變量進行操作,例如:新建名片,最終結(jié)果 記錄在全局變量 中注意:如果全局變量的數(shù)據(jù)類型是一個 可變類型,在函數(shù)內(nèi)部可以使用 變量的引用不會改變方法 修改全局變量的內(nèi)容 在函數(shù)內(nèi)部,使用賦值語句 才會 修改變量的引用1.2無參數(shù),有返回值此類函數(shù),不接收參數(shù),但是有返回值,應用場景如下:采集數(shù)據(jù),例如 溫度計,返回結(jié)果就是當前的溫度,而不需要傳遞任何的參數(shù)1.3有參數(shù),無返回值此

15、類函數(shù),接收參數(shù),沒有返回值,應用場景如下:函數(shù)內(nèi)部的代碼保持不變,針對 不同的參數(shù) 處理 不同的數(shù)據(jù)例如 名片管理系統(tǒng) 針對 找到的名片 做 修改、刪除 操作1.4有參數(shù),有返回值此類函數(shù),接收參數(shù),同時有返回值,應用場景如下:函數(shù)內(nèi)部的代碼保持不變,針對 不同的參數(shù) 處理 不同的數(shù)據(jù),并且 返回期望的處理結(jié)果例如 名片管理系統(tǒng) 使用 字典默認值 和 提示信息 提示用戶輸入內(nèi)容如果輸入,返回輸入內(nèi)容如果沒有輸入,返回字典默認值02.函數(shù)的返回值 進階在程序開發(fā)中,有時候,會希望 一個函數(shù)執(zhí)行結(jié)束后,告訴調(diào)用者一個結(jié)果,以便調(diào)用者針對具體的結(jié)果做后續(xù)的處理返回值 是函數(shù) 完成工作后,最后 給調(diào)

16、用者的 一個結(jié)果在函數(shù)中使用 return關(guān)鍵字可以返回結(jié)果調(diào)用函數(shù)一方,可以 使用變量 來 接收 函數(shù)的返回結(jié)果問題:一個函數(shù)執(zhí)行后能否返回多個結(jié)果?示例 溫度和濕度測量假設(shè)要開發(fā)一個函數(shù)能夠同時返回當前的溫度和濕度先完成返回溫度的功能如下:python def measure(): """返回當前的溫度"""print("開始測量.") temp = 39print("測量結(jié)束.")return tempresult = measure() print(result) 在利用 元組 在返回溫

17、度的同時,也能夠返回 濕度改造如下:python def measure(): """返回當前的溫度"""print("開始測量.") temp = 39 wetness = 10 print("測量結(jié)束.")return (temp, wetness)提示:如果一個函數(shù)返回的是元組,括號可以省略技巧在 Python中,可以 將一個元組 使用 賦值語句 同時賦值給 多個變量注意:變量的數(shù)量需要和元組中的元素數(shù)量保持一致python result = temp, wetness = measure

18、()面試題 交換兩個數(shù)字題目要求1. 有兩個整數(shù)變量 a = 6, b = 1002.不使用其他變量,交換兩個變量的值解法 1 使用其他變量python解法 1 -使用臨時變量c = b b = a a = c 解法 2 不使用臨時變量python解法 2 -不使用臨時變量a = a + b b = a - b a = a - b 解法 3 Python專有,利用元組python a, b = b, a03.函數(shù)的參數(shù) 進階3.1.不可變和可變的參數(shù)問題 1 實參變量? :在函數(shù)內(nèi)部,針對參數(shù)使用 賦值語句,會不會影響調(diào)用函數(shù)時傳遞的 不會!無論傳遞的參數(shù)是 可變 還是 不可變只要 針對參數(shù)

19、使用 賦值語句,會在 函數(shù)內(nèi)部 修改 局部變量的引用,不會影響到 外部變量的引用python def demo(num, num_list):print("函數(shù)內(nèi)部")#賦值語句num = 200num_list = 1, 2, 3print(num) print(num_list)print("函數(shù)代碼完成")glnum = 99 gllist = 4, 5, 6 demo(glnum, gllist) print(glnum) print(gllist)問題 2:如果傳遞的參數(shù)是 可變類型,在函數(shù)內(nèi)部,使用 方法 修改了數(shù)據(jù)的內(nèi)容,同樣會影響到外部的

20、數(shù)據(jù)python def mutable(num_list):# num_list = 1, 2, 3 num_list.extend(1, 2, 3)print(num_list)gllist = 6, 7, 8 mutable(gllist) print(gl_list) 面試題 +=在 python 中,列表變量調(diào)用 += 本質(zhì)上是在執(zhí)行列表變量的 extend方法,不會修改變量的引用python def demo(num, num_list):print("函數(shù)內(nèi)部代碼")# num = num + numnum += num# num_list.extend(nu

21、m_list)由于是調(diào)用方法,所以不會修改變量的引用#函數(shù)執(zhí)行結(jié)束后,外部數(shù)據(jù)同樣會發(fā)生變化num_list += num_listprint(num) print(num_list) print("函數(shù)代碼完成")glnum = 9 gllist = 1, 2, 3 demo(glnum, gllist) print(glnum) print(gllist)3.2缺省參數(shù)定義函數(shù)時,可以給 某個參數(shù) 指定一個默認值,具有默認值的參數(shù)就叫做 缺省參數(shù)調(diào)用函數(shù)時,如果沒有傳入 缺省參數(shù) 的值,則在函數(shù)內(nèi)部使用定義函數(shù)時指定的 參數(shù)默認值函數(shù)的缺省參數(shù),將常見的值設(shè)置為參數(shù)的缺

22、省值,從而 簡化函數(shù)的調(diào)用例如:對列表排序的方法python glnumlist = 6, 3, 9默認就是升序排序,因為這種應用需求更多glnumlist.sort() print(glnumlist)只有當需要降序排序時,才需要傳遞 reverse參數(shù)glnumlist.sort(reverse=True) print(glnumlist) 指定函數(shù)的缺省參數(shù)在參數(shù)后使用賦值語句,可以指定參數(shù)的缺省值python def print_info(name, gender=True):gender_text = "男生" if not gender:gender_text

23、= "女生"print("%s 是 %s" % (name, gender_text)提示1.缺省參數(shù),需要使用 最常見的值 作為默認值!2.如果一個參數(shù)的值 不能確定,則不應該設(shè)置默認值,具體的數(shù)值在調(diào)用函數(shù)時,由外界傳遞!缺省參數(shù)的注意事項1)缺省參數(shù)的定義位置必須保證 帶有默認值的缺省參數(shù) 在參數(shù)列表末尾所以,以下定義是錯誤的!python def print_info(name, gender=True, title):2)調(diào)用帶有多個缺省參數(shù)的函數(shù)在 調(diào)用函數(shù)時,如果有 多個缺省參數(shù),需要指定參數(shù)名,這樣解釋器才能夠知道參數(shù)的對應關(guān)系!pyth

24、on def print_info(name, title="", gender=True): """:param title:param name:職位班上同學的姓名:param gender: True 男生 False"""女生gender_text = "男生"if not gender:gender_text = "女生"print("%s%s 是 %s" % (title, name, gender_text)提示:在指定缺省參數(shù)的默認值時,應

25、該使用最常見的值作為默認值!printinfo("小明") printinfo("老王", title="班長") print_info("小美", gender=False)3.3多值參數(shù)(知道)定義支持多值參數(shù)的函數(shù)有時可能需要 一個函數(shù) 能夠處理的參數(shù) 個數(shù) 是不確定的,這個時候,就可以使用 多值參數(shù)python中有 兩種 多值參數(shù):參數(shù)名前增加 可以接收 元組一個 *參數(shù)名前增加 可以接收 字典兩個 *一般在給多值參數(shù)命名時,習慣使用以下兩個名字*args 元組 參數(shù),前面有一個 *存放*kwargs 字典

26、 參數(shù),前面有兩個 *存放args 是 arguments的縮寫,有變量的含義kw 是 keyword 的縮寫,kwargs可以記憶 鍵值對參數(shù)python def demo(num, *args, *kwargs):print(num) print(args) print(kwargs)demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)提示:多值參數(shù) 的應用會經(jīng)常出現(xiàn)在網(wǎng)絡(luò)上一些大牛開發(fā)的框架中,知道多值參數(shù),有利于我們能夠讀懂大牛的代碼多值參數(shù)案例 計算任意多個數(shù)字的和需求1. 定義一個函數(shù) sum_numbers,可以接收的 任意多個整數(shù)2.功能要求:將傳遞的 所有數(shù)字累加 并且返回累加結(jié)果python def sum_numbers(*args):num = 0# 遍歷 argsfor n in args: num += n元組順序求和return numprint(sum_numbers(1, 2, 3) 元組和字典的拆包(知道)在調(diào)用帶有多值參數(shù)的函數(shù)時,如果希望:將一個元組變量,直接傳遞給 args將一個字典變量,直接傳遞給

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論