piton

2008-09-09 22 views
11

adlandırılmış değişken argümanlar iletilmesi Ben aşağıdaki yöntemleri olduğunu varsayalım: yöntemleri konusundapiton

def methodA(arg, **kwargs): 
    pass 

def methodB(arg, *args, **kwargs): 
    pass 

Ben kwargs geçen, Yöntemib aramak istediğiniz. Ancak, methodA'u aşağıdaki gibi tanımlarım, ikinci argümanın adlandırılmış değişken argümanlarından ziyade konumsal olarak iletileceği görülmektedir.

def methodA(arg, **kwargs): 
    methodB("argvalue", kwargs) 

Nasıl emin yöntemleri konusunda ** kwargs Yöntemib için kwargs ** olarak iletilir emin yapabilirim?

cevap

33

Yıldız işaretlerini kwargs değişkeninden önce koyun. Bu, Python'un (sözlük olarak kabul edilen) değişkeni anahtar kelime argümanları olarak geçirmesini sağlar. As

methodB("argvalue", **kwargs) 
+0

Bu şeyi kaç kez görmem gerektiğini bilmiyorum - bu çok basit ve henüz. Açık olmasına rağmen bunu yaptığınız için teşekkürler :) – cybertoast

1

Bazı deney ve ben bunu anladım:

def Yöntemia (arg, ** kwargs): Yöntemib ("argvalue", ** kwargs)

bariz şimdi görünüyor ...

2

bir kenara: yerine yöntemlerden işlevlerini kullanırken, aynı zamanda functools.partial kullanabilirsiniz:

import functools 

def foo(arg, **kwargs): 
    ... 

bar = functools.partial(foo, "argvalue") 

bir işlev "bar" tanımlayacak son satır olduğunu, çağrıldığında, arayacak "argvalue" olarak ayarlanır ilk argüman ve diğer tüm fonksiyonları ile foo sadece geçti:

bar(5, myarg="value") 

arayacak

foo("argvalue", 5, myarg="value") 

Ne yazık ki bu yöntemlerle çalışmaz.

+0

Bu aslında ne yapıyor? Soruyla ne ilgisi var? – rjmunro