Python基礎-變量作用域

1.函數作用域介紹

Python基礎-變量作用域

?

函數作用域

Python中函數作用域分為4種情況:

  • L:local,局部作用域,即函數中定義的變量:
  • E:enclosing,嵌套的父級函數的局部作用域,即包含此函數的上級函數的局部作用域,但不是全局的。
  • G:global,全局變量,即模塊級別定義的變量,在模塊開始、函數外定義的變量。
  • B:built-in,系統固定模塊里的變量,比如int,bytearray等。

搜索變量的優先級順序依次是:局部作用域 > 外層作用域 > 當前模塊中全局作用域 > python內置作用域,也就是

L > E > G > B

實例說明:

Python基礎-變量作用域

?

2.作用域產生

Python中,只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域,其它的代碼塊(如if、try、for等)是不會引入新的作用域的,如下代碼:

  • if 2 > 1 :
  • x = 2
  • print(x) #2

if并沒有引入一個新的作用域,x仍處在當前作用域中,后面代碼可以使用。

  • def test():
  • x = 2
  • print(x) # NameError: name 'x' is not defined

def、class、lambda是可以引入新作用域的。

3.global關鍵字

當內部作用域想修改外部作用域的變量時,就要用到global和nonlocal關鍵字了,當修改的變量是在全局作用域(global作用域)上的,就要使用global先聲明一下,代碼如下:

age = 22
def change_age() :
global age # 聲明一個age全局變量
print( '修改前: %s',age)
age = 24
print(' 修改后: %s', age )
change_age()
# 修改前:22
#修改后 :24

4. nonlocal關鍵字

global關鍵字聲明的變量必須在全局作用域上,不能嵌套作用域上,當要修改嵌套作用域(enclosing作用域,外層非全局作用域)中的變量怎么辦呢,這時就需要nonlocal關鍵字了。

def outer():
count = 10
def inner():
nonlocal count
print('修改前:%s',count)
count = 20
print('修改后:%s ' ,count)
inner()
print(count)
outer()
#修改前:10
#修改后:20
#20

?

5.小結:

(1)變量查找順序:LEGB,作用域局部>外層作用域>當前模塊中的全局>python內置作用域;

(2)只有模塊、類、及函數才能引入新作用域;

(3)對于一個變量,內部作用域先聲明就會覆蓋外部變量,不聲明直接使用,就會使用外部作用域的變量;

(4)內部作用域要修改外部作用域變量的值時,全局變量要使用global關鍵字,嵌套作用域變量要使用nonlocal關鍵字,nonlocal是python3新增的關鍵字。

轉載于:https://www.cnblogs.com/jiangzhaowei/p/9045465.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻源常見接口介紹

在錄制和播放中,要通過接口實現文件的傳輸,下面介紹常用接口。 [AV IN/OUT/PHONES]:這是一個多功能的插孔,在菜單里可以設置其功能。當設置為[IN/OUT]時,此插孔可以輸入和輸出音頻以及視頻信號,用于連接電視…

php愛奇藝篩選標簽,三種排序 快速篩選好視頻_軟件資訊技巧應用-中關村在線

使用在線視頻播放器來觀看視頻,通常有可以分為有目標和無目標兩種。即是用戶如果定點找一部視頻和隨意查看喜歡的視頻,這兩種模式往往查找視頻的方法也是不一樣的。我們這里要和大家講解的是,用戶在沒有目標視頻的情況下,怎樣更快…

TSAP傳輸服務訪問點

TSAP(Transport Service Access Point) 傳輸服務訪問點在計算機網絡當中,傳輸層要在用戶之間提供可靠和有效的端-端(如TSAP源端->[1]TSAP目的端的傳輸選擇)服務,必須把一個用戶進程和其他的用戶進程區分開,主要由傳…

Flask項目--發送短信驗證碼

1.后端代碼 具體代碼如下&#xff1a; # GET /api/v1.0/sms_codes/<mobile>?image_codexxxx&image_code_idxxxx api.route("/sms_codes/<re(r1[34578]\d{9}):mobile>") def get_sms_code(mobile):"""獲取短信驗證碼""&q…

Jenkins系列之五——通過Publish over SSH插件實現遠程部署

Jenkins通過Publish over SSH插件實現遠程部署 步湊一、配置ssh免秘鑰登錄 部署詳情地址&#xff1a;http://www.cnblogs.com/Dev0ps/p/8259099.html 步湊二、安裝Publish over SSH插件 插…

Java高級應用開發之Servlet

學習路徑&#xff1a; 1.Servlet簡介 2.Servlet基礎 3.表單處理 4.請求頭信息 5.響應頭信息 6.cookie 7.session 8.scope: Servlet Context 全局變量 Http Session 會話變量 Http Servlet Request 請求變量 9.Filter Filter是一種特殊的Servlet&#xff0c;其核心函數doFilter(…

typedef 數組使用詳解

typedef到處都是&#xff0c;但是能夠真正懂得typedef使用的不算太多。對于初學者而言&#xff0c;看別人的源碼時對到處充斥的typedef往往不知所錯&#xff0c;而參考書又很少&#xff0c;所以在此給出一個源碼&#xff0c;供大家參考。 懂得這些&#xff0c;基本上是 對typed…

php柱狀圖實現年齡分布,考官雅思寫作小作文滿分范文 柱狀圖:年齡分布

考官雅思寫作小作文滿分范文 柱狀圖:年齡分布2017年06月12日14:48 來源&#xff1a;小站教育作者&#xff1a;小站雅思編輯參與(40)閱讀(63981)摘要&#xff1a;為大家分享前考官simon演示的9分雅思小作文。考官親筆&#xff0c;用最正統的4段式寫作&#xff0c;本文主題-柱狀圖…

Flask項目--注冊

0.效果展示 1.后端代碼 # coding:utf-8from . import api from flask import request, jsonify, current_app, session from ihome.utils.response_code import RET from ihome import redis_store, db, constants from ihome.models import User from sqlalchemy.exc import I…

圖片處理

//圖片處理public function img(){//讀取圖片$imageImage::open(./img/02.jpg);//dump($image);//獲取圖片的信息// 返回圖片的寬度$width $image->width();// 返回圖片的高度$height $image->height();// 返回圖片的類型$type $image->type();// 返回圖片的mime類…

react 項目總結

前言 最近在寫一個項目,在寫react的過程中遇到過很多坑,現在總結一下,為以后的項目作參考.另外借此項目來比較一下 vue.js 和 react.js 之間的一些異同. 先說說組件 剛剛開始寫組件的時候&#xff0c;感覺難度不大&#xff08;跟vue差不多&#xff09;。最有意思的應該是jsx語法…

現代數字影視 電影使用標準

1、國際數字電影標準1&#xff09;DCI&#xff08;Digital Cinema Initiatives數字影院系統規范&#xff09;美國好萊塢七大制片公司——Disney、MGM、Fox、Paramount Pictures、Sony Pictures Entertainment、Universal Studios和Warner Bros于2002年聯合成立了DCI機構&#x…

數據流圖 系統流程圖 程序流程圖 系統結構圖聯系與區別

1.數據流圖&#xff08;Data Flow Diagram&#xff09;&#xff0c;簡稱DFD&#xff0c;它從數據傳遞和加工角度&#xff0c;以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程&#xff0c;是結構化系統分析方法的主要表達工具及用于表示軟件模型的一種…

Linux--安裝yum源

linux配置yum源 一、修改yum的配置文件 /etc/yum.repos.d/xxx.repo 1、進入yum配置文件目錄 # cd /etc/yum.repos.d 2、刪除全部原有的文件 # rm -rf * 3、新建一個yum的配置文件 # vi my.repo [myrepo] 標識配置文件名稱&#xff08;名字隨意&#xff09; namemyrepo 標識yum …

在 Confluence 6 中禁用 workbox 應用通知

如果你選擇 不提供應用通知&#xff08;does not provide in-app notifications&#xff09;&#xff1a; Confluence workbox 圖標將不會可見同時用戶也不能在這個服務器上訪問 workbox。這個 Confluence 服務器將不會發送消息到 workbox 中&#xff0c;同時也不會發送消息到其…

迄今為止最快的 JSON 序列化工具 Jil

2019獨角獸企業重金招聘Python工程師標準>>> 迄今為止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 轉載于:https://my.oschina.net/xainghu/blog/1621365

mysql數據庫訪問編程,mysql 連接數據庫

1、首先啟動mysql 并鏈接數據 小意思吧&#xff01;都會了是吧mysql -uroot -p //連接數據net start mysql // 啟動mysql2、查詢當前 服務器里有哪些數據show databases;3、創建數據庫create database jddb -------數據庫名字(jddb)4、 使用數據庫use jddb;5、查詢當前數據庫下…

linux多線程 pthread用法

#include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); Returns: 0 if OK, error number on failure 第一個參數為指向線程標識符的指針。 第二個參數用來設置線程屬性。 第三個參數是…

什么是數據字典

數據字典是指對數據的數據項、數據結構、數據流、數據存儲、處理邏輯、外部實體等進行定義和描述&#xff0c;其目的是對數據流程圖中的各個元素做出詳細的說明。 數據字典最重要的作用是作為分析階段的工具。任何字典最重要的用途都是供人查詢對不了解的條目的解釋&#xff0c…

Flsak愛家租房--個人信息

0.頁面展示效果 1.設置用戶頭像–后端代碼 # coding:utf-8from . import api from ihome.utils.commons import login_required from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.utils.image_storage impo…