追寻真理之美

——此人一贯挖坑不填

用户操作
[即时聊天] [发私信] [加为好友]
智拙ID:ccat
109429次访问,排名858,好友0人,关注者8人。
ccat的文章
原创 66 篇
翻译 4 篇
转载 0 篇
评论 88 篇
智拙的公告
Python 2.4
最近评论
zhangjunhd:理解
ccat:错误我改过来了,PDF版和TeX版文件也重新上传了,但是HTML压缩包不知道怎么删除重新上传。
ccat:多谢提醒,我晚上回去看看。
ccat:杨编辑好:)
linux:嘿嘿,刘鑫老师,我是博文的linux!
文章分类
收藏
    相册
    文章插图
    朋友
    bobo,家有三猫
    Fire,永远比我严肃那么一点点
    lee
    limodou,NewEdit之父(RSS)
    Playyuer,近来可好(RSS)
    Ricky的私人领地
    Vicko,聪明的孩子,提着易碎的灯笼
    Vickox,一个人,两枝笔
    冰菊叮叮的绮季
    卡卡和哆哆的小窝,从这里开始,我的人生不再与以前相同
    寻梦的blog
    小尹,成功人士将来时。
    岑心的小天地
    暖暖,美丽的文字,总是让我深陷其中。
    梅劲松,Python经典实践(RSS)
    欢欢小师妹(RSS)
    灰色咆哮,彩色收藏
    蔚蔚,祝你幸福快乐
    西区故事,有故事的男人。
    面面的金鱼缸,内有美人鱼,生人勿近
    饼干~大饼~素饼饼~
    收藏
    cavingdeep,颇有知音之感(RSS)
    Guoly工作室,提供WinCVS中文教程
    Robert Chen(RSS)
    深入浅出,诲人不倦,可为人师也——项武义先生网站
    透明,熊节
    网络项目
    .net 中文讨论组
    Firebird项目的CVS
    Python2.3指南
    Python中文社区
    Python文档中文化项目
    啄木鸟
    啄木鸟的老巢
    我的新家
    休闲收藏
    办公室Party
    廖添丁
    恶搞圣斗士
    魔塔
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Python为什么不需要swap(a, b)收藏

    新一篇: Coco学编程(三)--冒泡就是折腾 | 旧一篇: Coco学编程(二)--直接选择排序

    致谢:这是一篇译稿,原作者是一位NASA的程序员,非常感谢他在Python社区及时、详细的为我解答了问题,并在讲解中解说了一些Python的相关知识,还宽容的对待我蹩脚的英语。感谢他同意我将他的来信介绍给大家。这是一位谦和有礼又博学多才的朋友。他帮我理解Python之美,也让我看到人性之美。

    问:Python中为什么没有swap(a, b)方法?我们在Python中如何交换对象?

    Python 不使用这种方式(swap(a, b))。Python以引用方式管理对象,你可以交换引用,但通常不能交换内存中的对象值。当然你也不需要这样做。

    C++中这种函数用来交换“ab的值”。在Python中,ab的值不会发生交换,但位于当前命名空间中的标记(如ab)是可以交换的。而对象本身是仍然保留。

    所以与其调用一个swap(a, b),你倒不如使用:a,b = b,a

    通常python函数不会混淆它们的命名空间,所以它不能像C++swap(&a, &b)那样进行引用操作。

    因此,在python中应该这样做:

    a = 1

    b = 2

     

    def swap(t1, t2):

        return t2, t1

     

    a,b = swap(a, b)   # After this point, a == 2 and b == 1

     

     

    But there is not way (other than abusing globals or the module

    namespace) to do it like this:

    不过下面这段代码不可能像我们希望的那样工作(全局命名空间和局部命名空间是隔离的):

    a = 1

    b = 2

     

    def swap(t1, t2):

        t2, t1 = t1, t2

        return

     

    swap(a, b)

    # After this point, a == 1 and b == 2.  The calling namespace is

    # not changed.

     

    在类中,你可以构造一个命名空间来操作可调用的对象(类实例方法),事实上,这意味着也许可以实现一个swap()方法。但是它们仍然只是操作命名空间中的对象引用,而不会交换对象本身(或者它们在机器内存中的数据)。以下只是一个示例,并不表示它们有什么实用性:

    class Pair:

        def __init__(self, t1, t2):

            self.t1 = t1

            self.t2 = t2

     

        def get(self):

            return self.t1, self.t2

     

        def swap(self):

            self.t1, self.t2 = self.t2, self.t1

     

     

    a = 1

    b = 2

    pair = Pair(a, b)

    pair.get()   # returns 1,2

    pair.swap()  # changes the namespace of the pair object

    pair.get()   # returns 2,1

     

    a == 1

    b == 2       # The a and b labels did NOT change

    发表于 @ 2003年04月30日 11:14:00|编辑

    新一篇: Coco学编程(三)--冒泡就是折腾 | 旧一篇: Coco学编程(二)--直接选择排序

    评论:没有评论。

    Csdn Blog version 3.1a
    Copyright © 智拙