面的部分描述一些常见的python约定,在django中贯穿始终,在任何大一些的python库都的确存在。
Callable
python允许代码可以有许多途径被运行,任何东西都能像典型的函数标识可调用的一样,按相同的方式执行。所有函数,类,方法都是自动可调用的,像期望的一样,但是任意对象类实例也能被标识为可调用,只要提供一个单一方法。
__calll__(self[, ...])
当实例化对象像函数一样调用时,这个方法就开始执行。它和其他的成员函数很象,不同的地方就是被调用的方式。
>>> class Multiplier(object):
... def __init__(self, factor):
... self.factor = factor
... def __call__(self, value):
... return value * self.factor
...
>>> times2 = Multiplier(2)
>>> times2(5)
10
>>> times2(10)
20
>>> times3 = Multiplier(3)
>>> times3(10)
30
python也提供了一个内置函数来判定可调用(callable)的对象。 callable()函数只有一个参数,返回True或False。判断对象是否像函数一样可调用。
>>> class Basic(object):
... pass
...
>>> class Callable(object):
... def __call__(self):
... return "Executed!"
...
>>> b = Basic()
>>> callable(b)
False
>>> c = Callable()
>>> callable(c)
True
字典
字 典是单一对象中的键值映射。大多数编程语言都有相同形式的字典类型,其他语言称之为“hashes", "maps"或"associative arrays(关联数组)",除了简单通过指定键来存取值,python的字典提供了许多方法,一边更好的操作底层的映射。为了像一个真正的字典的表现行 为,一个对象需要提供一些方法,文档参见python library reference。
__contains__(self, key)
通过使用in操作符, 如果指定的键存在于底层的映射中,则返回True,否则返回False。它从不返回异常。
__getitem__(self, key)
如果存在的华,则返回被指定键引用的值。如果键不在底层的映射中,则抛出一个异常KeyError。
__setitem__(self, key, value)
通过指定的键来保存指定的值,保存之后准备引用它。如果有一个映射存在,可用相同的键覆盖已经存在的值。
>>> class CaseInsensitiveDict(dict):
... def __init__(self, **kwargs):
... for key, value in kwargs.items():
... self[key.lower()] = value
... def __contains__(self, key):
... return super(CaseInsensitiveDict, self).__contains__(key.lower())
... def __getitem__(self, key):
... return super(CaseInsensitiveDict, self).__getitem__(key.lower())
... def __setitem__(self, key, value):
... super(CaseInsensitiveDict, self).__setitem__(key.lower(), value)
...
>>> d = CaseInsensitiveDict(SpAm='eggs')
>>> 'spam' in d
True
>>> d['SPAM']
'eggs'
>>> d['sPaM'] = 'burger'
>>> d['SpAm']
'burger
字典也可以用作迭代使用,当代码循环字典的内容时,键用作列表。更多信息参见即将介绍的"Iterables"(迭代)。
常用的 Duck-Typing 约定
最新推荐文章于 2022-05-09 10:39:58 发布