代码片段.md

[toc]

列表拼接

data 是个列表或者元组,将里面内容拼接成字符串显示

s = "a-b-c-d-e-f"
new_s  = "".join(s.split("-"))

不同实例添加不同的属性

kwargs = dict(zip([chr(i) for i in range(97, 102)], range(1, 5)))


class Book(object):
    def __init__(self, name, authors, price, **kwargs):
        self.name = name
        self.authors = authors
        self.price = price
        self.__dict__.update(kwargs)  # 更新属性

b = Book("pythoncookbook", 'smone', 100, **kwargs)  # 反解包

默认参数的隐藏写法

def create_engine(user, passwd, db, host='127.0.0.1', port=3306, **kw):
    params = dict(user=user, passwd=passwd, db=db, host=host, port=port)
    defaults = dict(use_unicode=True, charset='utf8', collation='utf8_general_ci', autocommit=False)
    for k, v in defaults.iteritems():
        params[k] = kw.pop(k, v) #kw有值则用kw,没有就用 default的

快速读写文件(gnenrator)

wwwlog = open("access-log")
bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog)  ## 逐行读入
bytes = (int(x) for x in bytecolumn if x != '-') # 处理
print "Total", sum(bytes)

iostream的打开

打开一个url文件

from io import StringIO
StringIO(unicode(my_file.read(), "utf-8"))

import io
from PIL import Image
response = urllib2.urlopen('http://images2015.cnblogs.com/blog/425762/201511/425762-20151120204617843-2002471507.png')
val = response.read()
i = Image.open(io.BytesIO(val))
i.save('test.png')

for 循环添加命令

commands = []
for cmd in "create", "rename", "delete", "search", "copy", "unknown":
   commands.append(cmd)

神奇的列表切片

'FizzBuzz'[100:-5:-1]
>>>zzuB

or and not 妙用

a or b 中只有a不为None,空,才会去求b的值
a and b 两者皆为True 或有值 ,取后者

def fun_print(x):
    print x
    return 15165

print 0 or fun_print(123)
print not 1
>>>False

Counter计数器

print Counter([1,3,3,3,4,5]) | Counter([3,3,4,5,6]) # 按计算多的算
list(c.elements())

带属性的字典

class Dict(dict):
    """
    字典对象
    实现一个简单的可以通过属性访问的字典,比如 x.key = value
    """
    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

    def __setattr__(self, key, value):
        self[key] = value

自定义字典类型的数据结构

不建议从dict继承 >http://www.kr41.net/2016/03-23-dont_inherit_python_builtin_dict_type.html
form UserDict import Dictmixin

class CaseInsensitiveDict(DictMixin):
    def __init__(self, *args, **kwargs):
        # super(CaseInsensitiveDict, self).__init__()
        self.data = dict(*args, **kwargs)
    def __repr__(self):
        return self.data.__repr__()
    def __getstate__(self):
        return self.data.copy()
    def __setstate__(self, d):
        self.data = d
    def _lower_keys(self):
        return map(str.lower, self.data.keys())
    def __contains__(self, key):
        return key.lower() in self._lower_keys()
    def __getitem__(self, key):
        if key.lower() in self:
            return self.items()[self._lower_keys().index(key.lower())][1]
    def __setitem__(self, key, value):
        return self.data.__setitem__(key, value)
    def __delitem__(self, key):
        return self.data.__delitem__(key)
    def __keys__(self):
        return self.data.__keys__()
    def __iter__(self):
        return self.data.__iter__()
    def iteritems(self):
        return self.data.iteritems()

代码风格

http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/

延迟实例化

class LazyProxy(object):  
    def __init__(self, cls, *params, **kwargs):  
        self.__dict__["_cls"]=cls  
        self.__dict__["_params"]=params  
        self.__dict__["_kwargs"]=kwargs  
  
        self.__dict__["_obj"]=None  
  
    def __getattr__(self, name):  
        if self.__dict__["_obj"] is None:  
            self.__init_obj()  
  
        return getattr(self.__dict__["_obj"], name)  
  
    def __setattr__(self, name, value):  
        if self.__dict__["_obj"] is None:  
            self.__init_obj()  
  
        setattr(self.__dict__["_obj"], name, value)  
  
    def __init_obj(self):  
        self.__dict__["_obj"]=object.__new__(self.__dict__["_cls"], *self.__dict__["_params"], **self.__dict__["_kwargs"])  
        self.__dict__["_obj"].__init__(*self.__dict__["_params"], **self.__dict__["_kwargs"])  
  
  
class LazyInit(object):  
    def __new__(cls, *params, **kwargs):  
        return LazyProxy(cls, *params, **kwargs)  
  
  
class A(LazyInit): # classes meant to be lazy loaded are derived from LazyInit  
    def __init__(self, x):  
        print("Init A")  
        self.x=14+x 

缓存实例

和django的cached_property不同,可以分别赋值

class cached_property(object):
    """Property descriptor that caches the return value
    of the get function.

    *Examples*

    .. code-block:: python

        @cached_property
        def connection(self):
            return Connection()

        @connection.setter  # Prepares stored value
        def connection(self, value):
            if value is None:
                raise TypeError('Connection must be a connection')
            return value

        @connection.deleter
        def connection(self, value):
            # Additional action to do at del(self.attr)
            if value is not None:
                print('Connection {0!r} deleted'.format(value)

    """

    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        self.__get = fget
        self.__set = fset
        self.__del = fdel
        self.__doc__ = doc or fget.__doc__
        self.__name__ = fget.__name__
        self.__module__ = fget.__module__

    def __get__(self, obj, type=None):
        if obj is None:
            return self
        try:
            return obj.__dict__[self.__name__]
        except KeyError:
            value = obj.__dict__[self.__name__] = self.__get(obj)
            return value

    def __set__(self, obj, value):
        if obj is None:
            return self
        if self.__set is not None:
            value = self.__set(obj, value)
        obj.__dict__[self.__name__] = value

    def __delete__(self, obj):
        if obj is None:
            return self
        try:
            value = obj.__dict__.pop(self.__name__)
        except KeyError:
            pass
        else:
            if self.__del is not None:
                self.__del(obj, value)

    def setter(self, fset):
        return self.__class__(self.__get, fset, self.__del)

    def deleter(self, fdel):
        return self.__class__(self.__get, self.__set, fdel)

dict(kwargs, **other)

b = {"b": 3}
a = {"a": 1}
c = dict(a, **b)
print c
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Python简介 Python历史 Python 是由 Guido van Rossum 在八十年代末和九十年代初...
    莫名其妙的一生阅读 1,044评论 0 2
  • 本节要介绍的是Python里面常用的几种数据结构。通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组...
    小黑y99阅读 65,191评论 0 9
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,682评论 0 5
  • 30天第三篇 圆圆是一只呆萌的博美,娇小的身子不盈一握,两只眼睛总是我见犹怜地望着你,默默拉近你和它的距离...
    黄庆辉96阅读 209评论 3 3
  • 1, 首先卸载MySQL2, 再根据这个目录 C:\Documents and Settings\All User...
    lhl_012阅读 196评论 0 0