如何在Python中定義變數

2021-10-25 13:47:21 字數 2332 閱讀 5920

我們首先看一下變數的分類,通常情況下,我們所說到的定義乙個變數,如果沒有特殊說明,那麼就是定義乙個全域性變數。

全域性變數

在模組內、在所有函式外面、在class外面,這就是全域性變數

區域性變數

在函式內、在class的方法內(未加self修飾),這就是區域性變數

靜態變數

在class內的,但不在class的方法內的,這就是靜態變數

例項變數

在class的方法內的,用self修飾的變數,這就是例項變數

全域性變數

全域性變數供全域性共享,全域性類和函式均可訪問,達到同步作用。同時還可以被外部檔案訪問。

使用全域性變數使用的時候,需要用global顯示宣告。

一般情況下,如果函式直接呼叫全域性變數,不做更新的話,一般沒有問題,但如果有重新賦值,又沒有在函式內部使用 global宣告的話, 就相當於在內部建立了乙個同名的區域性變數,區域性變數優先順序要高於全域性變數。

# coding:utf-8

_all =

'helloworld'

# 全域性變數

_all_list =

# 全域性變數

defprintall()

:global _all # 這裡需要用global顯示宣告

print _all # helloworld

區域性變數

# coding:utf-8

defshow()

: city =

'beijing'

# 區域性變數

print city

靜態變數

可以稱為是類變數,通過類名可以直接訪問,也可以通過例項名直接訪問,此變數在類中全域性共享,例項之間也是全域性共享。可以看下面例項

# coding:utf-8

class

foo:

all=

0def

add(self)

: foo.q +=1

instance01 = foo(

)# 例項化物件1

instance02= foo(

)# 例項化物件2

print instance01.

all# 執行結果為:0

print instance02.

all# 執行結果為:0

print foo.

all# 執行結果為:0

instance01.add(

)print instance01.

all# 執行結果為:1

print instance02.

all# 執行結果為:1

print foo.

all# 執行結果為:1

instance02.add(

)print instance01.

all# 執行結果為:2

print instance02.

all# 執行結果為:2

print foo.

all# 執行結果為:2

例項變數

對於模組來說,有了自己的全域性變數,可以供自己內部的類,函式使用,同步;對於函式或者類方法來說,有了自己的區域性變數,供自己內部使用;對於類,有了靜態變數,可以供內部和有繼承關係的父子之際使用,同步;但例項之間各自的私有變數(區域性變數)就要靠例項變數了,實現了動態繫結,多型特性。

用self來修飾

# coding:utf-8

class

foo:

all=

0def

__init__

(self, name)

: self.name = name

defadd(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'
總結

在整個**組織的過程中,一般會有這樣兩種基本需求,私有 和 公有。

私有不與其他共享,自己獨享,如函式和方法的區域性變數,例項變數

公有需要在一定範圍內共享,達到同步目的,如模組內的**共享的全域性變數,類與子類之間共享的靜態變數。

如何在類中定義常量?

如果你想得到乙個可用於常量表示式中的常量,例如陣列大小的定義,那麼你有兩種選擇 那麼,為何要有這些不方便的限制?因為類通常宣告在標頭檔案中,而標頭檔案往往被許多單 元所包含。但是,為了避免鏈結器設計的複雜化,c 要求每個物件都只能被定義一次。如果c 允許類內定義要作為物件被存在記憶體中的實體,那麼這...

如何在 Python 中清屏

在很多時候,如果我們在控制台中使用 python,隨著時間的推移,可能會發現螢幕越來越亂。如下圖,我們跑了不少的測試程式,在螢幕上有很多的輸出。在 windows 中,我們會使用 cls 命令清屏。在 python,應該怎麼樣才能清屏呢?其實 python 並沒有清螢幕的命令,也沒有內建內建命令可以...

如何在 block 中修改外部變數

lock 的目的是為了支援並行程式設計,對於普通的 local 變數,我們就不能在 block 裡面隨意修改 原因很簡單,block 可以被多個執行緒並行執行,會有問題的 而且如果你在 block 中修改普通的 local 變數,編譯器也會報錯。那麼該如何修改外部變數呢?有兩種辦法,第一種是可以修改...