2012-05-28 39 views
3

我是新来的Python,所以我尝试写一个类来模拟字符串函数在C:在Python中复制对象?

class CString: 

    def __init__(self,str): 
     self.value=[] 
     self.value.extend(list(str)) 

def strcpy(cstring1,cstring2): 
     import copy 
     cstring1=copy.copy(cstring2) 

def puts(cstring1): 
    print ''.join(cstring1.value) 

strcpy的,但似乎并不奏效:

>>obj1=CString("Hello World") 
>>obj2=CString("Hai World!") 
>>puts(obj1) 
Hello World! 
>>puts(obj2) 
Hai World! 
>>strcpy(obj1,obj2) 
>>puts(obj1) 
Hello World! 

上午我分配拷贝.copy(cstring2)错误?

回答

5

线

cstring1 = copy.copy(cstring2) 

只改变本地变量称为cstring1,但它确实不变化中的变量称为obj1外部范围。

查看this other stackoverflow question了解更多信息。

+1

啊,所以参考本身是通过价值传递。 谢谢! – pupul07

+0

@ pupul07实际上,对象是通过引用传递的。但是1.你不可以修改一个'str'对象,并且2.做一个赋值不是*修改一个对象。对于C的'void func(type * arg){* arg = smth;}',没有等价物,即使它是,你也不期望void func(type * arg){arg = smth;}'要修改'arg'指向的参数而不是重新分配局部变量,是吗? – ZyX

+0

@ pupul07啊,我误解了你的评论:对象是通过引用传递的,但引用是通过值传递的。想知道用什么语言编写的代码会修改外部变量(没有像'func(&arg)'(C)那样明确地传递引用,或者至少明确地请求'sub smth(\)' (Perl,尽管使用这个特性会让每一个#perl的人都看到代码后向你大喊))?我觉得这个功能很奇怪,导致难以找到的错误。 – ZyX

1

虽然你不能修改

def strcpy(cstring1,cstring2): 
     import copy 
     cstring1=copy.copy(cstring2) 

输入参数cstring1还有其他事情可以做,以实现自己的目标。

首先,您可以让strcpy部分为字符串类,并让该成员函数更新自己的str元素。

其次,你可以提供CString set和get功能。这些函数可以直接用于将一个字符串复制到另一个字符串,或者可以由执行字符串复制的成员函数使用。

Python是一种有趣的语言。它包含了很多元素,使它看起来像C或Perl这样的常规命令式语言,并且你可以构造很多看起来像C的代码。就Python纯度而言,你会被引导而不去做事情在Python想就像你在编程C.

我建议重新创建类似的strcpy可以解决问题`一拉的Python最适合被完成。对于初学者来说,一个字符串可以简单替换另一个

祝你好运。