কাওয়ার্গের একটি তালিকা পাস করছেন?


96

আমি কি সংকীর্ণতার জন্য কোনও পদ্ধতিতে কাওয়ার্গের একটি তালিকা পাস করতে পারি? আমি এটি করার চেষ্টা করছি:

def method(**kwargs):
    #do something

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

4
আমি কাওয়ার্গগুলি একটি ফাংশন থেকে অন্য ফাংশনের কাওয়ারগুলিতে দেওয়ার চেষ্টা করছিলাম। দুর্দান্ত প্রশ্ন!
বেঞ্জ

উত্তর:


162

হ্যাঁ. আপনি এটি এরকম করুন:

def method(**kwargs):
  print kwargs

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

পাইথন এ এটি চালানো এই উত্পাদন অনুরূপ ফলাফল নিশ্চিত করে:

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

10
বা: কীওয়ার্ডস = ডিক (কীওয়ার্ড 1 = 'ফু', কীওয়ার্ড 2 = 'বার')
নেড ডিলি

4
**Unpacking অপারেটর এক ফাংশন থেকে অন্য ফাংশনের kwargs করার kwargs পাস ব্যবহার করা যাবে। এই কোডটি বিবেচনা করুন: (মন্তব্যগুলিতে নিউলাইনগুলি অনুমতি দেওয়া হবে বলে মনে হয় না) def a(**kw): print(kw)এবং def b(**kw): a(kw)। এই কোডটি একটি ত্রুটি তৈরি করবে কারণ কাওয়ার্গগুলি আসলে একটি অভিধান এবং এটিকে নিয়মিত যুক্তি হিসাবে ব্যাখ্যা করা হবে dict। কোনটি কেন পরিবর্তন করা হয় def b(**kw): a(kw)করতে def b(**kw): a(**kw)প্যাকমুক্ত হবে kwএবং ত্রুটি সমাধান।
বেঞ্জ

10

অন্যরা যেমন উল্লেখ করেছে, আপনি ডিকটি পাস করে যা করতে চান তা করতে পারেন। ডিকটি নির্মাণের বিভিন্ন উপায় রয়েছে। keyword=valueআপনার চেষ্টা করা শৈলী সংরক্ষণ করে এমন একটি হ'ল বিল্ট-ইন ডিকটি ব্যবহার করা:

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

এর বহুমুখিতা নোট করুন dict; এই সমস্ত একই ফলাফল উত্পাদন:

>>> 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
>>> 

4

আপনি একটি ডিক মানে? নিশ্চিত আপনি পারবেন:

def method(**kwargs):
    #do something

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

আহ, আমি মনোযোগ দিচ্ছিলাম না। এখনই আরও ভাল হওয়া উচিত।
ডেভিড জেড

3

সুতরাং আমি যখন এখানে এসেছি তখন আমি একটি ফাংশনে কয়েকটি ** কাওয়ার্গ পাস করার উপায় খুঁজছিলাম - পরবর্তী ফাংশনে পরবর্তী ব্যবহারের জন্য। কারণ এটি আশ্চর্যজনক নয়, কাজ করে না:

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

কিছু নিজস্ব 'পরীক্ষামূলক' কোডিং নিয়ে আমি কীভাবে এটি করব তা স্পষ্টভাবে এসেছি:

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})

প্রত্যাশিত হিসাবে এই মুদ্রণ:

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

6
এর হিসাবে সম্ভবpython 3.5Foo(**arg1, **arg2)
magu_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.