溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python局部變量和全局變量

發(fā)布時(shí)間:2020-08-31 00:01:13 來源:網(wǎng)絡(luò) 閱讀:185 作者:qq5d6f345f0205e 欄目:編程語言

在python開發(fā)中,變量也是有生命周期的,一旦周期結(jié)束,程序會(huì)自動(dòng)清理暫用的空間,釋放內(nèi)存,變量分為兩者,一種是局部變量,一種是全局變量,兩者具體有什么區(qū)別呢……

?

python局部變量和全局變量

?

一.局部變量

一般而言在函數(shù)內(nèi)部或者類中聲明的變量默認(rèn)都是局部變量。一旦函數(shù)結(jié)束,變量的生命周期也會(huì)結(jié)束,占用的空間會(huì)被自動(dòng)釋放。

1

2

3

4

5

6

7

8

def func1():

????# 在函數(shù)內(nèi)部定義的變量默認(rèn)都是局部變量

????a = 1

????print(a)

????# 函數(shù)結(jié)束,局部變量a的生命周期結(jié)束

?

# 由于a是局部變量,并且a的生命周期已經(jīng)結(jié)束,外部再次調(diào)用局部變量a,程序會(huì)產(chǎn)生異常,崩潰

print(a)

程序報(bào)錯(cuò):NameError: name ‘a(chǎn)’ is not defined ,原因:函數(shù)內(nèi)部定義的局部變量只能在函數(shù)內(nèi)部使用。

?

二.全局變量

全局變量和局部變量相反,在函數(shù)外部或者類外部聲明的變量默認(rèn)為全局變量。全局變量的生命周期直到程序結(jié)束才會(huì)結(jié)束,比局部變量生命周期更長。

1

2

3

4

5

6

7

8

9

a = 2

def func1():

????print(a)

????# 函數(shù)結(jié)束,局部變量的生命周期結(jié)束

????# 全局變量直到程序結(jié)束,生命周期才結(jié)束

?

func1()

# 輸出全局變量a

print(a)

輸出結(jié)果:

1

2

2

2

?

三.局部變量和全局變量的區(qū)別

1.全局變量的生命周期是直到程序結(jié)束,而局部變量生命周期是函數(shù)結(jié)束;

2.如果需要在函數(shù)內(nèi)部修改全局變量的值,需要在函數(shù)內(nèi)部為該全局變量前面加上?global 關(guān)鍵字,?否則該變量默認(rèn)為函數(shù)內(nèi)部定義的局部變量,示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(個(gè)人博客地址): shuopython.com

@WeChat Official Account(微信公眾號(hào)):猿說python

@Github:www.github.com

@File:python_global.py

@Time:2019/10/10 21:00

?

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

"""

# 在函數(shù)內(nèi)部定義的變量默認(rèn)都是局部變量

a = 2

def func1():

????# global a # 聲明 a 是全局變量,在該函數(shù)內(nèi)部對(duì)a的操作就是對(duì)全局變量a的操作

????a = 1??????# 如果沒有上一行代碼,默認(rèn)a就是函數(shù)內(nèi)部的局部變量,函數(shù)結(jié)束,生命周期結(jié)束

????print(a)

????# 函數(shù)結(jié)束,局部變量的生命周期結(jié)束

?

?

func1()

# 輸出全局變量a

print(a)

輸出結(jié)果:

1

2

1

2

是不上覺得很奇怪:為什么最后一個(gè)值是2,應(yīng)該是1才對(duì)?

因?yàn)闆]有第17行代碼的話,默認(rèn)a只是函數(shù)內(nèi)部的一個(gè)普通局部變量,所以函數(shù)內(nèi)部的print函數(shù)輸出到控制臺(tái)是1;函數(shù)結(jié)束,函數(shù)內(nèi)部的局部變量a值生命周期結(jié)束,執(zhí)行fun1函數(shù)之后的print函數(shù)輸出的是全局變量a的值2.

也就是說函數(shù)內(nèi)部對(duì)a值得修改并沒有成功,只有在函數(shù)內(nèi)部,為全局變量加上關(guān)鍵字global聲明為全局變量,才能修改成功,取消第17行得注釋,控制臺(tái)輸出:

1

2

1

1

?

python局部變量和全局變量

?

四.重點(diǎn)總結(jié)

1.注意局部變量和全局變量的生命周期;

2.如果想在函數(shù)內(nèi)部修改全局變量的值,需要加上關(guān)鍵字global;

?

猜你喜歡:

1.python變量

2.pycharm設(shè)置頭文件模板

?

轉(zhuǎn)載請(qǐng)注明:猿說Python???python局部變量和全局變量

?


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI