真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python靜態(tài)函數(shù),Python靜態(tài)函數(shù)

如何在Python中定義靜態(tài)變量

Python使用函數(shù)默認值實現(xiàn)函數(shù)靜態(tài)變量的方法,具體方法如下:

專注于為中小企業(yè)提供網(wǎng)站設(shè)計、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)曹妃甸免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

一、Python函數(shù)默認值

Python函數(shù)默認值的使用可以在函數(shù)調(diào)用時寫代碼提供方便,很多時候我們只要使用默認值就可以了。 所以函數(shù)默認值在python中用到的很多,尤其是在類中間,類的初始化函數(shù)中一幫都會用到默認值。 使用類時能夠方便的創(chuàng)建類,而不需要傳遞一堆參數(shù)。

只要在函數(shù)參數(shù)名后面加上 ”=defalut_value”,函數(shù)默認值就定義好了。有一個地方需要注意的是,有默認值的參數(shù)必須在函數(shù)參數(shù)列表的最后,不允許將沒有默認值的參數(shù)放在有默認值的參數(shù)后,因為如果你那樣定義的話,解釋器將不知道如何去傳遞參數(shù)。

先來看一段示例代碼:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):

while True:

ok = raw_input(prompt)

if ok in ('y', 'ye', 'yes'): return True

if ok in ('n', 'no', 'nop', 'nope'): return False

retries = retries - 1

if retries 0: raise IOError, 'refusenik user'

print complaint

你調(diào)用上面的函數(shù)時,可以修改重試次數(shù)和輸出的提示語言,如果你比較懶得話,那么什么都不用改。

二、python使用函數(shù)默認值來實現(xiàn)函數(shù)靜態(tài)變量的功能

Python中是不支持靜態(tài)變量的,但是我們可以通過函數(shù)的默認值來實現(xiàn)靜態(tài)變量的功能。

當函數(shù)的默認值是內(nèi)容是可變的類時,類的內(nèi)容可變,而類的名字沒變。(相當于開辟的內(nèi)存區(qū)域沒有變,而其中內(nèi)容可以變化)。

這是因為python中函數(shù)的默認值只會被執(zhí)行一次,(和靜態(tài)變量一樣,靜態(tài)變量初始化也是被執(zhí)行一次。)這就是他們的共同點。

再來看下面的程序片段:

def f(a, L=[]):

L.append(a)

return L

print f(1)

print f(2)

print f(3)

print f(4,['x'])

print f(5)

其輸出結(jié)果是:

[1]

[1, 2]

[1, 2, 3]

['x', 4]

[1, 2, 3, 5]

前面的好理解,為什么最后 “print f(5)”的輸出是 “[1, 2, 3, 5]”呢?

這是因為 “print f(4,['x'])”時,默認變量并沒有被改變,因為默認變量的初始化只是被執(zhí)行了一次(第一次使用默認值調(diào)用),初始化執(zhí)行開辟的內(nèi)存區(qū)(我們可以稱之為默認變量)沒有被改變,所以最后的輸出結(jié)果是“[1, 2, 3, 5]”。

python 為什么要使用靜態(tài)方法

Python使用靜態(tài)方法類似函數(shù)工具使用,一般盡量少用靜態(tài)方法。

Python的靜態(tài)方法和類成員方法都可以被類或?qū)嵗L問,兩者概念不容易理清,但還是有區(qū)別的:

1)靜態(tài)方法無需傳入self參數(shù),類成員方法需傳入代表本類的cls參數(shù);

2)從第1條,靜態(tài)方法是無法訪問實例變量的,而類成員方法也同樣無法訪問實例變量,但可以訪問類變量;

3)靜態(tài)方法有點像函數(shù)工具庫的作用,而類成員方法則更接近類似Java面向?qū)ο蟾拍钪械撵o態(tài)方法。

python 里面有靜態(tài)函數(shù)嗎

python的類里用@staticmethod的是靜態(tài)方法,@classmethod的是類方法,如下

class?Person(object):

person_list?=?[]

def?__init__(self,?name,?age):

self.name?=?name

self.age?=?age

self.person_list.append(self)

@classmethod

def?one_year_later(cls):

for?p?in?cls.person_list:

p.age?+=?1

@staticmethod

def?born_one_boby(name):

return?Person(name,?0)

def?__repr__(self):

return?'Person?name:%s,?age:%s'?%?(self.name,?self.age)

if?__name__?==?'__main__':

petter?=??Person('Petter',23)

merry?=?Person('Merry',21)

print(petter)?#?Person?name:Petter,?age:23

print(merry)??#??Person?name:Merry,?age:21

Person.one_year_later()

print(petter)??#??Person?name:Petter,?age:24

print(merry)??#??Person?name:Merry,?age:22

baby?=?merry.born_one_boby('Tom')

print(Person.person_list)?#??[Person?name:Petter,?age:24,?Person?name:Merry,?age:22,?Person?name:Tom,?age:0]

Python中靜態(tài)方法和類方法的區(qū)別

一、先是在語法上面的區(qū)別:

1、靜態(tài)方法不需要傳入self參數(shù),類成員方法需要傳入代表本類的cls參數(shù);

2、靜態(tài)方法是無妨訪問實例變量和類變量的,類成員方法無法訪問實例變量但是可以訪問類變量

二、使用的區(qū)別:

由于靜態(tài)方法無法訪問類屬性,實例屬性,相當于一個相對獨立的方法,跟類其實并沒有什么關(guān)系。這樣說來,靜態(tài)方法就是在類的作用域里的函數(shù)而已。

python 類方法和靜態(tài)方法的區(qū)別

面相對象程序設(shè)計中,類方法和靜態(tài)方法是經(jīng)常用到的兩個術(shù)語。

邏輯上講:類方法是只能由類名調(diào)用;靜態(tài)方法可以由類名或?qū)ο竺M行調(diào)用。

在C++中,靜態(tài)方法與類方法邏輯上是等價的,只有一個概念,不會混淆。

而在python中,方法分為三類實例方法、類方法、靜態(tài)方法。代碼如下:

 class Test(object):

def InstanceFun(self):

print("InstanceFun");

print(self);

@classmethod

def ClassFun(cls):

print("ClassFun");

print(cls);

@staticmethod

def StaticFun():

print("StaticFun");

t = Test(); 

t.InstanceFun();# 輸出InstanceFun,打印對象內(nèi)存地址“__main__.Test object at 0x0293DCF0”

Test.ClassFun(); # 輸出ClassFun,打印類位置 class '__main__.Test'

Test.StaticFun(); # 輸出StaticFun

t.StaticFun(); # 輸出StaticFun

t.ClassFun(); # 輸出ClassFun,打印類位置 class '__main__.Test'

Test.InstanceFun(); # 錯誤,TypeError: unbound method instanceFun() must be called with Test instance as first argument

Test.InstanceFun(t); # 輸出InstanceFun,打印對象內(nèi)存地址“__main__.Test object at 0x0293DCF0”

t.ClassFun(Test); # 錯誤 classFun() takes exactly 1 argument (2 given)

可以看到,在python中,兩種方法的主要區(qū)別在于參數(shù)。實例方法隱含的參數(shù)為類實例self,而類方法隱含的參數(shù)為類本身cls。

靜態(tài)方法無隱含參數(shù),主要為了類實例也可以直接調(diào)用靜態(tài)方法。

所以邏輯上類方法應當只被類調(diào)用,實例方法實例調(diào)用,靜態(tài)方法兩者都能調(diào)用。主要區(qū)別在于參數(shù)傳遞上的區(qū)別,實例方法悄悄傳遞的是self引用作為參數(shù),而類方法悄悄傳遞的是cls引用作為參數(shù)。

python實現(xiàn)了一定的靈活性使得類方法和靜態(tài)方法,都能夠被實例和類二者調(diào)用


當前名稱:python靜態(tài)函數(shù),Python靜態(tài)函數(shù)
網(wǎng)頁路徑:http://weahome.cn/article/hcipps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部