python类和函数_构建程序. Python中的类和函数
如果希望mainfunc的所有實例都使用相同的KeySeq對象,則可以使用默認參數值技巧:
def mainfunc(ks=KeySeq()):
key = ks.next()
只要您實際上沒有傳遞ks值,對mainfunc的所有調用都將使用在定義函數時創建的KeySeq實例.
如果您不知道,這就是為什么:函數是一個對象.它具有屬性.它的屬性之一被命名為func_defaults.它是一個元組,其中包含其簽名中所有具有默認值的參數的默認值.當您調用函數且不為具有默認值的參數提供值時,該函數將從func_defaults中檢索該值.因此,當您在不提供ks值的情況下調用mainfunc時,它將從func_defaults元組中獲取KeySeq()實例.對于mainfunc實例,該實例始終是相同的KeySeq實例.
現在,您說要發送“ mainfunc的多個實例到PP的提交功能”.您是說多個實例嗎?如果是這樣,我所描述的機制將無法正常工作.
但是創建一個函數的多個實例很棘手(而您發布的代碼則沒有).例如,此函數在每次調用g時都會返回一個新的g實例:
>>> def f():
def g(x=[]):
return x
return g
>>> g1 = f()
>>> g2 = f()
>>> g1().append('a')
>>> g2().append('b')
>>> g1()
['a']
>>> g2()
['b']
如果我不帶任何參數調用g(),它將從其func_defaults元組中返回默認值(最初是一個空列表).由于g1和g2是g函數的不同實例,因此x參數的默認值也是一個不同的實例,如上所示.
如果您想使此操作比使用默認值的棘手副作用更明確,則可以采用以下另一種方法:
def mainfunc():
??????如果沒有hasattr(mainfunc,“ ks”):
??????????setattr(mainfunc,“ ks”,KeySeq())
??????鍵= mainfunc.ks.next()
最后,您發布的代碼忽略了一個非常重要的要點:如果要對共享數據進行并行處理,則與數據相關的代碼需要實現鎖定.查看Parallel Python文檔中的callback.py示例,看看如何在Sum類中使用鎖定以及原因.
總結
以上是生活随笔為你收集整理的python类和函数_构建程序. Python中的类和函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dwf文件怎么打开 详细的操作方法
- 下一篇: 用python画树_Python+Tur