"%(name)s" % {"name":"school"} "school" #命名式 "student"%{"name":"school"} "student" # 注意:不报错 "student" % "school" #报错
"%s" % "teacher" "teacher" #常用写法 "%(num).2f" % {"num":2.1234} 2.12 # 命名式 "%.2f" % {"num":2.1234} #报错 # 注意:报错了。。。。 "%.2f" % 2.12345 2.12 #常用写法
发现自 scrapy-redis 源码 的用法
if self.redis_key is None: self.redis_key = settings.get( 'REDIS_START_URLS_KEY', defaults.START_URLS_KEY, ) self.redis_key = self.redis_key % {'name': self.name}
scrapy 源码: class Request(object_ref): def __init__(self, url, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding='utf-8', priority=0, dont_filter=False, errback=None): assert callback or not errback, "Cannot use errback without a callback" self.callback = callback self.errback = errback self.cookies = cookies or {} self.headers = Headers(headers or {}, encoding=encoding) self._meta = dict(meta) if meta else None 其中部分写法: a = None or {} # a = {} a = 0 or {} # a = {} a = 1 if 2>3 else 2 # a = 2 a = 1 or {} # a = 1 assert 0, '0 is false' #注释 Traceback (most recent call last): File "rss.py", line 19, in <module> assert 0 ,"0 is false" AssertionError: 0 is false
class C(object): def __init__(self): self._url = {} @property def url(self): return self._url c = C() print c.url # {} c.url['h'] = '1' #为什么可以这么用呢?因为c.url 会把self._url 这个变量返回,它是一个字典,相应的就可以按字典方式处理。同理,如果self._url = [] 那么c.url 就是一个列表,它就有列表的各种方法 print c.url #{'h':'1'} print type(c.url) # <type 'dict'>
class C(object): @property def url(self): print self.__class__ # <class '__main__.C'> C 类自身 cls = self.__class__ return cls() # C 类对象 print C # <class '__main__.C'> c = C() print c # <__main__.C object at 0x7f163a075f90> print c.url # <__main__.C object at 0x7f1638732810>
通过 key 分组的时候,不得不每次检查 key 是否已经存在于字典中。 data = [('foo', 10), ('bar', 20), ('foo', 39), ('bar', 49)] groups = {} for (key, value) in data: if key in groups: groups[key].append(value) else: groups[key] = [value] pythonic # 第一种方式 groups = {} for (key, value) in data: groups.setdefault(key, []).append(value)
#setdefault 方法,字典存在该键,那么就返回该键对应的值,如过字典不存在该键,那么就在字典中创建这组键值对,后面的append() 的是链式操作。
# 第二种方式 from collections import defaultdict groups = defaultdict(list) # 使用的是collections模块 for (key, value) in data: groups[key].append(value)