Python:如何将函数赋给对象属性?

2024-10-03 23:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,这是从我试图找出dict中是否存在索引时遇到的问题开始的:

if collection[ key ]: # if exist
    #do this
else: # if no exist
    #do this

但是当索引真的不存在时,它会给我一个键错误。 所以,阅读Python文档。如果定义了缺失(),则不会抛出键错误。在

^{pr2}$

上面终端上的代码告诉我:

ghelo@ghelo-Ubuntu:~/Music$ python __arrange__.py
  File "__arrange__.py", line 16
    def allArts.__missing__():
               ^
SyntaxError: invalid syntax

那么,如何正确地做这件事呢? 顺便说一句,我需要在这方面使用Python2.7。在Python3上运行有什么区别吗?在


Tags: keyno文档pyif定义错误this
3条回答

一些答案已经表明了你在真实情况下应该做些什么,但是缺失也可以满足你的要求。在

如果您想使用它,您需要将dict子类化

class mydict(dict):
  def __missing__(self, key):
    return 'go fish'

然后您可以创建一个:

^{pr2}$

并通过

d[0]
=> 'go fish'
d[0] = 1
d[0]
=> 1

您可以这样做:

if key in collection:

或者,正如@sdolan建议的那样,您可以使用.get方法,如果不存在,它将返回默认值(可选的第二个参数)。在

^{pr2}$

如果您想使用__missing__,您可以将其应用于扩展dict的类(在本例中):

class collection(dict):

    def __missing__(self, key):
        print "Too bad, {key} does not exist".format(key=key)
        return None


d = collection()
d[1] = 'one'

print d[1]

if d[2]:
    print "Found it"

输出

^{4}$

可以通过使用try..处理KeyError异常来检查key是否存在,如下所示除外。在

try:
    collection[key]
    # do this
except KeyError:
    # do that

这种编码风格被称为EAFP,这意味着“请求原谅比请求许可更容易”http://docs.python.org/glossary.html#term-eafp

另一种方法是使用get方法,如果找不到密钥,它将默认返回None

^{pr2}$

相关问题 更多 >