python設置全局變量失敗_Python全局變量與global關鍵字常見錯誤解決方案

在Python的變量使用中,經常會遇到這樣的錯誤:

local variable 'a' referenced before assignment

它的意思是:局部變量“a”在賦值前就被引用了。

比如運行下面的代碼就會出現這樣的問題:

a = 3

def Fuc():

print (a)

a = a + 1

Fuc()

? 但是如果把 a = a + 1 這一句刪除又不會出現上述問題了

a = 3

def Fuc():

print (a)

Fuc()

? 原來,在Python中,a=3 定義了全局變量a,作用域從定義處到代碼結束,在 a=3 以下的函數中是可以引用全局變量a的,但如果要修改函數中與全局變量同名的變量,則函數中的該變量就會變成局部變量,在修改之前對該變量的引用自然會出現未分配或未定義的錯誤了。

? 如果確定要引用并修改全局變量必須加上global關鍵字

a = 3

def Fuc():

global a

print (a)

a=a+1

Fuc()

注意要領:哪個函數需要修改全局變量,在函數中聲明一下即可。

? 但是有一個函數特殊,那就是主函數:

a = 3

def Fuc():

global a

print (a) # 1

a = a + 1

if __name__ == "__main__":

print (a) # 2

a = a + 1

Fuc()

print (a) # 3

?輸出如下(Python3環境下):

三個print執行的順序為:2, 1, 3 。可以看到主函數中并沒有global聲明變量a,仍然可以修改全局變量a。而在普通函數中,需要global聲明變量a,才可以修改全局變量a。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/lincappu/p/13182443.html

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

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

相關文章

Atititi tesseract使用總結

Atititi tesseract使用總結 消除bug,優化,重新發布。當前版本為3.02 項目下載地址為:http://code.google.com/p/tesseract-ocr。 Windows cmd命令行使用Tesseract-OCR引擎識別驗證碼: 1、下載安裝Tesseract-OCR引擎(3.0版本才支持中文識別) t…

Javascipt數組去重的幾種方式

方法一 function unique(arr) {var retArr [];for (var i 0; i < arr.length; i) {(retArr.indexOf(arr[i]) -1) && retArr.push(arr[i]);}return retArr; } 方法二 function unique(arr) {return arr.filter(function(item, index, array) {return array.indexO…

01_JS語法

JS語法 嚴格區分大小寫以;結尾&#xff0c;不寫瀏覽器會自動加&#xff0c;但不準確&#xff0c;且會占用瀏覽器資源自動忽略多個空格和換行 寫在哪 所有JS代碼都必須依托網頁運行 內嵌 寫在html的script標簽中 <script>// JS代碼 </script>事件 寫在某個ht…

pythonwhile循環love_python基礎之while循環及編碼

while 條件&#xff1a;循環體死循環&#xff1a;沒有終止條件(修改方法&#xff1a;1.改變條件2.使用break)break 終止當前循環contiune&#xff1a;跳出本次循環&#xff0c;繼續下次循環break和contione必須在循環體里while 條件&#xff1a;循環體else&#xff1a;結果當wh…

css頁面布局

居中布局 水平居中 父元素和子元素的寬度都未知 inline-block text-ailgn .child{display:inline-block;} .parent{text-align:center;} 優點&#xff1a;兼容性好 缺點&#xff1a;子元素文本繼承了text-align屬性&#xff0c;子元素要額外加text-align:left; table ma…

02_JS變量

JS變量 字面量 常量&#xff0c;不可變量 變量 變量用 var 變量名聲明 命名 變量命名以數字字母下劃線和$組成&#xff0c;不能以數字開頭&#xff0c;還可以是utf-8的任意字符&#xff0c;包括中文&#xff0c;一般采用駝峰命名法 常用的幾個函數 alert():瀏覽器彈窗d…

Rotate String

Given a string and an offset, rotate string by offset. (rotate from left to right) Example Given "abcdefg". offset0 > "abcdefg" offset1 > "gabcdef" offset2 > "fgabcde" offset3 > "efgabcd"分析&am…

音視頻播放、錄音、拍照

音頻 在iOS中音頻播放從形式上可以分為音效播放和音樂播放。前者主要指的是一些短音頻播放&#xff0c;通常作為點綴音頻&#xff0c;對于這類音頻不需要進行進度、循環等控制。后者指的是一些較長的音頻&#xff0c;通常是主音頻&#xff0c;對于這些音頻的播放通常需要進行精…

python 遞歸函數與循環的區別_提升Python效率之使用循環機制代替遞歸函數

斐波那契數列當年&#xff0c;典型的遞歸題目&#xff0c;斐波那契數列還記得嗎&#xff1f;def fib(n):if n1 or n2:return 1else:return fib(n-1)fib(n-2)當然, 為了程序健壯性&#xff0c;加上try...except...def fib(n):if isinstance(n, int):print(兄弟,輸入正整數哈)ret…

03_JS數據類型

JS數據類型 基本數據類型 String 字符串類型&#xff0c;申明時用單引號或雙引號引起來&#xff0c;兩種引號不可嵌套&#xff0c;不可混用 Number 數值型&#xff0c;有兩個特殊的數字 Infint:無窮大NaN&#xff1a;非數值型數字&#xff0c;不與任何類型相等 Boolean …

7.5

姓名 崔巍 時間 2016年7月5日 學習內容 最后一次確定同步控制力度等實現細節。 學習了Visual Studio C#軟件測試方面的工具。鞏固了等價類黑盒測試方法的相關理論&#xff0c;并且學習了集成測試、回歸測試的相關內容&#xff0c;并進行了測試。 集成測試&#xff0c;…

python scratch ev3_如何在scratch上連接樂高ev3?

樂高教育的官網有關于EV3使用Python的詳細介紹https://education.lego.com/zh-cn/support/mindstorms-ev3/python-for-ev3?education.lego.com來自網易有道Scratch是現在小朋友們最熱的編程工具&#xff0c;也是各學校和培訓機構對小學生編程的入門首選。網易有道Kada平臺是一…

04_JS運算符

JS運算符 一元運算符 -,正負號&#xff0c;對非數值類型做正負操作會先轉換成數值型&#xff0c;可以用快速進行類型轉換 邏輯運算符 且 &&&#xff0c;從左到右看&#xff0c;一旦返現值為false的表達式立刻返回false&#xff0c;全真為真或 ||&#xff0c;從左到右…

C語言 第八章 函數、指針與宏

一、函數 函數是一個包含完成一定功能的執行代碼段。我們可以把函數看成一個"黑盒子", 你只要將數據送進去就能得到結果, 而函數內部究竟是如何工作的的, 外部程序是不知道的。外部程序所知道的僅限于輸入給函數什么以及函數輸出什么。函數提供了編制程序的手段,使之…

ByteBuffer用法小結

在NIO中,數據的讀寫操作始終是與緩沖區相關聯的.讀取時信道(SocketChannel)將數據讀入緩沖區,寫入時首先要將發送的數據按順序填入緩沖區.緩沖區是定長的,基本上它只是一個列表,它的所有元素都是基本數據類型.ByteBuffer是最常用的緩沖區,它提供了讀寫其他數據類型的方法,且信道…

promise用法_Promise的秘密

寫在前面本篇文章將會帶大家從分解promise入手&#xff0c;一步步實現一個promise。但閱讀之前需要比較熟練地了解了解用法&#xff0c;結合用法看文章可能更容易理解。結構先看一下簡單的用法。const promise new Promise((resolve, reject) > {setTimeout(() > {resol…

SpringMVC視圖解析器(轉)

前言 在前一篇博客中講了SpringMVC的Controller控制器&#xff0c;在這篇博客中將接著介紹一下SpringMVC視圖解析器。當我們對SpringMVC控制的資源發起請求時&#xff0c;這些請求都會被SpringMVC的DispatcherServlet處理&#xff0c;接著Spring會分析看哪一個HandlerMapping定…

05_JS流程控制語句

JS流程控制語句 順序結構 選擇結構 if-else語句 var aprompt(); var bprompt(); var cprompt(); if(a && b || c){alert(); }else if(a || b || c){alert(); }else{alert(); }條件分支語句 var aprompt(); switch(a){case 1:alert("1");break;case 2:al…

ForkJoinPool 學習示例

在JAVA7之前&#xff0c;并行處理數據非常麻煩。第一&#xff0c;你得明確把包含數據的數據結構分成若干份。第二&#xff0c;你要將每個子部分分配給一個獨立的線程。第三&#xff0c;你要在恰當的時候對它們進行同步避免不希望的競爭條件&#xff0c;等待所有線程完成&#x…

python深入_Python深入(上)

作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01;到現在為止&#xff0c;Python學習已經可以告一段落。下面的部分&#xff0c;我想討論Python的高級語法和底層實現。這一部分的內容并不是使用Pyt…