新聞中心
我們首先看一下變量的分類,通常情況下,我們所說到的定義一個(gè)變量,如果沒有特殊說明,那么就是定義一個(gè)全局變量。

全局變量
在模塊內(nèi)、在所有函數(shù)外面、在class外面,這就是全局變量
局部變量
在函數(shù)內(nèi)、在class的方法內(nèi)(未加self修飾),這就是局部變量
靜態(tài)變量
在class內(nèi)的,但不在class的方法內(nèi)的,這就是靜態(tài)變量
實(shí)例變量
在class的方法內(nèi)的,用self修飾的變量,這就是實(shí)例變量
全局變量
全局變量供全局共享,全局類和函數(shù)均可訪問,達(dá)到同步作用。同時(shí)還可以被外部文件訪問。
使用
全局變量使用的時(shí)候,需要用global顯示聲明。
一般情況下,如果函數(shù)直接調(diào)用全局變量,不做更新的話,一般沒有問題,但如果有重新賦值,又沒有在函數(shù)內(nèi)部使用 global聲明的話, 就相當(dāng)于在內(nèi)部創(chuàng)建了一個(gè)同名的局部變量,局部變量優(yōu)先級要高于全局變量。
# coding:utf-8 _all = 'HelloWorld' # 全局變量 _all_list = [] # 全局變量 def printall(): global _all # 這里需要用global顯示聲明 print _all # HelloWorld
局部變量
# coding:utf-8 def show(): city = 'Beijing' # 局部變量 print city
靜態(tài)變量
可以稱為是類變量,通過類名可以直接訪問,也可以通過實(shí)例名直接訪問,此變量在類中全局共享,實(shí)例之間也是全局共享??梢钥聪旅鎸?shí)例
# coding:utf-8 class foo: all = 0 def add(self): foo.q += 1 instance01 = foo() # 實(shí)例化對象1 instance02= foo() # 實(shí)例化對象2 print instance01.all # 執(zhí)行結(jié)果為:0 print instance02.all # 執(zhí)行結(jié)果為:0 print foo.all # 執(zhí)行結(jié)果為:0 instance01.add() print instance01.all # 執(zhí)行結(jié)果為:1 print instance02.all # 執(zhí)行結(jié)果為:1 print foo.all # 執(zhí)行結(jié)果為:1 instance02.add() print instance01.all # 執(zhí)行結(jié)果為:2 print instance02.all # 執(zhí)行結(jié)果為:2 print foo.all # 執(zhí)行結(jié)果為:2
實(shí)例變量
對于模塊來說,有了自己的全局變量,可以供自己內(nèi)部的類,函數(shù)使用,同步;對于函數(shù)或者類方法來說,有了自己的局部變量,供自己內(nèi)部使用;對于類,有了靜態(tài)變量,可以供內(nèi)部和有繼承關(guān)系的父子之際使用,同步;但實(shí)例之間各自的私有變量(局部變量)就要靠實(shí)例變量了,實(shí)現(xiàn)了動態(tài)綁定,多態(tài)特性。
用self來修飾
# coding:utf-8
class foo:
all = 0
def __init__(self, name):
self.name = name
def add(self):
foo.q += 1
instance01 = foo('hello')
instance02 = foo('hi')
print instance01.name # hello
print instance02.name # hi
print foo.name # AttributeError:class foo has no attribute 'name'
總結(jié)
在整個(gè)代碼組織的過程中,一般會有這樣兩種基本需求,私有 和 公有。
私有
不與其他共享,自己獨(dú)享,如函數(shù)和方法的局部變量,實(shí)例變量
公有
需要在一定范圍內(nèi)共享,達(dá)到同步目的,如模塊內(nèi)的代碼共享的全局變量,類與子類之間共享的靜態(tài)變量。
更多學(xué)習(xí)內(nèi)容,請點(diǎn)擊Python學(xué)習(xí)網(wǎng)。
新聞標(biāo)題:創(chuàng)新互聯(lián)Python教程:如何在Python中定義變量
標(biāo)題URL:http://m.5511xx.com/article/cdosdos.html


咨詢
建站咨詢
