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)
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)
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'}
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)
Không hoàn toàn: "cú pháp không hợp lệ" –
ah, tôi không chú ý. Nên tốt hơn bây giờ. –
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
>>>
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
Như của 'python 3.5'' Foo (** arg1, ** arg2) 'là có thể –
Hoặc: keywords = dict (keyword1 = 'foo', keyword2 = 'bar') –