2014-10-21 6 views
7

में तर्कों का नाम दिया गया है, मुझे पता है कि अगर फ़ंक्शन **kwargs में होता है तो मैं फ़ंक्शन तर्क को एक शब्दकोश में बदल सकता हूं।पैकिंग को एक नियम

def bar(**kwargs): 
    return kwargs 

print bar(a=1, b=2) 
{'a': 1, 'b': 2} 

हालांकि, विपरीत सच है? क्या मैं पैक को एक शब्दकोश में तर्कों का नाम दे सकता हूं और उन्हें वापस कर सकता हूं? हाथ-कोडित संस्करण इस तरह दिखता है:

def foo(a, b): 
    return {'a': a, 'b': b} 

लेकिन ऐसा लगता है कि एक बेहतर तरीका होना चाहिए। ध्यान दें कि मैं फ़ंक्शन में **kwargs का उपयोग करने से बचने की कोशिश कर रहा हूं (नाम तर्क कोड समापन के साथ आईडीई के लिए बेहतर काम करते हैं)।

+0

'स्थानीय लोगों लौट()' एक बार आप अपने कोड –

+0

[इस] (http में किसी भी अन्य चर की जरूरत नहीं है: // stackoverflow .com/a/582206/432913) उसी प्रश्न का उत्तर [इस] से लिंक करने के नीचे एक टिप्पणी है (http://kbyanc.blogspot.co.uk/2007/07/python-aggregating-function-arguments.html) ब्लॉग पोस्ट, जो आप चाहते हैं, और देखभाल या किनारे के मामलों को लेता है जो iCodez का जवाब याद करता है। – will

उत्तर

9

ऐसा लगता है आप locals लिए देख रहे हैं की तरह:

>>> def foo(a, b): 
...  return locals() 
... 
>>> foo(1, 2) 
{'b': 2, 'a': 1} 
>>> def foo(a, b, c, d, e): 
...  return locals() 
... 
>>> foo(1, 2, 3, 4, 5) 
{'c': 3, 'b': 2, 'a': 1, 'e': 5, 'd': 4} 
>>> 

नोट तथापि कि इस सभी नाम के एक शब्दकोश है कि foo के दायरे के भीतर हैं वापस आ जाएगी:

>>> def foo(a, b): 
...  x = 3 
...  return locals() 
... 
>>> foo(1, 2) 
{'b': 2, 'a': 1, 'x': 3} 
>>> 

यह shouldn यदि आपके कार्य आपके प्रश्न में दिए गए हैं तो कोई समस्या नहीं है। यदि यह तथापि है, तो आप inspect.getfullargspec उपयोग कर सकते हैं और एक dictionary comprehension फिल्टर करने के लिए locals():

>>> def foo(a, b): 
...  import inspect # 'inspect' is a local name 
...  x = 3   # 'x' is another local name 
...  args = inspect.getfullargspec(foo).args 
...  return {k:v for k,v in locals().items() if k in args} 
... 
>>> foo(1, 2) # Only the argument names are returned 
{'b': 2, 'a': 1} 
>>> 
+0

अस्वीकरण के लिए धन्यवाद; मैं इस कार्यक्षमता को कक्षा के भीतर देख रहा हूं, इसलिए मैं विधि को स्थिर बना रहा हूं। – Felix

संबंधित मुद्दे