2012-03-25 18 views
6

Stringa è un modulo e str è un tipo. Ho trovato metodi str e alcuni dei metodi di str sono gli stessi della stringa.Qual è la differenza tra il metodo string e il metodo str in Python?

>>>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'] 

Qual è la differenza tra i due gruppi di metodi? È possibile che una str o una stringa utilizzino il metodo l'uno dell'altro?

risposta

8

string è un modulo deprecato ora. È necessario utilizzare sempre l'oggetto 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. 
+0

vedo ora. Grazie! – Huo

+2

sempre? che ne dite di 'ascii_letters',' maketrans' e di tutti gli altri metodi/proprietà utili da 'string'? –

+0

Sì, potrebbe non essere sempre, ma come regola generale. – ronakg

6

Quando str metodi sono stati aggiunti a Python, gran parte del già esistente modulo di stringa è stato riscritto come funzioni wrapper sottile intorno i metodi str. Ad esempio, qui è il codice sorgente per la funzione inferiore nel modulo string:

# 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() 
+0

Grazie per il tuo aiuto! – Huo

Problemi correlati