function="luckywin."+case_name+"."+def_name
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站托管、服務器租用、企業(yè)網(wǎng)站設計、翁源網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
function=eval(function)
function(player_id,test_url)
function是個字符串,function(player_id,test_url) 這樣寫肯定不是字符串,怎么能用eval呢,直接eval function返回函數(shù)名,然后調用函數(shù)
import inspect
from demo import demo
#傳入函數(shù),改變函數(shù)內部變量a,從a=1改變成a=2
def cfunc(func):
#當前位置的全部局部變量
lc=locals()
#獲得函數(shù)的內容
func_code=inspect.getsource(func)
#使用replace改變函數(shù)內部的變量
func_code=func_code.replace('a=1','a=2')
#動態(tài)創(chuàng)建函數(shù)
exec(func_code)
#獲得函數(shù)并返回
res_func=lc[func.__name__]
return res_func
demo=cfunc(demo)
demo()
class?Node(object):
def?__init__(self,?name):
self._name?=?name
self._value?=?None
self._from?=?None
self._next?=?[]
def?setValue(self,?value):
self._value?=?value
def?setNext(self,?node):
self._next.append(node)
def?setFrom(self,?node):
self._from?=?node
def?getValue(self):
return?self._value
def?getNext(self):
return?self._next
def?getName(self):
return?self._name
def?getFrom(self):
return?self._from
class?BFtree():
def?__init__(self,?dList):
self._dList?=?dList
def?bfValue(self,?start):
cur?=?start
if?cur.getNext()?is?not?None:
for?node?in?cur.getNext():
path?=?[cur.getName(),??node.getName()]
path.sort()
path?=?''.join(path)
value?=?cur.getValue()?+?self._dList[path]
if?node.getValue()?is?None?or?value??node.getValue():
node.setValue(value)
node.setFrom(cur)
self.bfValue(node)
def?move(self,?start,?end):
print?'From:?',?start.getName(),?'?to:?',?end.getName()
start.setValue(0)
self.bfValue(start)
trace?=?[end.getName()]
cur?=?end
while?cur.getFrom()?is?not?None:
cur?=?cur.getFrom()
trace.append(cur.getName())
trace?=?reversed(trace)
print?'The?path?is?',?'?'.join(trace),'?and?the?value?is?',?end.getValue()
#builidng?node
a?=?Node('A')
b?=?Node('B')
c?=?Node('C')
d?=?Node('D')
e?=?Node('E')
f?=?Node('F')
g?=?Node('G')
h?=?Node('H')
#build?tree
a.setNext(b)
a.setNext(c)
a.setNext(d)
b.setNext(a)
b.setNext(g)
c.setNext(a)
c.setNext(g)
c.setNext(e)
d.setNext(a)
d.setNext(e)
e.setNext(c)
e.setNext(b)
e.setNext(f)
f.setNext(e)
g.setNext(b)
g.setNext(c)
g.setNext(h)
h.setNext(g)
#build?distance?list
dList?=?dict();
dList['AB']?=?1
dList['AC']?=?2
dList['AD']?=?3
dList['BG']?=?1
dList['BE']?=?6
dList['CE']?=?2
dList['CG']?=?5
dList['DE']?=?4
dList['EF']?=?3
dList['GH']?=?4
#build?BFtree
tree?=?BFtree(dList)
tree.move(a,h)
tree.move(a,f)
tree.move(a,e)
代碼略長....
給你這樣一個例子吧,這個例子里面有動態(tài)增加類的函數(shù)。
聲明一個類,類初始化的時候讀取配置文件,根據(jù)配置列表加載特定目錄下的模塊下的函數(shù),函數(shù)和模塊同名,將此函數(shù)動態(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下面建立一個空的__init__.py文件,把目錄變?yōu)橐粋€包,在modules目錄下建立真正的BAS_GetUserList實現(xiàn):BAS_GetUserList文件中有個BAS_GetUserList函數(shù)如下:
def BAS_GetUserList(self, strs):
return [0, strs]
這樣WinBAS類就可以動態(tài)加入了BAS_GetUserList函數(shù)。