python动态函数
⑴ 为什么说python是一门动态语言
首先要理解什么是动态语言:通俗地说:能够在运行时修改自身程序结构的语言,就属于动态语言。那怎样才算是“运行时修改自身程序结构”捏?比如下面这几个例子都 算:在运行时给某个类增加成员函数及成员变量;在运行时改变某个类的父类;在运行时创建出某个函数.。
Python是可以实现动态类的创建类(在任意代码位置,符合正确的书写格式),或者给类增加删除属性。因为类也是对象,你可以在运行时动态的创建它们,就像其他任何对象一样。首先,你可以在函数中创建类,使用class关键字即可。
例子:
defchoose_class(name):
ifname=='foo':
classFoo(object):
pass
returnFoo#返回的是类,不是类的实例
else:
classBar(object):
pass
returnBar
#排版有问题不好意思
#如果你觉得还不够动态,因为你仍然需要自己编写整个类的代码。由于类也是对象,
#所以它们必须是通过什么东西来生成的才对。当你使用class关键字时,Python解释器自动创建这
#个对象。但就和Python中的大多数事情一样,Python仍然提供给你手动处理的方法。内建函数中有
#一个名叫type的内建函数,这个内建函数古老但强大的函数,它能够让你知道一个对象的类型是
#什么,就像这样:
>>>MyShinyClass=type('MyShinyClass',(),{})#返回一个类对象
>>>printMyShinyClass<class'__main__.MyShinyClass'
>>>>printMyShinyClass()#创建一个该类的实例
<__main__.MyShinyClassobjectat0x8997cec>另附type使用方法:
#type(类名,父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
⑵ 如何用python动态生成变量名字
你好,方法如下:
要写一个程序,让linuxany1=1,linuxany2=2,… inuxany100=100,你会怎么做?
最容易想到的自然是eval,但是实际上根本不需要这种危险的东西,因为Python的变量名就是一个字典的key而已。要获取这个字典,直接用locals和globals函数即可。
>>> names = locals()
>>> for i in xrange(1, 101):
... names['linuxany%s' % i] = i
... >>> linuxany1
1 >>> linuxany2
2 >>> linuxany100
100
不过你也许会说这个例子没什么用,毕竟用数组来实现更为实用。
举一个例子:服务器使用一种对象数据库,可以直接保存对象到数据库中。服务器列出目前支持的所有类,而用户想添加一个不存在于列表中的类,于是向服务器发送一段JSON或XML文本。服务器解析这段文本,将它转换成一个class对象,并且设置类名。之后用户就可以随意生成这个类的对象。
关键是这个数据库和类名相关,你不能用一个通用的Object类来保存所有的对象,否则查询时就乱套了。
除了动态设置变量名,动态删除也是可以的,例如
del locals()['linuxany1']
同样,delattr也是可用的。
希望能帮到你。
⑶ python 怎么生成可变函数名
定义一个A类,然后实例化一个A对象,通过setattr函数来给当前类添加一个变量,值是test函数。调用haha函数,就相当于调用了test函数。 例2,定义一个模块,通过另一个模块函数调用函数来增加变量,值是test2函数。调用haha函数,就相当于调用了test2函数。
原理
python系统会维护一个变量的字典,可以通过locals()或者globals()获取到该字典。由于字典是可变对象,那么,就可以动态的增加变量。由于函数也是一个对象,那么就可以将变量指向函数。这样就可以达到动态修改函数名的目的了。
⑷ python里面 如何动态调用 一个函数
function="luckywin."+case_name+"."+def_name
function=eval(function)
function(player_id,test_url)
function是个字符串,function(player_id,test_url) 这样写肯定不是字符串,怎么能用eval呢,直接eval function返回函数名,然后调用函数
⑸ python是动态语言吗
动态语言的定义:动态编程语言是高级程序设计语言的一个类别,在计算机科学领域已被广泛应用。
它是一类在执行时能够改变其结构的语言:比如新的函数、对象、甚至代码能够被引进,已有的函数能够被删除或是其它结构上的变化。
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断
更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。
python学习网,免费的python学习网站,欢迎在线学习!
Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,
决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国
20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python's Flying Circus)。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC
语言并没有成功,究其原因,Guido 认为是其非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现
过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Mola-3(另一种相当优美且强大的语言,为
小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
Python 已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。Python 2于2000年10月16日发
布,稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。 [3] 2011年1月,它被TIOBE编程语言排行榜评
为2010年度语言。
⑹ Python怎么根据不同的字符串动态选择函数
#可以用函数字典,看看是否满足你的要求
deftext_func(self):
print"thisistextfunc"
defint_func(self):
print"thisisint_func"
gen_func={'text':text_func,'int':int_func}
defchoose(a='text'):
returngen_func[a]
⑺ 怎样理解Python是动态语言说出其能动态的本质原因。
它是一类在执行时能够改变其结构的语言:比如新的函数、对象、甚至代码能够被引进,已有的函数能够被删除或是其它结构上的变化。它是一类在执行时能够改变其结构的语言:比如新的函数、对象、甚至代码能够被引进,已有的函数能够被删除或是其它结构上的变化。
⑻ 求Python代码编动态规划贝尔曼函数
classNode(object):
def__init__(self,name):
self._name=name
self._value=None
self._from=None
self._next=[]
defsetValue(self,value):
self._value=value
defsetNext(self,node):
self._next.append(node)
defsetFrom(self,node):
self._from=node
defgetValue(self):
returnself._value
defgetNext(self):
returnself._next
defgetName(self):
returnself._name
defgetFrom(self):
returnself._from
classBFtree():
def__init__(self,dList):
self._dList=dList
defbfValue(self,start):
cur=start
ifcur.getNext()isnotNone:
fornodeincur.getNext():
path=[cur.getName(),node.getName()]
path.sort()
path=''.join(path)
value=cur.getValue()+self._dList[path]
ifnode.getValue()isNoneorvalue<node.getValue():
node.setValue(value)
node.setFrom(cur)
self.bfValue(node)
defmove(self,start,end):
print'From:',start.getName(),'to:',end.getName()
start.setValue(0)
self.bfValue(start)
trace=[end.getName()]
cur=end
whilecur.getFrom()isnotNone:
cur=cur.getFrom()
trace.append(cur.getName())
trace=reversed(trace)
print'Thepathis',''.join(trace),'andthevalueis',end.getValue()
#builidngnode
a=Node('A')
b=Node('B')
c=Node('C')
d=Node('D')
e=Node('E')
f=Node('F')
g=Node('G')
h=Node('H')
#buildtree
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)
#builddistancelist
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
#buildBFtree
tree=BFtree(dList)
tree.move(a,h)
tree.move(a,f)
tree.move(a,e)
代码略长....
⑼ python的类中怎么实现动态化函数
给你这样一个例子吧,这个例子里面有动态增加类的函数。
声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。
代码如下所示:
class WinBAS(Bas):
def __init__(self):
self.__baslist = {}
self.__Init_Moles()
pass
def __Init_Moles(self):
import modplugs
for m in modplugs.__moleset__:
mh = __import__('moles.' + m)# + '.' + m)
ma = getattr(mh, m)# + '.' + m)
ma = getattr(ma, m)
setattr(self.__class__, m, ma)
modplugs.py是模块配置文件如下:
__moleset__ = [
'BAS_GetUserList',
]
然后建立目录moles下面建立一个空的__init__.py文件,把目录变为一个包,在moles目录下建立真正的BAS_GetUserList实现:BAS_GetUserList文件中有个BAS_GetUserList函数如下:
def BAS_GetUserList(self, strs):
return [0, strs]
这样WinBAS类就可以动态加入了BAS_GetUserList函数。
⑽ python的数据分解和动态传值,*的几个简单用
Python中内置了很多有用的数据结构,列表list , 集合set,字典dict.那今天我们就根据这几个数据结构来看看python中 * 的用法。*的作用,如果在函数参数中*表示的是不限的位置参数。*args,**kwargs则说明了python中函数的动态赋值用法。