
正文
python可调对象函数 python中可调用对象
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python 如何根据输入参数调用不同的函数
使用字典,比如下面这样:
def funcA():
pass
def funcB():
pass
def func_None():
print "cannot find func"
func_dict = {"a": funcA, "b": funcB}
def func(x):
return func_dict.get(x, func_None)()
在有switch的语言中,一般都是使用switch来根据入参进行判断。但是python中没有switch,因为根本不需要!!使用字典代替switch,性能更高,而且这种方法的表述能力更强一点。
另外func_dict.get(x, func_None)()中方法是从字典中取出值对应的函数对象,然后后面加上()是执行该对象的__call__方法。因为python中函数就是实现了__call__方法的对象。所以可以这么使用。
相关问答
Q1: python语言中可以调用的函数有哪些?
Python语言中有很多内置函数和标准库函数可以直接调用python可调对象函数,同时还可以自定义函数和调用其python可调对象函数他模块中python可调对象函数的函数。以下是一些常用的Python内置函数和标准库函数:
数学函数:abs(), pow(), round(), max(), min(), math库中的sin(), cos(), tan(), pi等函数。
字符串函数:len(), str(), int(), float(), ord(), chr(), upper(), lower(), replace(), split()等函数。
列表函数:append(), extend(), insert(), remove(), pop(), sort(), reverse()等函数。
文件操作函数:open(), read(), write(), close()等函数。
时间和日期函数:time(), sleep(), strftime()等函数。
正则表达式函数:re.compile(), re.search(), re.match(), re.sub()等函数。
网络编程函数:socket库中的socket(), bind(), listen(), accept()等函数。
Q2: python函数传对象对性能的影响
python函数传对象对性能有影响。在Python中,一切皆对象,Python参数传递采用的都是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象,此时如果想改变这些变量的值,可以将这些变量申明为全局变量。
Q3: Python中Thread类的start和run方法的区别
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
Q4: Python如何调用特殊函数
__call__
在Python中,函数其实是一个对象:
f = abs
f.__name__
'abs'
f(-123)
由于 f 可以被调用,所以,f 被称为可调用对象。
所有的函数都是可调用对象。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把 Person 类变成一个可调用对象:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
现在可以对 Person 实例直接调用:
p = Person('Bob', 'male')
p('Tim')
My name is Bob...
My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。
任务
改进一下前面定义的斐波那契数列:
class Fib(object):
???
请加一个__call__方法,让调用更简单:
f = Fib()
print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Q5: python中__call__方法解析
__call__ 方法是python的魔术方法python可调对象函数,就是增加一些特殊功能python可调对象函数,我们来看看 __call__ 代表python可调对象函数了什么意思?
python中所有的东西都被称为对象python可调对象函数,对象分为可以被调用和不可以被调用
可调用对象:许多Python对象都是我们所说的可调用的,即是任何通过函数操作符 () 来调用的对象
1.例如函数
函数是对象,可以被调用
2.但是如果是类的话会发生什么情况呢?
Python给类提供了名为 __call__ 的特别方法,该方法允许程序员创建可调用的对象(实例)。默认情况下, __call__ 方法是没有实现的,这意味着大多数情况下实例是不可调用的。
如何解决这一个问题?这里就用到 __call__ 函数
以上说明 __call__
python可调对象函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python中可调用对象、python可调对象函数的信息别忘了在本站进行查找喔。







