2016-09-21 9 views
5

में ** kwargs प्रिंट करने का कोई तरीका है, मैं केवल **kwargs के बारे में उत्सुक हूं। मैं कर रहा हूँ बस इसे सीखने शुरू कर दिया, इसलिए जब stackoverflow और वीडियो ट्यूटोरियल पर सभी प्रश्न के माध्यम से जा रहा है कि हम इसक्या Python

def print_dict(**kwargs): 
    print(kwargs) 
print_dict(x=1,y=2,z=3) 

कौन सा रूप में उत्पादन देता है की तरह कर सकते हैं नोटिस: {'y': 2, 'x': 1, 'z': 3} तो मैं आंकड़े क्यों रिवर्स और प्रिंट भी नहीं जैसे x=1,y=2,z=3

तो मैं इस कोशिश की:

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

लेकिन मैं की तरह एक त्रुटि मिली: TypeError: 'z' is an invalid keyword argument for this function (कभी कभी यह 'y' गलत कीवर्ड है दिखाता है)।

मैं भी चर के लिए असाइन करें और फिर इसे प्रिंट की तरह की कोशिश की लेकिन फिर मैं एक त्रुटि (SyntaxError: invalid syntax) मिल गया:

mydict = {'x':1,'y':2,'z':3} 
var = **mydict 
print(var) 

देखें इस काम कर रहा है:

def print_dict(**this): 
    print(this) 
mydict = {'x':1,'y':2,'z':3} 
print_dict(**mydict) 

लेकिन print(this) बजाय अगर मैं print(**this) करता हूं तो यह त्रुटि देता है।

हम *arg मुद्रित कर सकते हैं के रूप में के रूप में मैं इस कोड का प्रयास करें:

def num(*tuple_num): 
    print(tuple_num) 
    print(*tuple_num) 
num(1,2,3,4) 

यह पूरी तरह से चलाने के लिए और के रूप में उत्पादन देता है:

(1, 2, 3, 4) 
1 2 3 4 

तो मैं जानना चाहता हूँ वहाँ किसी भी संभव समाधान/जिस तरह से करने के लिए है प्रिंट **kwargs?

उत्तर

9

वाक्य रचना callable(**dictionary)शब्दकोश लागू होता है के रूप में यदि आप अलग कीवर्ड तर्कों का इस्तेमाल किया।

तो अपने उदाहरण:

print(x=1, y=2, z=3) 

जहां सटीक आदेश वर्तमान यादृच्छिक हैश बीज पर निर्भर करता है:

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

आंतरिक रूप से करने के लिए अनुवाद किया है। चूंकि print() उन कीवर्ड तर्कों का समर्थन नहीं करता है, इसलिए कॉल विफल हो जाती है।

अन्य print() कॉल सफल होता है, क्योंकि आप अलग स्थितीय तर्कों के रूप मूल्यों में पारित:

tuple_num = (1, 2, 3, 4) 
print(*tuple_num) 

है प्रभावी रूप से एक ही रूप में:

print(1, 2, 3, 4) 

और print() समारोह अलग तर्क का समर्थन करता है sep के बीच मूल्य (जो डिफ़ॉल्ट रूप से एक स्थान है) के साथ उन्हें एक-एक करके लिखकर।

**dictionary कॉल के बाहर मान्य वाक्यविन्यास नहीं है। चूंकि callable(**dictionary) कॉल सिंटैक्स का हिस्सा है, और कोई ऑब्जेक्ट नहीं है, प्रिंट करने के लिए कुछ भी नहीं है।

सबसे पर, आप प्रारूप शब्दकोश कॉल की तरह लग रहे करने के लिए कर सकते हैं:

print(', '.join(['{}={!r}'.format(k, v) for k, v in mydict.items()])) 
+0

जवाब रोशन, कि है। – Nevertheless

4

आप (कुछ भी नहीं किसी और **kwargs कर रहे हैं) शब्दकोशों के लिए अपने स्वयं के स्वरूपण का निर्माण करने के लिए है:

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items()))