Python中的string方法和str方法有什么区别?

6

String是一个模块,str是一种类型。 我发现str有方法,而且一些str的方法与string相同。

>>>dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', 
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace',
'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 
'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper',
'zfill']

>>> dir(string)
['Formatter', 'Template', '_TemplateMetaclass', '__builtins__', '__doc__',
'__file__', '__name__', '__package__', '_float', '_idmap', '_idmapL', '_int', 
'_long', '_multimap', '_re', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 
'atof', 'atof_error', 'atoi', 'atoi_error', 'atol', 'atol_error', 'capitalize',   
'capwords', 'center', 'count', 'digits', 'expandtabs', 'find', 'hexdigits', 'index', 
'index_error', 'join', 'joinfields', 'letters', 'ljust', 'lower', 'lowercase',
'lstrip', 'maketrans', 'octdigits', 'printable', 'punctuation', 'replace', 'rfind',
'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitfields', 'strip', 'swapcase', 
'translate', 'upper', 'uppercase', 'whitespace', 'zfill']

这两组方法有什么区别?一个str或string可以使用另一个的方法吗?

2个回答

9

string 模块已经过时了,现在应该始终使用 str 对象。

>>> help(str)
Help on class str in module __builtin__:

class str(basestring)
 |  str(object) -> string
 |  
 |  Return a nice string representation of the object.
 |  If the argument is a string, the return value is the same object.
.
.
>>>help(string)
Help on module string:

NAME
    string - A collection of string operations (most are no longer used).

FILE
    /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/string.py

MODULE DOCS
    http://docs.python.org/library/string

DESCRIPTION
    Warning: most of the code you see here isn't normally used nowadays.
    Beginning with Python 1.6, many of these functions are implemented as
    methods on the standard string object. They used to be implemented by
    a built-in module called strop, but strop is now obsolete itself.

2
总是?那ascii_lettersmaketransstring中的其他有用方法/属性呢? - Roman Bodnarchuk
是的,可能不总是,但作为一般规则。 - ronakg

6

当Python添加了str方法时,大部分现有的string模块被重写为围绕str方法的薄包装函数。例如,下面是string模块中lower函数的源代码:

# convert UPPER CASE letters to lower case
def lower(s):
    """lower(s) -> string

    Return a copy of the string s converted to lowercase.

    """
    return s.lower()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接