`
flynewton
  • 浏览: 62593 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python为什么不需要swap(a,b)

阅读更多

关键字: python , swap

转自:http://blog.csdn.net/ccat/archive/2003/04/30/8349.aspx

致 谢:这是一篇译稿,原作者是一位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

分享到:
评论

相关推荐

    可爱的Python之 交换值

    在这个例子中,Python会先计算等号右边的表达式`b, a`,创建一个包含b当前值和a当前值的元组。然后,等号左边的`a, b`作为解包的目标,将元组中的第一个值赋给a,第二个值赋给b,从而完成了变量值的交换。 元组打包...

    swap交换函数

    这是交换两个数的C++函数,通过引用传参成功在函数中实现交换两个参数

    Python中交换两个元素的实现方法

    也具有Matlab语言用于数值计算的特点,,当然了数值计算是由其其强大的第三方库numpy实现的,矩阵在python中数据类型是ndarray,python中交换两个数值的代码和交换同一矩阵(ndarray)中不同向量的写法是不一样的。...

    Python考试题及参考答案.docx

    选项B的路径"D:\a.txt"在Windows系统中是不正确的,应该使用双反斜杠"D:\\a.txt"。 7. 列表操作:列表是Python中可变的数据结构,可以用`==`比较两个列表是否相同,可以嵌套创建多维列表,用`+`号拼接列表。选项D...

    [详细完整版](完整版)python真题程序填空阅读填空程序试题.doc

    print("After swap: ", a, b) ``` 11. 十进制转二进制: - 代码中①处填`n%2`,表示取余数;②处填`n//2`,表示整除,更新n的值。完整代码如下: ```python n = int(input("请输入一个十进制数:")) result =...

    Python 基础题库 试题100 题及答案

    若 a=True b=True 贝 U a or b ==False)**: 如果 `a` 和 `b` 均为 `True`,那么 `a or b` 的结果一定是 `True`,而非 `False`。 ### 函数参数传递 - **错误的描述(D.实参与形参的名字必须相同)**: 在 Python 中...

    华为OD机试C卷- 田忌赛马(Java & JS & Python & C).md-私信看全套OD代码及解析

    1. **输入**: 给定两个只包含数字的数组`a`和`b`,其中`a`和`b`的大小均不超过10,且两数组中的数字各不相同。 - 第一行:数组`a`中的数字,每两个数字之间用一个空格分隔。 - 第二行:数组`b`中的数字,每两个...

    Python 基础课程《8.函数》

    def swap(a, b): return b, a ``` #### 7.6 变量的作用域 - **局部变量**: - 在函数内部定义的变量。 - 示例: ```python def func(): x = 10 # 局部变量 ``` - **全局变量**: - 在函数外部定义的变量。 ...

    Python字符串的全排列算法实例详解

    例如,对于字符串 "abc",它的全排列结果为 "abc", "acb", "bac", "bca", "cab", "cba"。在本篇文章中,我们将通过一个具体的例子来详细介绍如何使用Python语言实现字符串的全排列算法,并深入探讨其中的细节。 ###...

    python入门-31-定义元组.ev4.rar

    - **多值返回**:元组常被用于函数返回多个值,例如 `def swap(a, b): return (b, a)`。 - **默认参数**:在定义函数时,元组可以作为默认参数,确保函数调用时不改变这些值。 8. **元组在字典中的作用**: - **...

    Python应用——多变量的灵活处理

    本文始发于个人公众号:TechFlow,原创不易,求个关注 我们都知道Python是一个非常灵活的语言,以至于如果它不是你的第一门语言,你会发现它总能给你各种各样的惊喜,让你忍不住惊叹:woc,...# swap a, b c = a a = b

    Lerner -- Python Workout. 50 Essential Exercises -- 2020.pdf

    - **Objective:** Swap the first and last characters of a given string. - **Key Concepts:** - Slicing strings. - Concatenating strings. 10. **Summing Anything** - **Objective:** Create a function...

    python中的对象拷贝示例 python引用传递

    复制代码 代码如下:void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp;} 这个例子就是一个引用传递的例子!目的是说明一下概念:引用传递的意思就是说你传递的是对象的引用,对这个引用的修改也...

    Python序列类型的打包和解包实例

    def swap(a, b): a, b = b, a # 使用同时分配交换函数内部的a和b return a, b ``` 总结起来,Python的序列打包和解包提供了灵活的数据处理方式,让程序员能够更高效地操作序列和变量。这种特性在函数调用、循环、...

    异或运算.docx

    这种方法的时间复杂度为O(n),因为它只需要遍历一次数组,而且不需要额外的空间,符合题目的要求。 总结来说,异或运算是一种基础且强大的逻辑运算,它在编程中有着广泛的应用,包括数据交换、查找唯一项以及在各种...

    详解Python中的array数组模块相关使用

    ### Python中的Array数组模块详解 #### 一、引言 在Python编程语言中,虽然数组不是内置的标准数据结构,但通过使用`array`模块,我们可以轻松地实现数组功能。本篇文章将详细介绍`array`模块的基本概念、使用方法...

    异或运算.pdf

    def swap(a, b): a = a ^ b b = a ^ b a = a ^ b return a, b ``` 这段代码利用了异或的性质,两次异或同一个值相当于取消之前的异或操作,因此`a`和`b`的值被互换,而没有引入额外的存储需求。这在内存有限或...

    浅谈PYTHON 关于文件的操作

    with open('b.txt', 'rt', encoding='utf-8') as f, open('.b.txt.swap', 'wt', encoding='utf-8') as p: for line in f: p.write(line.replace('yv', 'yang')) os.remove('b.txt') os.rename('.b.txt.swap', ...

    排列组合源代码程序, 简单易懂

    对于组合问题,由于不需要考虑元素的顺序,我们可以采用类似的方法,但不需要在递归过程中恢复原始状态。这里提供一个组合的伪代码示例: ```python function combine(data, start, end, chosen, index): if index...

    左偏树的特点及其应用_黄源河.ppt

    If key(B) (A) Then swap(A, B) right(A) ← Merge(right(A), B) If dist(right(A)) > dist(left(A)) Then swap(left(A), right(A)) If right(A) = NULL Then dist(A) ← 0 Else dist(A) ← dist(right(A)) + ...

Global site tag (gtag.js) - Google Analytics