動(dòng)態(tài)生成python函數(shù) python生成動(dòng)態(tài)鏈接庫

python 怎么生成可變函數(shù)名

定義一個(gè)A類,然后實(shí)例化一個(gè)A對象,通過setattr函數(shù)來給當(dāng)前類添加一個(gè)變量,值是test函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test函數(shù)。 例2,定義一個(gè)模塊,通過另一個(gè)模塊函數(shù)調(diào)用函數(shù)來增加變量,值是test2函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test2函數(shù)。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的竹溪網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

原理

python系統(tǒng)會(huì)維護(hù)一個(gè)變量的字典,可以通過locals()或者globals()獲取到該字典。由于字典是可變對象,那么,就可以動(dòng)態(tài)的增加變量。由于函數(shù)也是一個(gè)對象,那么就可以將變量指向函數(shù)。這樣就可以達(dá)到動(dòng)態(tài)修改函數(shù)名的目的了。

python的類中怎么實(shí)現(xiàn)動(dòng)態(tài)化函數(shù)?

給你這樣一個(gè)例子吧,這個(gè)例子里面有動(dòng)態(tài)增加類的函數(shù)。

聲明一個(gè)類,類初始化的時(shí)候讀取配置文件,根據(jù)配置列表加載特定目錄下的模塊下的函數(shù),函數(shù)和模塊同名,將此函數(shù)動(dòng)態(tài)加載為類的成員函數(shù)。

代碼如下所示:

class WinBAS(Bas):

def __init__(self):

self.__baslist = {}

self.__Init_Modules()

pass

def __Init_Modules(self):

import modplugs

for m in modplugs.__moduleset__:

mh = __import__('modules.' + m)# + '.' + m)

ma = getattr(mh, m)# + '.' + m)

ma = getattr(ma, m)

setattr(self.__class__, m, ma)

modplugs.py是模塊配置文件如下:

__moduleset__ = [

'BAS_GetUserList',

]

然后建立目錄modules下面建立一個(gè)空的__init__.py文件,把目錄變?yōu)橐粋€(gè)包,在modules目錄下建立真正的BAS_GetUserList實(shí)現(xiàn):BAS_GetUserList文件中有個(gè)BAS_GetUserList函數(shù)如下:

def BAS_GetUserList(self, strs):

return [0, strs]

這樣WinBAS類就可以動(dòng)態(tài)加入了BAS_GetUserList函數(shù)。

如何用python動(dòng)態(tài)生成變量名字

你好,方法如下:

要寫一個(gè)程序,讓linuxany1=1,linuxany2=2,… inuxany100=100,你會(huì)怎么做?

最容易想到的自然是eval,但是實(shí)際上根本不需要這種危險(xiǎn)的東西,因?yàn)镻ython的變量名就是一個(gè)字典的key而已。要獲取這個(gè)字典,直接用locals和globals函數(shù)即可。

names = locals()

for i in xrange(1, 101):

... names['linuxany%s' % i] = i

... linuxany1

1 linuxany2

2 linuxany100

100

不過你也許會(huì)說這個(gè)例子沒什么用,畢竟用數(shù)組來實(shí)現(xiàn)更為實(shí)用。

舉一個(gè)例子:服務(wù)器使用一種對象數(shù)據(jù)庫,可以直接保存對象到數(shù)據(jù)庫中。服務(wù)器列出目前支持的所有類,而用戶想添加一個(gè)不存在于列表中的類,于是向服務(wù)器發(fā)送一段JSON或XML文本。服務(wù)器解析這段文本,將它轉(zhuǎn)換成一個(gè)class對象,并且設(shè)置類名。之后用戶就可以隨意生成這個(gè)類的對象。

關(guān)鍵是這個(gè)數(shù)據(jù)庫和類名相關(guān),你不能用一個(gè)通用的Object類來保存所有的對象,否則查詢時(shí)就亂套了。

除了動(dòng)態(tài)設(shè)置變量名,動(dòng)態(tài)刪除也是可以的,例如

del locals()['linuxany1']

同樣,delattr也是可用的。

希望能幫到你。

網(wǎng)站標(biāo)題:動(dòng)態(tài)生成python函數(shù) python生成動(dòng)態(tài)鏈接庫
網(wǎng)頁鏈接:http://muchs.cn/article12/doeedgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站策劃做網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)