20

I'm aware I can assign multiple variables to multiple values at once with:

(foo, bar, baz) = 1, 2, 3

And have foo = 1, bar = 2, and so on.

But how could I make the names of the variables more dynamic? Ie,

somefunction(data,tupleofnames):
    (return that each name mapped to a single datum)

somefunction((1,2,3),(foo,bar,baz))     

And have the same?

4

7 に答える 7

13

それを行う方法はありますが、良い方法ではなく、Python では悪い習慣と見なされています。新しい変数は魔法によって作成されるべきではありません。物事のコレクションが必要な場合は、必要に応じてリスト、辞書、またはセットを使用します。

たとえば、辞書を返すことができます。{"foo":1, "bar":2, "baz":3}

于 2011-03-11T12:50:31.520 に答える
10

これはどう?

def somefunction(data, tupleofnames):
    length = len(tupleofnames)
    for i in range(0, length):
        globals()[tupleofnames[i]] = data[i]

ここでは、data と tupleofnames の両方がリストであり、tupleofnames が文字列のリストであると仮定します。しかし、トーマスが述べたように、これは良い習慣ではありません。アプリが簡単に破損する可能性があります。

于 2011-03-11T13:10:42.460 に答える
6

辞書が必要ない場合は、namedtuple を使用することをお勧めします。名前付き属性を使用して、グループ化されたデータの複数のインスタンスを効率的に作成できます。

http://docs.python.org/library/collections.html#collections.namedtuple

from collections import namedtuple


mytype = namedtuple("mytype", "foo bar baz")

a = mytype(1,2,3)
a.foo
1
a.bar
2
a.baz
 3
于 2011-03-11T14:47:59.403 に答える
5

次のように実行できます。

    (foo, bar, baz) = (1, 2, 3)
于 2014-02-05T18:44:10.733 に答える
3

zip とマップのヘルプ ドキュメントを確認してください。たとえば、zip の場合:-

>>>  zip( (1,2,3) , ('foo','bar','baz') )
[(1, 'foo'), (2, 'bar'), (3, 'baz')] 

map には、シーケンスを一緒にマップする関数が必要です。ただし、関数の代わりに None を使用して、上記の zip と同じ結果を返すことができます。

>>> map( None, (1,2,3) , ('foo','bar','baz') )                                                                                       
[(1, 'foo'), (2, 'bar'), (3, 'baz')]
于 2011-03-11T12:58:53.193 に答える
-1
(foo, bar, baz) = [None] * 3    
a,b,c = [0]*3    
a,b,c = ["nihao"]*3
于 2016-04-14T13:13:44.443 に答える