क्या पाइथन में गतिशील कीवर्ड बनाने की क्षमता है?पायथन में गतिशील कीवर्ड तर्क?
उदाहरण के लिए:
qset.filter(min_price__usd__range=(min_price, max_price))
मैं एक चयनित मुद्रा के आधार पर usd भाग को बदलने में सक्षम होना चाहता हूँ।
क्या पाइथन में गतिशील कीवर्ड बनाने की क्षमता है?पायथन में गतिशील कीवर्ड तर्क?
उदाहरण के लिए:
qset.filter(min_price__usd__range=(min_price, max_price))
मैं एक चयनित मुद्रा के आधार पर usd भाग को बदलने में सक्षम होना चाहता हूँ।
हाँ, यह करता है। फ़ंक्शन परिभाषा में **kwargs
का उपयोग करें।
उदाहरण:
def f(**kwargs):
print kwargs.keys()
f(a=2, b="b") # -> ['a', 'b']
f(**{'d'+'e': 1}) # -> ['de']
लेकिन तुम यही कारण है कि क्या ज़रूरत है?
धन्यवाद, ऐसा हुआ। मुझे इसकी आवश्यकता है क्योंकि मेरे पास फ़ंक्शन तक पहुंच नहीं है (यह एक Django फ़ंक्शन है)। तो विधि स्वयं ही ** kwargs की तलाश कर रही है, लेकिन मुझे पार्स करने के लिए विधि को गतिशील रूप से कीवर्ड बनाने की आवश्यकता है। – user42876
हां, तरह। अपनी फ़िल्टर विधि में आप एक वाइल्डकार्ड वेरिएबल घोषित कर सकते हैं जो सभी अज्ञात keyword arguments एकत्र करता है। इस तरह अपने कार्य की घोषणा के द्वारा
def filter(self, **kwargs):
for key,value in kwargs:
if key.startswith('min_price__') and key.endswith('__range'):
currency = key.replace('min_price__', '').replace('__range','')
rate = self.current_conversion_rates[currency]
self.setCurrencyRange(value[0]*rate, value[1]*rate)
धन्यवाद, लेकिन दुर्भाग्य से मेरे पास फ़ंक्शन तक पहुंच नहीं है (यह एक Django फ़ंक्शन है)। तो विधि स्वयं ही ** kwargs की तलाश कर रही है, लेकिन मुझे पार्स करने के लिए विधि को गतिशील रूप से कीवर्ड बनाने की आवश्यकता है। – user42876
आप आसानी से ऐसा कर सकते हैं:: अपने विधि इस प्रकार दिखाई देंगे
def filter(**kwargs):
अपने कार्य अब एक शब्दकोश kwargs कहा जाता है कि खोजशब्दों और मूल्यों से पारित कर दिया शामिल पारित हो जाएगा आपके काम के लिए। ध्यान दें कि, वाक्य रचनात्मक रूप से, kwargs
शब्द व्यर्थ है; **
गतिशील कीवर्ड व्यवहार का कारण बनता है।
आप रिवर्स भी कर सकते हैं। आप एक समारोह बुला रहे हैं, और आप एक शब्दकोश है कि तर्क से मेल खाती है है, तो आप
someFunction(**theDictionary)
वहाँ भी कम इस्तेमाल किया * foo संस्करण है, जो आप तर्क की एक सरणी प्राप्त करने के लिए कारण बनता है कर सकते हैं। यह सामान्य सी vararg सरणी के समान है।
तो मैं समझता हूँ कि क्या आप सही तरीके से पूछ रहे हैं,
qset.filter(**{
'min_price_' + selected_currency + '_range' :
(min_price, max_price)})
आपको क्या चाहिए होता है।
बिल्कुल मुझे क्या चाहिए! धन्यवाद। –
देखें http://stackoverflow.com/questions/310732/in-django-how-does-one-filter-a-queryset-with-dynamic-field-lookups –