方舟 K ][ N G of A R K

"God is a concept by which we measure our pain." -- John Lennon

方舟ID:kingofark
215385次访问,排名283好友0人,关注者11
[加为好友] [即时聊天] [发私信]
kingofark的文章
原创 133 篇
翻译 18 篇
转载 7 篇
评论 337 篇
最近评论
mohroq:wow gold,
xiaotie:Real option 的习惯译法是 实物期权。实物期权是一个 很强大的分析工具。
selfishman:qinfo,不错,我已经订阅了一段时间了
YuLimin:炒作???
Asuka_Zhang:不知是否是方舟老师整理的,超级到位阿!!!
文章分类
收藏
    相册
    Cover Art
    K ][ N G of A R T ™ Vol.2
    K ][ N G of A R T ™ Vol.3
    K ][ N G of A R T ™ Vol.4
    K ][ N G of A R T ™ Vol.5
    PhotogrArk
    TF
    古德寺的复兴
    古德寺的遗迹
    糊得像年糕似的紧箍咒
    深入解析Windows操作系统_第4版_勘误_p68
    CSDN Bloggers
    《程序员》官方BLOG
    C++的罗浮宫
    刘江@图灵
    博文视点
    博文视点的CSDN BLOG圈子
    孟岩
    梁晶
    陈瑞江
    韩磊@Today
    Dearbookian Bookshop
    第二书店 第一服务
    Dictionary
    Behind the Name - the Etymology and History of First Names
    Merriam-Webster Online
    OneLook Dictionary Search
    SPACE ALC [スベースアルク]
    The Jargon Dictionary [info.astrian.net]
    Game Programming
    Blue's News - All the carnage that's fit to post!
    Chris Crawford - Interactive Storytelling Tools for Writers
    Chris Crawford's THE ART OF COMPUTER GAME DESIGN
    GameDev.net - all your game development needs
    GameRes - 游戏人的平台
    Graphics Programming Black Book by Michael Abrash
    Longbow Digital Arts
    Michael Abrash's Graphic Programming Black Book UK Mirror
    Robocode
    Seumas's Programming Page
    云风工作室
    HCI/Interaction Design
    Cooper
    Don Norman's jnd.org - user advocacy and human-centered design
    Interface Hall of Shame
    Jef Raskin
    Jenifer Tidwell
    UIDesign.NET
    Just For Fun
    Maestro Headquarters
    Language
    Lua Programming Language
    Python Programming Language
    REBOL Technologies - For the X Internet
    Ruby Programming Language
    Literature
    The Gettysburg Review
    Magazine
    DDJ
    National Geographic Online
    The C++ Source
    Medium
    ABC News
    BBC
    CBC News
    CNN
    Consumption Junction
    ESPN STAR Sports
    FOX News
    Google ニュース 日本版
    Google 新闻 中国版
    Guardian Unlimited
    MSNBC
    News In Pictures
    Reuters National, World and Business News
    The New York Times
    Washington Post
    Wired News
    Profession
    BDN
    Channel 9
    GotDotNet
    IBM alphaWorks - emerging technologies
    InformIT
    Java World
    JavaRSS - Java News, Java Articles and Java Blogs, Just one bookmark.
    MSDN
    MSDN Blog
    SlashDot
    The Artima Developer Community
    The Association of C & C++ Users
    The Code Project
    The Server Side
    The Server Side .NET
    Software
    CTEX 中文TeX网站
    博文视点
    何艳
    佘广
    刘薇
    周筠
    彭俊
    彭慧敏
    杜正彬
    杨昕宇
    杨福川
    杨绣国
    林建峰
    王继花
    白爱萍
    肖凯
    胡文佳
    蔡勇
    解娟娟
    邱克荣
    郑兆昭
    陈元玉
    马辰宇
    鲁怡娜
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    翻译 Python Cookbook 第二版 汉化版 [Recipe 1.9] 简化字符串 translate 方法的用法收藏

    新一篇: 走近所罗门 Part 1 邮件中的所罗门 | 旧一篇: Python Cookbook 第二版 汉化版 [Recipe 1.8] 检测字符串是否包含特定的字符集合

    Recipe 1.9. Simplifying Usage of Strings' translate Method
    Recipe 1.9. 简化字符串 translate 方法的用法


    Credit: Chris Perkins, Raymond Hettinger


    问题

    您常常希望使用高效的字符串 translate 方法,但却很难记住该方法和 string.maketrans 函数的详细用法,因此您想要一种能在通常情况下简化其用法的包装方案(facade)。


    解法

    正如 Recipe 1.10 中所述,字符串的 translate 方法非常强大切颇具伸缩性。然而恰恰是因为这种强大威力和可伸缩性所带来的使用难度,使得我们似乎有必要使用一种“包装方案(facade)”为其添加一个前端接口,以便简化其在通常情况下的用法:

    import string
    def translator(frm='', to='', delete='', keep=None):
        if len(to) == 1:
            to = to * len(frm)
        trans = string.maketrans(frm, to)
        if keep is not None:
            allchars = string.maketrans('', '')
            delete = allchars.translate(allchars, keep.translate(allchars, delete))
        def translate(s):
            return s.translate(trans, delete)
        return translate


    讨论

    我常常发现自己想要使用字符串的 translate 方法来做些事情,但每次我都不得不停下来仔细回想其详细用法(请参见 Recipe 1.10 查看更多关于详细用法的信息)。因此我自己编写了一个 class(之后又将其重制为 factory closure ,即本条目“解法”中所呈现的方案),将多种可能的处理封装到一个较为简易的 facade 当中。现如今,若我想要一个函数,使其只保留给定集合中的字符,我就可以简单地建构并使用这个函数:

    >>> digits_only = translator(keep=string.digits)
    >>> digits_only('Chris Perkins : 224-7992')
    '2247992'

    若要从字符串中移除某个字符集中的字符,也同样简单:

    >>> no_digits = translator(delete=string.digits)
    >>> no_digits('Chris Perkins : 224-7992')
    'Chris Perkins : -'

    若要用单一个字符替换一个字符集合,可以这样做:

    >>> digits_to_hash = translator(from=string.digits, to='#')
    >>> digits_to_hash('Chris Perkins : 224-7992')
    'Chris Perkins : ###-####'

    虽然上面这个用法可能看起来有点特殊,但于我而言确为时不时就会出现的任务。

    在本条目中,我不得不作出一个带有随意性的设计决定,即在 delete 参数与 keep 参数交叠的情况下,让 delete 参数“吃掉”keep 参数:

    >>> trans = translator(delete='abcd', keep='cdef')
    >>> trans('abcdefg')
    'ef'

    对于您自己的应用而言,在指定了 keep 的情况下,或许忽略 delete 更好;而在两者同时被指定的情况下,或许最好是抛出异常(因为在同一个 translator 调用中同时指定两者毕竟没有多大实际意义)。同样,如 Recipe 1.8 和 Recipe 1.10 所述,本条目中的代码仅适用于普通字符串,不适用于 Unicode 字符串,因为 Unicode 字符串的 translate 方法与普通字符串(即以 byte 为处理单位的字符串)的同名方法有所区别。

    ---- BOX BEGIN ----
    Closures

    Closure 并没有复杂到可怕的地步:它只是一个“内部”函数,指代“包含该函数的那个‘外部’函数的本地名称(即变量)”。下面是个阳春的例子:

    def make_adder(addend):
        def adder(augend): return augend+addend
        return adder

    执行 p = make_adder(23) 就会制造出一个 closure ,即内部函数 adder ,其指代一个被绑定为数值 23 的名称。接着,q = make_adder(42) 又制造出一个 closure ,其内的 addend 被绑定到数值 42。此时 q 与 互不干涉,两者可以愉快且独立地共生。如此一来,我们就可以执行诸如 pprint p(100), q(100) 这样的语句,并得到结果为 123 142 的输出。

    在实际当中,您可能常常会看到,make_adder 会被看作 closure ,而不是以带有学究气的、生硬冗长的“返回 closure 的函数”来解释。幸运的是,上下文经常能够明晰具体情况。将 make_adder 称为 factory (或 factory function ,工厂函数)既准确又精炼;您还可以说它是 closure factory ,以便阐明它建造并返回 closures 的事实,而不是 class 或 class instances 。
    ---- BOX E N D ----


    请参见

    Recipe 1.10 包括本条目中 translate(keep=...) 的等价方案、更多关于 translate 方法的信息,以及适用于 Unicode 字符串的等价方案;在 Library ReferencePython in a Nutshell 中关于字符串 translate 方法以及 string 模块中的 maketrans 函数的文档。

    发表于 @ 2007年04月24日 11:26:00|评论(loading...)|编辑

    新一篇: 走近所罗门 Part 1 邮件中的所罗门 | 旧一篇: Python Cookbook 第二版 汉化版 [Recipe 1.8] 检测字符串是否包含特定的字符集合

    评论

    #storyofcode 发表于2007-04-25 13:25:04  IP: 59.108.6.*
    很高兴能再次看到接下来的文章!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © - K ][ N G of A R K -