2017-06-22 78 views
1

我想要从一个字符串去掉空格的功能,我至今是:Python的定义功能

def stripped(x): 
    x = x.replace(' ', '') 

string = " yes Maybe So" 

我想这样做

string.stripped() 

刚刚剥离的空间但我一直得到这个错误 AttributeError:'str'对象没有属性'剥离'

我在做什么错误我猜这是简单的东西我只是忽略克,提前感谢。

+0

您需要将字符串赋予“已剥离”。 'stripped'不是一个字符串方法。 – Carcigenicate

+1

你想'剥离'到'返回x'然后'字符串=剥离(字符串)' – castis

+0

[实现自定义字符串方法]的可能重复(https://stackoverflow.com/questions/4519702/implementing-a-custom -string-method) – depperm

回答

1

当你定义你的功能,你的Python创建一个名为stripped一个孤独的函数对象。它不会将您的功能添加到内建的str对象。你刚才

need to call your method on the string normally: 

>>> def stripped(x): 
    x = x.replace(' ', '') 


>>> string = " yes Maybe So" 
>>> stripped(string) 
>>> 

不过请注意string将不会被修改,你需要将它返回x.replace()的结果,并分配给string

>>> def stripped(x): 
    return x.replace(' ', '') 

>>> string = " yes Maybe So" 
>>> string = stripped(string) 
>>> string 
' yes Maybe So' 
>>> 

注意你问什么是techinally可能。 但是它是一个猴子补丁,不应该使用。但只是为了完整性:

>>> _str = str 
>>> 
>>> class str(_str): 
    def stripped(self): 
     return self.replace(' ', '') 


>>> string = str(" yes Maybe So") 
>>> string.stripped() 
' yes Maybe So' 
>>> 
+0

嘿嘿,我觉得我不得不退还它,我不理解这一点,谢谢你的帮助。我会尽快接受。 – Cannon

+0

@Cannon很高兴我能帮到你。 –

0

您不能将方法添加到类似的现有类中。你可以写接收并返回一个字符串的函数:

def stripped(x): 
    return x.replace(' ', '') 

,并通过将您的字符串调用它:

s = " yes Maybe So" 
s = stripped(s) 
-1

如果你希望所有的空白,而不仅仅是空间,你可以做''.join(string.split())

def stripped(string): 
    return ''.join(string.split()) 

string = stripped(' yes Maybe So') 

# But it would also handle this 
string = stripped(' yes \n Maybe So\n') 
assert string == 'yesMaybeSo' 
+0

尽管这也许提供了一个更好的方法,但它并没有回答主要问题,这可能就是为什么你被低估了。 (我没有downvote)。 –

-1

您是通过执行string.stripped()您已经定义的函数调用的字符串的方法将字符串作为参数,并且不向Python中的字符串对象添加方法。要剥离字符串,以这种方式将字符串传递给函数:

>>> s = "hello foo" 
>>> stripped(s) 
>>> s 
"hellofoo" 
+1

这个答案是错误的。参数不会被Python中的指针传递,所以's'将不会改变。 –

+0

@ChristianDean我什么时候指出使用指针? –

+0

你没有,但你似乎认为传递变量到Python中的函数,就像传递一个指针。不是这样。 's'永远不会被修改。尝试自己的方法,你会明白我的意思。 –