转自: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++中这种函数用来交换“a和b的值”。在Python中,a和b的值不会发生交换,但位于当前命名空间中的标记(如a和b)是可以交换的。而对象本身是仍然保留。
所以与其调用一个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会先计算等号右边的表达式`b, a`,创建一个包含b当前值和a当前值的元组。然后,等号左边的`a, b`作为解包的目标,将元组中的第一个值赋给a,第二个值赋给b,从而完成了变量值的交换。 元组打包...
这是交换两个数的C++函数,通过引用传参成功在函数中实现交换两个参数
也具有Matlab语言用于数值计算的特点,,当然了数值计算是由其其强大的第三方库numpy实现的,矩阵在python中数据类型是ndarray,python中交换两个数值的代码和交换同一矩阵(ndarray)中不同向量的写法是不一样的。...
选项B的路径"D:\a.txt"在Windows系统中是不正确的,应该使用双反斜杠"D:\\a.txt"。 7. 列表操作:列表是Python中可变的数据结构,可以用`==`比较两个列表是否相同,可以嵌套创建多维列表,用`+`号拼接列表。选项D...
print("After swap: ", a, b) ``` 11. 十进制转二进制: - 代码中①处填`n%2`,表示取余数;②处填`n//2`,表示整除,更新n的值。完整代码如下: ```python n = int(input("请输入一个十进制数:")) result =...
若 a=True b=True 贝 U a or b ==False)**: 如果 `a` 和 `b` 均为 `True`,那么 `a or b` 的结果一定是 `True`,而非 `False`。 ### 函数参数传递 - **错误的描述(D.实参与形参的名字必须相同)**: 在 Python 中...
1. **输入**: 给定两个只包含数字的数组`a`和`b`,其中`a`和`b`的大小均不超过10,且两数组中的数字各不相同。 - 第一行:数组`a`中的数字,每两个数字之间用一个空格分隔。 - 第二行:数组`b`中的数字,每两个...
def swap(a, b): return b, a ``` #### 7.6 变量的作用域 - **局部变量**: - 在函数内部定义的变量。 - 示例: ```python def func(): x = 10 # 局部变量 ``` - **全局变量**: - 在函数外部定义的变量。 ...
例如,对于字符串 "abc",它的全排列结果为 "abc", "acb", "bac", "bca", "cab", "cba"。在本篇文章中,我们将通过一个具体的例子来详细介绍如何使用Python语言实现字符串的全排列算法,并深入探讨其中的细节。 ###...
- **多值返回**:元组常被用于函数返回多个值,例如 `def swap(a, b): return (b, a)`。 - **默认参数**:在定义函数时,元组可以作为默认参数,确保函数调用时不改变这些值。 8. **元组在字典中的作用**: - **...
本文始发于个人公众号:TechFlow,原创不易,求个关注 我们都知道Python是一个非常灵活的语言,以至于如果它不是你的第一门语言,你会发现它总能给你各种各样的惊喜,让你忍不住惊叹:woc,...# swap a, b c = a a = b
- **Objective:** Swap the first and last characters of a given string. - **Key Concepts:** - Slicing strings. - Concatenating strings. 10. **Summing Anything** - **Objective:** Create a function...
复制代码 代码如下:void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp;} 这个例子就是一个引用传递的例子!目的是说明一下概念:引用传递的意思就是说你传递的是对象的引用,对这个引用的修改也...
def swap(a, b): a, b = b, a # 使用同时分配交换函数内部的a和b return a, b ``` 总结起来,Python的序列打包和解包提供了灵活的数据处理方式,让程序员能够更高效地操作序列和变量。这种特性在函数调用、循环、...
这种方法的时间复杂度为O(n),因为它只需要遍历一次数组,而且不需要额外的空间,符合题目的要求。 总结来说,异或运算是一种基础且强大的逻辑运算,它在编程中有着广泛的应用,包括数据交换、查找唯一项以及在各种...
### Python中的Array数组模块详解 #### 一、引言 在Python编程语言中,虽然数组不是内置的标准数据结构,但通过使用`array`模块,我们可以轻松地实现数组功能。本篇文章将详细介绍`array`模块的基本概念、使用方法...
def swap(a, b): a = a ^ b b = a ^ b a = a ^ b return a, b ``` 这段代码利用了异或的性质,两次异或同一个值相当于取消之前的异或操作,因此`a`和`b`的值被互换,而没有引入额外的存储需求。这在内存有限或...
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...
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)) + ...