В чем разница между строковым методом и методом str в Python? - PullRequest
6 голосов
/ 25 марта 2012

String - это модуль, а str - это тип. Я обнаружил, что у str есть методы, и некоторые из методов str совпадают со строкой.

>>>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 голосов
/ 25 марта 2012

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.
6 голосов
/ 25 марта 2012

Когда в Python были добавлены методы str , большая часть существующего строкового модуля была переписана как тонкая оболочка для функций str. Например, вот исходный код для функции 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()
...