电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python命名空間namespace及作用域原理解析

瀏覽:88日期:2022-07-22 17:14:50

曾經學C++的時候,經常聽到這個名詞,它主要是為了避免命名沖突而產生的。

就像有A(4個蘋果),B(6個蘋果)兩個人,10個蘋果,如果只標簽了蘋果,你無法判斷哪個蘋果是屬于哪個人的,因為標簽都是一樣的;但是如果標簽是A.蘋果,B.蘋果,那么是不是很容易就知道了蘋果是誰的了。

命名空間:提供了一種從名稱到對象的映射;主要是通過字典來實現的。

在python中,函數、模塊等都有自己的命名空間:

局部命名空間(local namespace):即函數中定義的名稱 —— 包括函數中的變量、參數、局部變量等;

全局命名空間(global namespace):即模塊中定義的名稱 —— 包括模塊中的變量、函數、類、參數、常量、導入(import)的模塊等;

內置命名空間(built-in namespace):即python內置的名稱 —— 包括各種內置函數、Exception等;

而,當python需要使用變量時,會在上述命名空間中依次查找,順序是:

局部命名空間,全局命名空間、內置命名空間。

同一命名空間中不能有重名,但不同命名空間可以。

可以通過locals()、globals() 函數來獲取命名空間的值(字典),在程序的不同位置執行結果不一定一致,因為結果是針對當前位置來說的。

locals()

globals()

Python命名空間namespace及作用域原理解析

可以通過字典形式獲取其中的值:

Python命名空間namespace及作用域原理解析

作用域:可以理解為變量所起作用的范圍,超出范圍則某變量不能被使用。在python 程序中,直接訪問一個變量,會從內到外依次訪問所有的作用域直到找到,否則報錯。Python 中只有模塊(module),類(class)以及函數(def、lambda)才會產生新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會產生新的作用域的。

作用域可以分為四種:

Local:最內層,包含局部變量,一般指的是函數內部的作用域;

Enclosing:包含非局部但是也不是全局的變量,主要是嵌套時,外層函數的變量,那么相對內層函數來說,嵌套的外層函數中的變量既不是局部變量也不是全局變量。

Global:全局變量,例如當前模塊中的全局變量。

Build-in:內置變量。

查找順序一般是:Local--->Enclosing--->Global--->Build-in

def test1(): x1 = 1 #Enclosing 作用域 def test2(): x2 = 1 #Local 作用域 print(’x2=’,x2) x1 = 100 #很明顯,外層作用域中的x1沒有受到影響,因為這里的x1屬于Local test2() return x1aa = test1()print(’aa=’,aa)

Python命名空間namespace及作用域原理解析

要想修改外層作用域(上層)的變量,需要用到global和nonlocal關鍵字。(注意,修改和訪問不是一樣的程度)

def test1(): x1 = 1 #Enclosing 作用域 def test2(): x2 = 1 #Local 作用域 print(’x2=’,x2)nonlocal x1 x1 = 100 #通過nonlocal,將這里的x1作用域變化為Enclosing作用域,即影響到Enclosing作用域中的x1的值 test2() return x1aa = test1()print(’aa=’,aa)

Python命名空間namespace及作用域原理解析

def test1(): x1 = 1 # 這個x1屬于Enclosing 作用域 def test2(): x2 = 1 #Local 作用域 print(’x2=’,x2)global x1 # 這個x1屬于全局作用域 x1 = 100 #這里影響的是全局作用域中的x1值,并不會影響到Enclosing作用域中的值 test2() return x1 #返回的是當前作用域Enclosing中的x1的值aa = test1()print(’aa=’,aa)print(’x1=’,x1)

Python命名空間namespace及作用域原理解析

全局變量和局部變量

定義在函數內部的變量,擁有局部作用域,屬于局部變量。

定義在函數外部的變量,擁有全局作用域,屬于全局變量。

全局變量可以在整個全局作用域內訪問,但是要修改的話,需要用到global關鍵字。

更細節一點,若涉及到class:

全局變量:一般在模塊內、在所有函數外面、在class外面的變量。

局部變量:一般在函數內、在class的方法內(未加self修飾)的變量。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | EFM 022静电场测试仪-套帽式风量计-静电平板监测器-上海民仪电子有限公司 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 |