2012-03-25 3 views
6

String ist ein Modul und str ist ein Typ. Ich habe str have-Methoden gefunden, und einige von strs Methoden sind mit string identisch.Was ist der Unterschied zwischen String-Methode und Str-Methode 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'] 

Was ist der Unterschied zwischen den beiden Methoden? Kann eine Zeichenfolge oder eine Zeichenfolge die Methode des jeweils anderen verwenden?

Antwort

8

string ist jetzt ein veraltetes Modul. Sie sollten immer str Objekt verwenden.

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

ich jetzt sehen. Vielen Dank! – Huo

+2

immer? Wie wäre es mit 'ascii_letters',' maketrans' und all den anderen nützlichen Methoden/Eigenschaften von 'string'? –

+0

Ja, vielleicht nicht immer, aber als allgemeine Regel. – ronakg

6

Wenn str Methoden Python hinzugefügt wurden, einen Großteil des bestehenden String Modul wurde um die STR-Methoden als dünne Wrapperfunktionen neu geschrieben. Zum Beispiel, hier ist der Quellcode für die untere Funktion im String-Modul:

# 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

Danke für deine Hilfe! – Huo

Verwandte Themen