2

Learn Python the Hard Way を通じて Python を学ぼうとしています。私は今、練習問題 39 に取り組んでいて、簡単な質問があります。オンラインで検索しようとしましたが、答えが見つかりませんでした。演習のコードは次のとおりです。

# create a mapping of state to abbreviation
states = {
    'Oregon': 'OR',
    'Florida': 'FL',
    'California': 'CA',
    'New York': 'NY',
    'Michigan': 'MI'
}

# create a basic set of states and some cities in them
cities = {
    'CA': 'San Francisco',
    'MI': 'Detroit',
    'FL': 'Jacksonville'
}

print '-' * 10
# safely get a abbreviation by state that might not be there
state = states.get('Texas', None)

if not state:
    print "Sorry, no Texas."

# get a city with a default value
city = cities.get('TX', 'Does Not Exist')
print "The city for the state 'TX' is: %s" % city

で何をするのかよくわかりませNonestate = states.get('Texas', None)。Pythonに「これ以上はない」と伝えるために使用された場合、なぜ私は書くことができなかったのstate = states.get('Texas')でしょうか? ここで余分なものは何が必要Noneですか? ありがとう!

4

2 に答える 2

6

これは、キーが存在しない場合に何を返すかを Python に指示Noneするためのデフォルト値です。この場合、デフォルトで 2 番目のパラメータが に設定されているためdict.get()、これは少し余分です。get()None

ドキュメントから:

get(キー[, デフォルト])

キーがディクショナリにある場合はキーの値を返し、そうでない場合はデフォルトを返します。default が指定されていない場合、デフォルトで None に設定されるため、このメソッドは KeyError を発生させません。

states.get('Texas')したがって、これは次と同等であると直接同等です。

try:
    state = states['Texas']
except KeyError:
    state = None

したがって、この場合、 が にstate評価されないかどうかを単純にチェックする場合True、それは無意味です。単純に try/except を実行し、例外に対して必要なアクションを実行する方がよいでしょう (何らかの理由で空の文字列など、フィルターで除外している他の値に戻る可能性は低いと思われます)。

Python のドキュメントは詳細ですが明確なので、引数が何かわからない場合はドキュメントを確認してください。

于 2012-09-27T23:39:33.737 に答える
1

Noneキーがディクショナリに見つからなかった場合のデフォルトの戻り値であるを記述する必要はありません。この場合は余計です。

たとえば、それを置き換えて別のものを返すことができますNot found

于 2012-09-27T23:39:47.580 に答える