2012-02-29 28 views
10

Açık anahtar yazmadan sözlük oluşturmanın bir yolunu arıyorum Numara değişkenleri alan bir işlev oluşturmak istiyorum ve değişkenlerin adının anahtarlar olduğu ve değerlerin nerede olduğu sözlük oluşturuyorum değişken değerideğişkenler listesinden sözlük oluştur

yerine aşağıdaki işlevi yazma:

create_dict_from_variables(first_name, second_name) 
:

def foo(): 
    first_name = "daniel" 
    second_name = "daniel" 
    id = 1 
    return {'first_name':first_name, 'second_name':second_name} 

i fonksiyonu ile aynı sonucu almak istiyorum 10

bunun için zaten var mı?

cevap

2

Bunu yapamazsınız.

İşleviniz olarak tanımlanabilir:

def create_dict_from_variables(first_name, second_name): 
    return something_from(first_name, second_name) 

ve bu işlevini çağırabilirsiniz:

create_dict_from_variables('abcd', 'efgh') 

Bu iki bağımsız değişken 'abcd' ve 'efgh' değişkenleri adlı değildir.

4

locals'u kullanabilirsiniz, ancak buna karşı öneriyorum. Açıkça yap.

>>> import this 
[...] 
Explicit is better than implicit. 
[...] 

Kodunuz genellikle kırma ve açıkça yaparsanız daha anlaşılır için, daha iyi daha öngörülebilir, daha az eğilimli olacaktır.

+1

Yerliler hakkında düşündüm, ama pek çok geçici değişkenleri geçmek istemiyorum – user1087310

+0

@ user1087310: o zaman oradaki tek olasılık hakkında düşündünüz. Şimdi bunu göz ardı ettiniz, bunu yapmanın bir yolu olmadığını bilin; bunu açıkça yapın ve keyfini çıkarın! –

+0

Python'da yapamayacağım bir şeyle uğraştığımdan beri uzun zaman geçti. Diğer işlevler için parmeterlerin toplu olarak iadesi gereken birkaç işlev yazıyorum.döndürülen sözlük neredeyse değişken isimlerle aynıdır, bu yüzden anahtarı açıkça yazarken yazım hatası yapma şansım yüksektir. Ama büyükbabam bana bir kez hayatın kolay olmadığını söyledi :) – user1087310

1

Hayır, yok, çünkü Python işlevleri işlevini numaralı çağrıya kullanılan değişkenler hakkında bilgi alamıyor. Ayrıca, böyle bir şey yaptığını hayal:

create_dict_from_variables(first_name[:-3] + "moo", last_name[::2]) 

işlev parametreleri oluşturmak için kullanılan ifadeler bilmenin bir yolu olacaktır.

10

Sen değişken adları en az yazmadan bunu yapamaz, ancak bir kısaltmadır böyle yazılabilir:

>>> foo = 1 
>>> bar = 2 
>>> d = dict(((k, eval(k)) for k in ('foo', 'bar'))) 
>>> d 
{'foo': 1, 'bar': 2} 

veya

bir fonksiyonu olarak: Ayrıca kullanabilirsiniz

def createDict(*args): 
    return dict(((k, eval(k)) for k in args)) 

>>> createDict('foo','bar') 
{'foo': 1, 'bar': 2} 

globals() yerine eval(): prensip olarak

>>> dict(((k, globals()[k]) for k in ('foo', 'bar'))) 
0

bu poss olduğunu create_dict işlevine değişken adlarını geçirerek ve daha sonra inspect modülünü kullanarak create_dict işlevinin içinden arayan yığın karesine ulaşarak ible.