【问题标题】:Python defining FunctionPython定义函数
【发布时间】:2017-06-22 17:36:21
【问题描述】:

我想做一个从字符串中去除空格的函数,到目前为止我有:

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

string = " yes   Maybe   So"

我想通过这样做来剥离空间

string.stripped()

但我不断收到此错误 AttributeError:“str”对象没有“已剥离”属性

我做错了什么我猜这很简单,我只是忽略了,在此先感谢。

【问题讨论】:

  • 您需要将字符串提供给strippedstripped 不是字符串方法。
  • 你想要strippedreturn x 然后string = stripped(string)

标签: python string function


【解决方案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'
>>>

请注意您的要求是技术上可能的。 这是一个猴子补丁,不应该使用。但只是为了完整性:

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


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

【讨论】:

  • 知道了,我不认为我必须退回它,我没有正确理解,感谢您的帮助。我会尽快接受。
  • @Cannon 很高兴我能帮上忙。
【解决方案2】:

您不能像这样向现有类添加方法。您可以编写一个接收并返回字符串的函数:

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

然后通过传递你的字符串来调用它:

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

【讨论】:

    【解决方案3】:

    如果您想要所有空格,而不仅仅是空格,您可以使用''.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'
    

    【讨论】:

    • 虽然这可能提供了一个更好的方法,但它并没有回答主要问题,这可能就是你被否决的原因。 (我没有投反对票)。
    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2010-10-17
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多