python局部靜態變量_全局變量、局部變量和靜態變量

全局變量和局部變量在寫代碼時需要區分清楚,不然會出大問題。不同語言定義不同范圍的變量的寫法有很大的區別。

那么靜態變量是在什么場景下用到呢?我們來假設這樣一個場景:在函數內部定義的變量,當程序執行到它的定義處時,編譯器為它在棧上分配空間,函數在棧上分配的空間在此函數執行結束時會釋放掉,這樣就產生了一個問題: 如果想將函數中此變量的值保存至下一次調用時,如何實現? 最容易想到的方法是定義為全局的變量,但定義一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數中定義的變量,不僅僅只受此函數控制)。static關鍵字則可以很好的解決這個問題。另外,在C++和java中,需要一個數據對象為整個類而非某個對象服務,同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內部,對外不可見時,可將其定義為靜態數據。

在c中,靜態全局變量和全局變量的區別在于,全局變量其他文件可以訪問,但是靜態全局變量只能被當前文件中的函數訪問。

c/c++的寫法

int globalVar = 1; //全局變量static int staticVar = 2; //靜態全局變量

void VarDemo() {

int localVar = 3; //局部變量 static int staticVar2 = 4; //仍然為局部變量 printf("globalVar=%d\n" + globalVar);

printf("staticVar=%d\n" + staticVar);

printf("localVar=%d\n" + localVar);

}

java的寫法

class HelloWorld{

public int globalVar = 1;

public static int staticVar = 2;

public static void main(String[] args) {

int localVar = 3;

System.out.println("localVar="+String.valueOf(localVar));

System.out.println("staticVar="+String.valueOf(staticVar));

}

}

go的寫法

var globalVar int=0 //只能被本包內函數訪問的全局變量var GlobalVar int = 1 //可以在任何包內被訪問的全局變量

func varDemo() {

localVar := 2 //局部變量fmt.Println("globalVar=", globalVar)

fmt.Println("GlobalVar=", GlobalVar)

fmt.Println("localVar=", localVar)

}

func main() {

varDemo()

}

python的寫法

global_var = 1 # 定義全局變量

def var_demo():

local_var = 2 # 定義局部變量

print("global_var=", global_var)

print("local_var=", local_var)

if __name__ == "__main__":

var_demo()

總結對比:

1. 一般情況下全局變量定義函數外,局部變量定義函數內;全局變量作用范圍是全局,局部變量作用范圍在函數內;

2. 靜態變量定義在函數外,則為靜態全局變量,作用范圍為當前文件;定義在函數內,則為局部靜態變量,作用范圍同局部變量;

3. 如果在全局范圍要經常用到某個值,則設置為靜態變量,否則定義為普通全局變量即可;

4. c、c++和java可以定義靜態變量,go和python不能定義靜態變量;

5. go的全局變量有兩種,一種是可以在包內被訪問的,一種是在其他包內也可以被訪問的,區別在于后一種全局變量的首字母為答謝,前一種為小寫;

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

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

相關文章

【轉載】fullpage.js學習

參考網址:http://www.dowebok.com/77.html 上面有詳細介紹及案例展示,很不錯哦,可以先去看看demo 一、簡介 fullPage.js 是一個基于jQuery的插件,它能夠很方便、很輕松的制作出全屏網站,主要功能有: 1.支持…

Deepin 下安裝 LAMP

ubuntu/deepin linux 下使用 apt-get 安裝所需套的軟件 LAMP 1. 安裝 apacache2 apt-get install apache2 配置文件:/etc/apache2/apache2.conf service apache2 start service apache2 stop service apache2 restart 2. 安裝 mysql sudo apt-get install my…

webpack打包測試_webpack入門筆記(一)

webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關系圖(dependency graph),其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個 bundle。webp…

[js高手之路] 跟GhostWu一起封裝一個字符串工具庫-擴展字符串位置方法(4)

本文,我們接著之前的框架繼續擴展,這次擴展了一共有5個與字符串位置相關的方法 between( left, right ) 返回兩個字符串之間的內容, 如果第二個參數沒有傳遞,返回的是找到的第一個參數 之后 到 字符串結尾的所有字符串 如果第二個…

ffmpeg和SDL學習筆記

根據ffmpeg官方網站上的例子程序開始學習ffmpeg和SDL編程。 SDL是一個跨平臺的多媒體開發包。適用于游戲,模擬器,播放器等應用軟件開發。支持linux 、win32 等操作系統。 主要應用: 視頻 設置8bpp或更高的任意色彩深度的視頻模式。如果某個…

百練-16年9月推免-B題-字符串判等

2743:字符串判等 查看提交統計提示提問總時間限制: 1000ms內存限制: 65536kB描述判斷兩個由大小寫字母和空格組成的字符串在忽略大小寫,且忽略空格后是否相等。 輸入兩行,每行包含一個字符串。輸出若兩個字符串相等,輸出YES,否則輸…

mysql中的內置函數

mysql內置函數列表可以從mysql官方文檔查詢,這里僅分類簡單介紹一些可能會用到的函數。 1 數學函數 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1間的浮點數,使用不同的seed N可以獲得不同的隨機數 round(x, D)&#xff…

待整理

CNN 適合處理圖片類輸入數據,單獨的,數據之間沒有關系。 rnn則適合處理序列類數據,視頻幀,語言。 深度神經網絡一般指隱藏層大于2的神經網絡。深層網絡相對于淺層網絡,表達能力更強。僅有一個隱藏層的神經網絡就能擬合…

希爾伯特變換_學習筆記1-傅里葉變換1

最終目標是解微分方程。第一章首先介紹了一般意義下的傅里葉變換,之后逐漸將傅里葉變換的概念抽象化,將變換的定義域進行拓展。最后少量介紹傅里葉變換在偏微分方程中的應用。習題解答是自己寫的,有的不會,有的不知道對不對。傅里…

使用 sitemesh/decorator裝飾器裝飾jsp頁面(原理及詳細配置)

摘要:首先這個Decorator解釋一下這個單詞:“裝飾器”,我覺得其實可以這樣理解,他就像我們用到的Frame,他把每個頁面共有的東西提煉了出來,也可能我們也會用各種各樣的include標簽,將我們的常用頁…

FFPLAY的原理(一)

概要電影文件有很多基本的組成部分。首先,文件本身被稱為容器Container,容器的類型決定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接著,你有一組流,例如,你經常有的是一個音頻流和一個視頻流。&…

安卓開發 新浪微博share接口實現發帶本地圖片的微博

1.微博share接口 在開始之前,我們先看一下要用到的這個接口: 我們這次是要上傳本地圖片,可以很明確的知道,除了要用POST方式提交請求,還要采用multipart/form-data編碼方式。 那么這個multipart/form-data編碼方式是什…

python編寫裝飾器_我也來寫一下python裝飾器

有借用,但原文出處已經找不到了,根據筆記分享一下解釋器的基礎。下面的代碼表示,等待兩秒鐘,輸出‘test is running。現在要求增加統計程序運行時間的功能。等待兩秒鐘,輸出‘test is running,現要求增加統計程序運行時…

VirtualBox安裝Centos6.8出現——E_INVALIDARG (0x80070057)

VirtualBox使用已有的虛擬硬盤出錯: 問題描述:UUID已經存在 Cannot register the hard disk E:\system_iso\centos6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9} because a hard disk E:\system_iso\centos68_02\centos6.8.vdi with UUID {05f096aa-6…

DFT 與 ATPG綜 述

DFT 可測試性設計 工程會接觸 DFT。需要了解 DFT 知識,但不需要深入。 三種基本的測試(概念來自參考文檔): 邊界掃描測試:Boundary Scan Test: 測試目標是 IO-PAD,利用 JTAG 接口互連以方便 測試。&#x…

非線性動力學_非線性動力學特輯 低維到高維的聯通者

序言: 本文將以維度為主線, 帶量大家進入非線性動力學的世界。 文章數學部分不需要全部理解, 理解思維方法為主非線性動力學,是物理學的思維進入傳統方法所不能解決的問題的一座豐碑。它可以幫助我們理解不同復雜度和時間空間尺度…

Go語言channel與select原理

本文會嘗試解釋 go runtime 中 channel 和 select 的具體實現,部分內容來自 gophercon2017。Go版本為1.8.3channel 第一部分講述一下 channel 的用法。channel 可以看做一個隊列,用于多個goroutine之間的通信,例如下面的例子,一個…

Xadmin添加用戶小組件出錯

環境: Python 3.5.6 Django 2.1 Xadmin 原因: render函數在django2.1上有變化 解決方案: 1.在Python終端輸入命令help(xadmin) 查看xadmin安裝位置 得到如下輸出 FILE/root/anaconda3/envs/learndjango/lib/python3.5/site-packages/xad…

成本預算的四個步驟_全網推廣步驟有哪些?

全網推廣的步驟是什么?一般來說,搜索引擎優化是大多數中小企業常用的推廣方法。主要是通過對一些搜索引擎的排名來提高網站的曝光率,從而更好的提高自己網站的流量,從而更好的實現互聯網層面的銷售。接下來,讓我們學習…

undefined reference to `std::cout'等錯誤

(1)gcc和g都是GNU(組織)的一個編譯器。 (2)后綴名為.c的程序和.cpp的程序g都會當成是c的源程序來處理。而gcc不然,gcc會把.c的程序處理成c程序。 (3)對于.cpp的程序,編譯可以用gcc/g…