2009-09-30 27 views
63

Tôi có thể chuyển danh sách kwarg vào phương thức ngắn gọn không? Đây là những gì tôi đang cố gắng làm:Chuyển danh sách kwargs?

def method(**kwargs): 
    #do something 

keywords = (keyword1 = 'foo', keyword2 = 'bar') 
method(keywords) 

Trả lời

112

Có. Bạn làm điều đó như thế này:

def method(**kwargs): 
    print kwargs 

keywords = {'keyword1': 'foo', 'keyword2': 'bar'} 
method(keyword1='foo', keyword2='bar') 
method(**keywords) 

Chạy này bằng Python khẳng định những kết quả giống hệt nhau:

{'keyword2': 'bar', 'keyword1': 'foo'} 
{'keyword2': 'bar', 'keyword1': 'foo'} 
+8

Hoặc: keywords = dict (keyword1 = 'foo', keyword2 = 'bar') –

2

Bạn có nghĩa là một dict? Chắc chắn bạn có thể:

def method(**kwargs): 
    #do something 

keywords = {keyword1: 'foo', keyword2: 'bar'} 
method(**keywords) 
+0

Không hoàn toàn: "cú pháp không hợp lệ" –

+0

ah, tôi không chú ý. Nên tốt hơn bây giờ. –

8

Như những người khác đã chỉ ra, bạn có thể thực hiện những gì bạn muốn bằng cách chuyển một dict. Có nhiều cách khác nhau để xây dựng một dict. Một là giữ gìn keyword=value phong cách bạn cố gắng là sử dụng dict built-in:

keywords = dict(keyword1 = 'foo', keyword2 = 'bar') 

Lưu ý tính linh hoạt của dict; tất cả các sản phẩm này đều có cùng một kết quả:

>>> kw1 = dict(keyword1 = 'foo', keyword2 = 'bar') 
>>> kw2 = dict({'keyword1':'foo', 'keyword2':'bar'}) 
>>> kw3 = dict([['keyword1', 'foo'], ['keyword2', 'bar']]) 
>>> kw4 = dict(zip(('keyword1', 'keyword2'), ('foo', 'bar'))) 
>>> assert kw1 == kw2 == kw3 == kw4 
>>> 
3

Vì vậy, khi tôi đến đây, tôi đã tìm cách vượt qua một số hàm ** kwarg trong một hàm - để sử dụng sau này trong các chức năng khác. Bởi vì đây, không phải là đáng ngạc nhiên, không hoạt động:

def func1(**f2_x, **f3_x): 
    ... 

Với một số riêng 'thử nghiệm' mã hóa tôi đã đến rõ ràng là cách làm thế nào để làm điều đó:

def func3(f3_a, f3_b): 
    print "--func3--" 
    print f3_a 
    print f3_b 
def func2(f2_a, f2_b): 
    print "--func2--" 
    print f2_a 
    print f2_b 

def func1(f1_a, f1_b, f2_x={},f3_x={}): 
    print "--func1--" 
    print f1_a 
    print f1_b 
    func2(**f2_x) 
    func3(**f3_x) 

func1('aaaa', 'bbbb', {'f2_a':1, 'f2_b':2}, {'f3_a':37, 'f3_b':69}) 

in này như mong đợi:

--func1-- 
aaaa 
bbbb 
--func2-- 
1 
2 
--func3-- 
37 
69 
+2

Như của 'python 3.5'' Foo (** arg1, ** arg2) 'là có thể –

Các vấn đề liên quan