13

動作する Python スクリプトがありましたが、Python 3 で何かが変更されたに違いありません。

たとえば、引数 1 を小文字に変換したい場合:

import string
print(string.lower(sys.argv[1]))

わかりました'module' object has no attribute 'lower'stringモジュールになりました。

インポートを削除して のみを書き込むとstring.lower('FOO')、 と不平を言いname 'string' is not definedます。

では、文字列を小文字に変換する正しい方法は何ですか?

4

4 に答える 4

16

使用できますsys.argv[1].lower()

>>> "FOo".lower()
'foo'

lower()文字列オブジェクト自体のメソッドです。

stringstrmodule は Python 3 で変更され、オブジェクトに関連するメソッドは含まれなくなり、以下の定数のみが含まれるようになりました。

を使用することもできstr.lower("Mystring")ますが、単純に使用できるため、ここでは不要です"Mystring".lower()

>>> import string  # Python 3
>>> dir(string)
['ChainMap', 'Formatter', 'Template', '_TemplateMetaclass', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
于 2013-05-20T05:33:56.210 に答える
5

そうでstrはありませんstring

>>> str.lower("HELLO")
'hello'

したがって、name 'string' is not defined.エラーが発生する理由は、スコープ内に という変数が現在存在しないためですstring

于 2013-05-20T05:36:17.520 に答える
3

オブジェクト指向の正しい方法は次のとおりです。

'FOO'.lower()

あなたの例では:

print(sys.argv[1].lower())
于 2013-05-20T05:45:50.883 に答える
3

さらに、オブジェクト指向の方法 (str オブジェクトのメソッドを呼び出す) を好む人もいれば、関数や演算子を使用した古い方法を好む人もいます。また、解決する問題によっても異なります。(同意しない場合は、たとえば について考えてください(1.5).__add__(3)。)

読みやすくするために必要な関数に独自の (より単純な) 名前を簡単に作成できます。誰にとっても(将来あなたにとって、そして現在)読めるかどうかだけを考えるべきです:

>>> lower = str.lower
>>> lower('SoMe CaPiTaL LetTerS to Be LoWeRED')
'some capital letters to be lowered'
于 2013-05-20T10:34:34.620 に答える