下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
234567234567globalxx=3y=4?>x=5?>demo()10全局變量:3?>?>x3?>y#在函數(shù)外部定義了全局變量x局部變量:4#嘗試著在函數(shù)外部訪問一下函數(shù)的局部變量《Python小屋》之三程序控制結構與函數(shù)設計3.3函數(shù)設計與使用變量作用域變量起作用的代碼范圍稱為變量的作用域,不同作用域內(nèi)同名變量之間互不影響,就想不同文件夾的同名文件之間互不影響一樣。一個變量在函數(shù)外部定義和在函數(shù)內(nèi)部定義,其作用域是不同的,函數(shù)內(nèi)部定義的變量一般為局部變量,在函數(shù)外部定義的變量為全局變量。在函數(shù)內(nèi)部定義的普通變量只在該函數(shù)內(nèi)起作用,當函數(shù)運行結束后,在其內(nèi)部定義的局部變量將被自動刪除而不可訪問。在函數(shù)內(nèi)部定義的全局變量當函數(shù)結束以后仍然存在并且可以訪問。如果想要在函數(shù)內(nèi)部修改一個定義在函數(shù)外的變量值,那么這個變量就不能是局部的,其作用域必須是全局的。可以在函數(shù)內(nèi)部通過global關鍵字來聲明或定義全局變量,這分兩種情況:(1)一個變量已在函數(shù)外定義,如果在函數(shù)內(nèi)需要修改這個變量的值,并將這個賦值結果反映到函數(shù)之外,可以在函數(shù)內(nèi)部用global明確聲明要使用已定義的同名全局變量。(2)在函數(shù)內(nèi)部直接使用global關鍵字將一個變量聲明為全局變量,如果在函數(shù)外沒有定義該全局變量,在調(diào)用這個函數(shù)之后,會自動增加新的全局變量?;蛘哒f,也可以這樣理解:在函數(shù)內(nèi)如果值引用某個變量的值而沒有為其賦新值,該變量為(隱式的)全局變量;<2〉如果在函數(shù)內(nèi)任意位置有為變量賦值的操作,該變量即被認為是(隱式的)局部變量,除非在函數(shù)內(nèi)顯式地用global進行聲明。下面的代碼演示了局部變量和全局變量的用法。1?>defdemo():#聲明或創(chuàng)建全局變量#修改全局變量的值#局部變量print(,全局變量:{}局部變量:{}'.format(x,y))15Traceback(mostrecentcalllast):16File"<pyshell#ll>,,/line1,in<module>y#嘗試著在函數(shù)外部訪問一下函數(shù)的局部變量NameError:name'y'isnotdefined?>?>delx#刪除在函數(shù)外部定義的全局變量?>?>x#嘗試訪問一下全局變量xTraceback(mostrecentcalllast):File,,<pyshell#15>",line1,in<module>x#嘗試訪問一下全局變量xNameError:name'x'isnotdefined?>?>demo()#再調(diào)用一次函數(shù),該函數(shù)會聲明全局變量哦29全局變量:3局部變量:4?>?>x#在函數(shù)內(nèi)部創(chuàng)建了全局變量x3?>?>v#局部變量在函數(shù)調(diào)用結束后自動刪除Traceback(mostrecentcalllast):36File"<pyshell#21>"/line1,in<module>yNameError:name'y1isnotdefined?>代碼塊如果局部變量與全局具有相同的名字,那么改局部變量會在自己的作用域內(nèi)隱藏同名的全局變量,例如下面的代碼所演示。?>defdemo():x=3#創(chuàng)建了局部變量,并自動隱藏了同名的全局變量print(x)?>x=5#創(chuàng)建全局變量?>x85?>?>demo()113?>x#函數(shù)調(diào)用后,不影響全局變量x的值5?>16#個人理解:17#局部變量的作用范圍是函數(shù)體內(nèi),即使和全局變量同名了,在函數(shù)體內(nèi)修改局部變量的值,也不會影響全局變量的值1819#在函數(shù)外修改全局變量的值,不會影響函數(shù)體內(nèi)局部變量的值代碼塊最后,如果需要在同一個程序的不同模塊之間共享全局變量,可以編寫一個專門的模塊來實現(xiàn)這一目的。例如,假設在模塊A.py中有如下變量定義:global_variable=0而在模塊B.py中使用以下語句修改全局變量的值:importAA.global_variable=1在模塊C.py中使用以下語句來訪問全局變量的值:importAprint(A.global_variable)小提示:(1)一般而言,局部變量的引用比全局變量速度快,應優(yōu)先考慮使用;(2)應盡量避免過多使用全局變量,因為全局變量會增加不同函數(shù)之間的隱式耦合度,降低代碼可讀性,并使得代碼測試和糾錯變得很困難。拓展知識:局部變量的空間是在棧上分配的,而??臻g是由操作系統(tǒng)維護的,每當調(diào)用一個函數(shù)時,操作系統(tǒng)會為其分配一個棧幀,函數(shù)調(diào)用結束后立刻釋放這個棧幀。因此,函數(shù)調(diào)用結束后,該函數(shù)內(nèi)部所有的局部變量都不再存在。拓展知識:除了局部變量和全局變量,Python還支持nonlocal關鍵字定義一種介于兩者之間的變量。例如下面代碼:defscope_test():defdo_local():spam='我是局部變量'defdo_nonlocal():nonlocalspam#這時要求spam必須是已存在的變量spamd我不是局部變量,也不是全局變量’defdo_global():globalspam#如果全局作用域內(nèi)沒有spam,就自動創(chuàng)建一個spam='我是全局變量’spam=1原來的值,do_local()print('局部變量賦值后:[spam)do_nonlocal()print('nonlocal變量賦值后。spam)do_global()20print('全局變量賦值后spam)212223scope_test()24print('全局變量:',spam)2526#局部變量賦值后:原來的值27#nonlocal變量賦值后:我不是局部變量,也不是全局
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度公寓樓租賃合同模板(含裝修設計、施工及家具家電配置)3篇
- 二零二五年度熱處理廢棄物處理與環(huán)保合同2篇
- 二零二五年度新能源科技公司股份轉(zhuǎn)讓合同3篇
- 二零二五年度車輛租賃平臺開發(fā)與運營合同3篇
- 2025年度農(nóng)村水井承包合同與水資源管理信息化建設協(xié)議
- 2025年度年度電子科技公司轉(zhuǎn)讓協(xié)議書3篇
- 2025解除買賣合同的通知書
- 2025年度離婚后房產(chǎn)分割及使用權協(xié)議3篇
- 2025年度低壓供用電設備節(jié)能改造與升級合同3篇
- 二零二五年度養(yǎng)生館綠色環(huán)保合作合同協(xié)議3篇
- 假結婚私下協(xié)議書
- 工程監(jiān)督中心鉆井液監(jiān)督培訓教材
- 附件1:中國聯(lián)通動環(huán)監(jiān)控系統(tǒng)B接口技術規(guī)范(V3.0)
- 運維人員崗位培訓(通信電源)實操手冊
- 鍋爐車間輸煤機組 PLC電氣控制系統(tǒng)設計
- 專題01《水銀花開的夜晚》 高考語文二輪復習
- 文件簽發(fā)單(標準模版)
- GB/T 9081-2008機動車燃油加油機
- 304不銹鋼焊接熱裂原因及解決方法計劃
- 施工臨時用電安全隱患大全對錯圖示一目了然
- 國家開放大學《經(jīng)濟數(shù)學基礎12》形考作業(yè)1-4
評論
0/150
提交評論