0

シンプルなマップ削減のアイデアを実装するpythonプログラムを分析して理解しようとしています。一部のコードを理解するのが困難です。

Person = namedtuple('Person', ['name', 'gender', 'age', 'height'])

persons = [
    Person('mary', 'fem', 21, 60.2),
    Person('suzy', 'fem', 32, 70.1),
    Person('jane', 'fem', 27, 58.1),
    Person('jill', 'fem', 24, 69.1),
    Person('bess', 'fem', 43, 66.6),
    Person('john', 'mal', 25, 70.8),
    Person('jack', 'mal', 40, 59.1),
    Person('mike', 'mal', 42, 60.3),
    Person('zack', 'mal', 45, 63.7),
    Person('alma', 'fem', 34, 67.0),
    Person('bill', 'mal', 20, 62.1),
]

def height_by_gender_and_agegroup(p):
    key = p.gender, p.age //10
    val = p.height
    return key, val

この関数height_by_gender_and_agegroup(p)は、それぞれに対して 2 つの値を返すようですp。戻るらしい

<key,val> where key is p.gender and val is p.height
<key,val> where key is p.age and val is p.height

私は C および C++ でプログラミングを行ってきましたが、Python はまったくの初心者です。私の質問は、Python で倍数のペアを値で返す方法です。つまり、それがこのコードが行っていることだと仮定します。はいの場合、戻り値を処理するにはどうすればよいですか?

以下の回答は、Pythonでキーと値のペアを返すことは、2つのメンバーを持つ構造体を返すことに似ているという事実を伝えているようです.私はその部分を理解しています.

 key = p.gender, p.age //10

私の質問は上記の行にあります.Key は 2 つの値を取るようですp.gender.p.ageその場合、P の値ごとに 2 つのセットが返される必要があります<key,value>.これはどのように機能しますか?

4

3 に答える 3

2

あなたは言うことができます:

 k,v = height_by_gender_and_agegroup(p)
于 2013-02-11T18:41:13.340 に答える
2

返されるのは、2 つの項目のタプルです。(基本的に、C で 2 つのフィールドを持つ構造体を返すのと同じです)。返されたタプルは次のように展開できます。

key, val = height_by_gender_and_agegroup(person)

次のように考えると役立つかもしれません。

def height_by_gender_and_agegroup(p):
    key = p.gender, p.age //10
    val = p.height
    return (key, val)  # note the optional parentheses to denote a tuple

ret = height_by_gender_and_agegroup(person)
key = ret[0]
val = ret[1]  # "key, val =" is just a shortcut for this

ケースのキーには 2 つの値が含まれているため、さらに展開できます。

(gender, age), val = height_by_gender_and_agegroup(person)

または、必要に応じて:

key, val = height_by_gender_and_agegroup(person)
gender, age = key
于 2013-02-11T18:40:32.107 に答える
2

関数は実際にはtupleを返しています。

>>> def f(): return 1, 2
... 
>>> type(f())
<type 'tuple'>

他のタプルと同様に、添え字またはメンバーを順番に割り当てることで、その値にアクセスできます。

>>> first, second = f()
>>> second
2
于 2013-02-11T18:40:51.047 に答える