2008-12-02 28 views

Trả lời

357

đặn nó ra cho bản thân mình cuối cùng. Nó rất đơn giản, tôi chỉ thiếu các nhà điều hành ** để giải nén điển

Vì vậy, ví dụ của tôi trở thành:

d = dict(p1=1, p2=2) 
def f2(p1,p2): 
    print p1, p2 
f2(**d) 
+29

nếu bạn muốn điều này giúp người khác, bạn nên đặt lại câu hỏi của mình: vấn đề không phải là từ điển, bạn muốn chuyển từ khóa thành thông số từ khóa – Javier

+9

Cần lưu ý rằng bạn cũng có thể giải nén danh sách thành đối số vị trí: f2 (* [1,2]) –

+8

"dereference": thuật ngữ thông thường, trong ngữ cảnh Python này, là "giải nén". :) – mipadi

3

Đây ya đi - hoạt động giống bất kỳ iterable khác:

d = {'param' : 'test'} 

def f(dictionary): 
    for key in dictionary: 
     print key 

f(d) 
+0

Có vẻ như mọi người đang downvoting điều này vì nó đã trả lời câu hỏi gốc, chứ không phải câu hỏi được lặp lại. Tôi khuyên bạn chỉ nên xóa bài đăng này ngay bây giờ. – dotancohen

+0

@dotancohen không có nó là không bao giờ chính xác, nó không khối thứ hai của mã mà luôn luôn là với câu hỏi. Nó đã quá theo nghĩa đen, bản in là một ví dụ. –

+0

Nó trả lời câu hỏi mặc dù, nó chỉ không làm điều đó thông qua giải nén từ điển. Cách tiếp cận của ông là hoàn toàn hợp lệ dựa trên câu hỏi được đăng. – Natecat

25

Trong python, điều này được gọi là "giải nén", và bạn có thể tìm một chút thông tin về nó trong số tutorial. Các tài liệu của nó sucks, tôi đồng ý, đặc biệt là vì cách tưởng tượng nó là hữu ích.

+12

Tốt hơn là sao chép nội dung liên quan của liên kết vào câu trả lời của bạn, thay vì dựa vào liên kết còn tồn tại cho đến cuối thời gian. – Richard

+3

@Richard đó là một ý kiến ​​triết học sâu sắc về trang web, mà tôi không thể không đồng ý một cách chân thành hơn! Than ôi, tôi thiếu không gian trong lề này để chia sẻ bằng chứng tuyệt vời của tôi ... – llimllib

+0

@llimllib, tôi sẽ phải hỏi Tiến sĩ Wiles sau đó! – Richard

14

Một vài chi tiết bổ sung nào có thể hữu ích để biết (câu hỏi tôi đã có sau khi đọc bài viết này và đi và thử nghiệm):

  1. Chức năng có thể có tham số mà là không có trong từ điển
  2. Bạn có thể không ghi đè tham số đã có trong từ điển
  3. Từ điển có thể không có tham số không có trong hàm.

Ví dụ của từng:

In[3]: def test(a=4, b=2): 
    ...:  print a, b 
    ...:  

Số 1: Các chức năng có thể có tham số mà không có trong từ điển

In[6]: mydict = {'a': 100} 
In[7]: test(**mydict) 
100 2 

Số 2: Bạn có thể không ghi đè thông số đã có trong từ điển

In[8]: mydict = {'a': 100, 'b': 200} 
In[9]: test(a=3, **mydict) 

TypeError: test() got multiple values for keyword argument 'a' 

Số 3: Từ điển không thể có thông số không có trong hàm.

In[10]: mydict = {'a': 100, 'b': 200, 'c': 300} 
In[11]: test(**mydict) 

TypeError: test() got an unexpected keyword argument 'c' 
+1

Điều này thật tuyệt vời! Shoulda có nhiều phiếu bầu hơn, mọi người! –

+2

Sử dụng giải nén bằng print.format đặc biệt hữu ích. ví dụ: ''hello {greeting} {name}' định dạng (** {'name': 'Andrew', 'greeting': 'Mr'})' – Martlark

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