2010-07-06 10 views
8

मैं पाइथन के लिए काफी नया हूं और मेरे पास ऐसी स्थिति है जहां मेरे पास एक मॉड्यूल के अंदर फ़ंक्शन का प्रतिनिधित्व करने वाला एक चर है और मैं सोच रहा हूं कि इसे गतिशील रूप से कैसे कॉल करें। मैं filters.py है:पायथन - मॉड्यूल में एक फ़ंक्शन को गतिशील रूप से

def scale(image, width, height): 
    pass 

और फिर किसी अन्य लिपि में मैं की तरह कुछ है:

import filters 

def process_images(method='scale', options): 
    filters[method](**options) 

... लेकिन यह है कि स्पष्ट रूप से काम नहीं करता। अगर कोई मुझे ऐसा करने के उचित तरीके से भर सकता है, या मुझे बताएं कि क्या फ़ोरम के रूप में कार्य करने के लिए एक बेहतर तरीका है जो कि शानदार होगा।

उत्तर

10

समस्या से बचने के लिए, आप सीधे समारोह गुजर सकता है बजाय "नाम से":

def process_images(method=filters.scale, options): 
    method(**options) 

आप एक विशेष कारण है, तो इसके बजाए स्ट्रिंग का उपयोग करने के लिए, आप getattr का उपयोग कर सकते हैं जैसा कि SilentGost द्वारा सुझाया गया है।

+0

बिल्कुल सही - धन्यवाद! –

11

आप की जरूरत में निर्मित getattr:

getattr(filters, method)(**options) 
+0

बहुत बढ़िया, धन्यवाद! –

0
import filters 

def process_images(function=filters.scale, options): 
    function(**options) 

यह तो, की तरह कहा जा सकता है उदाहरण के लिए:

process_images(filters.rotate, **rotate_options) 

ध्यान दें कि एक डिफ़ॉल्ट समारोह आर्ग होने एक अच्छा विचार की तरह प्रतीत नहीं होता है - यह intuitively स्पष्ट नहीं है क्यों filters.scale है कई संभावित छवि-प्रसंस्करण संचालन से डिफ़ॉल्ट।

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