0

以下のコードで2つのことを理解するのに問題があります。問題 1: マップとは何か、その用途は何なのかわかりません。通常、次のように 2 つの引数を持つ関数を作成する場合:

def find_city(themap,state):プログラムを実行するときにthemap、2 つの引数の値を入力するべきではありません か? stateそれでも、状態の値のみを指定します。つまり、 CA OR MI OR FL のいずれかを入力します。themap何に使われているのかわかりません。

cities['_find'] = find_city 問題 2 : Google で検索した行が理解でき'_find' pythonず、見つけたのは zed Shaw の本への参照だけでした。どのカテゴリに分類されますか、またはこの行について詳しく知るには何を読む必要がありますか?

cities = {'CA': 'San Francisco', 'MI': 'Detroit',
                     'FL': 'Jacksonville'}

cities['NY'] = 'New York'
cities['OR'] = 'Portland'

def find_city(themap, state):
    if state in themap:
        return themap[state]
    else:
        return "Not found."

# ok pay attention!
cities['_find'] = find_city

while True:
    print "State? (ENTER to quit)",
    state = raw_input("> ")

    if not state: break

    # this line is the most important ever! study!
    city_found = cities['_find'](cities, state)
    print city_found

編集:これをよりよく理解できるようにするには、どの章またはPythonのトピックを勉強する必要があるか教えてください。つまり、私が尋ねた質問についてよりよく理解するためです。

4

9 に答える 9

5

この行

city_found = cities['_find'](cities, state)

呼んでいる

def find_city(themap, state):

したがって

themap ==> cities
state ==> state
于 2012-04-30T06:12:19.267 に答える
2

def find_city(themap、state):プログラムを実行するときに、2つの引数themapとstateの値を入力するべきではありませんか?

いいえ; 関数を呼び出すときは、関数に2つの引数を渡す必要があります。

プログラムが処理するすべてのデータがユーザーからのものである必要はありません。独自のデータを提供したり、ファイルから物を読み取ったりすることができます。

線の都市がわかりません['_find']=find_city

cities辞書です。したがって、キーを使用して値を辞書にcities[<anything in here>] = <anything over there>入れます。ここで、キーは文字列であり、値は関数です。はい、Pythonでは、すべてがオブジェクトであり、関数が含まれています。したがって、関数をコンテナに確実に格納できます:)<anything over there><anything over here>'_find'find_city

city_found = cities['_find'](cities, state)

ここでは、評価します。つまり、辞書でcities['_find']キーを検索し、関数を見つけます。次に、その結​​果を。で使用します。したがって、それは私たちが書いたのと同じです; これは通常の関数呼び出しです。ユーザーが入力した値であり、;として渡されます。とは、として渡される辞書です。関数内で、名前付きの状態が辞書で検索されます。'_find'citiesfind_city(cities, state)find_city(cities, state)statestatecitiesthemapcities

于 2012-04-30T06:27:49.367 に答える
2
city_found = cities['_find'](cities, state)  

ここでは、呼び出し元の関数を使用しました。これにより、事前定義された関数DEF
が呼び出されます。都市の場合は「themap」、
状態の 場合は「state」が呼び出されます。

しかし、まだ問題が残っているのは、なぜ「検索」の前に「_」記号を使用するのかということです...ありがとうございます。

于 2012-04-30T07:19:17.927 に答える
2

への呼び出しが行われたときfind_city( の前の割り当てに注意してくださいcities['_find'] = find_city)

city_found = cities['_find'](cities, state)

citiesとともに辞書を送信していstateます。識別子は関数内でcities 再マップ (必要に応じて名前を変更) され、コードのこの部分では同じままです。themapstate

def find_city(themap, state)

つまり、「メインプログラム」では辞書を として参照しcitiesますが、関数を呼び出すと、関数はそれを として参照しthemapます。state同じままです。名前は、呼び出し内の識別子と関数ヘッダーにリストされている識別子の間の位置によって照合されます。

cities[_find]関数で使用してcities辞書 にインデックスを付けることができます。statefind_city

Python での関数とパラメーター受け渡しメカニズム、(変数への) 関数割り当て、および辞書について詳しく読むと、このタイプのコード構造の理解を深めるのに役立ちます。お役に立てれば。

于 2012-04-30T06:12:58.497 に答える
0

まあ、themapいわゆるマップまたは辞書またはハッシュベースのコンテナです。が何らかの形でオーバーロードされているため、配列と同じように使用されますoperator[](私は、C ++のバックグラウンドから来ており、C ++で実行可能です)。キーに割り当てる'New York'cities['NY']、「NY」が自動的に作成され、そのキーに対応する値は「ニューヨーク」になります。

2番目の質問に答えるにfind_cityは、キーとペアになっているある種の関数ポインタ'_find'があります。これ_findがキーの任意の選択です。あなたは、またはあなたが望む他のものを使用することができfindFindでしょう。あなたがグーグルでそれについて何も見つけなかったのも不思議ではありません。この行cities['_find'](cities, state)は実際には内部的にに変換されfind_city(cities, state)ます。

私が少し助けてくれたことを願っています:)。

于 2012-04-30T06:15:18.597 に答える
0

関数は、渡すことができる値です。

どちらもその関数に評価されるため、cities['_find']言うことは、言うことと同じです。find_cityfn =都市['_find'] fn(都市、州)

Python では、値に適用される関数呼び出し構文は、呼び出し可能な場合、引数を使用してその値を呼び出そうとします。したがって、あなたの場合、cities['_find'].__call__(cities, state)実行されてしまいます。

于 2012-04-30T10:40:00.950 に答える
0

Themap は、地理的な意味での都市の地図という意味での地図ではありません。Python マップはデータ型です。関数に都市を含むコンテナーが渡されていること、およびコンテナー内で検索される都市が関数に渡されていることは明らかです。関数のコンテキストでは、パラメーターは別の名前になりますが、関数の先頭には同じ値があります。

Python では、すべての関数に割り当て可能な値があります。あなたが尋ねている問題2は、同じ関数の新しい名前です。

于 2012-04-30T06:12:07.200 に答える
0
  1. はい、その通りです。find_city は 2 つの引数を受け取り、呼び出されたときに渡される引数の数、つまり

    都市['_find'](都市、州)

  2. これは、都市マップにエントリが追加されたことを意味します。エントリのキーは文字列 "_find" で、値は関数 find_city です。そのため、citys['_find'] という式が関数を返し、それを 2 つの引数で呼び出します。

于 2012-04-30T06:14:29.267 に答える