Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में फ़ंक्शन नाम की स्ट्रिंग से मॉड्यूल का फ़ंक्शन कैसे कॉल करें?

पायथन में ऑब्जेक्ट्स के इंस्टेंस वेरिएबल और मेथड एट्रिब्यूट के रूप में होते हैं। फ़ंक्शन नाम की स्ट्रिंग से मॉड्यूल का फ़ंक्शन कॉल करने के लिए, आप पहले इस एट्रिब्यूट को प्राप्त कर सकते हैं और उससे जुड़े फ़ंक्शन ऑब्जेक्ट को कॉल कर सकते हैं।

उदाहरण

मान लें कि मेरे पास एक मॉड्यूल `foo` है, और मेरे पास एक स्ट्रिंग है जिसकी सामग्री `"bar"` है। `foo.bar()` कॉल करने का सबसे अच्छा तरीका है:

>> import foo
>>> method_to_call = getattr(foo, 'bar')
>>> result = method_to_call()

ग्लोबल/लोकल नेमस्पेस से

यदि आपके पास मॉड्यूल प्रीफिक्स के बिना ग्लोबल या लोकल नेमस्पेस में फ़ंक्शन है, तो आप `globals()`/`locals()` का भी उपयोग कर सकते हैं। `locals` वर्तमान लोकल सिंबल टेबल के साथ एक डिक्शनरी लौटाता है। `globals` ग्लोबल सिंबल टेबल के साथ एक डिक्शनरी लौटाता है।

उदाहरण

>> result = locals()["myfunction"]()
# या
>>> result = globals()["myfunction"]()

सुरक्षित दृष्टिकोण: डिक्शनरी मैपिंग


# सुरक्षित तरीका - अनुमत फ़ंक्शन की व्हाइटलिस्ट
ALLOWED_FUNCTIONS = {
    'func_a': func_a,
    'func_b': func_b,
    'func_c': func_c,
}

def call_function(name, *args, **kwargs):
    if name not in ALLOWED_FUNCTIONS:
        raise ValueError(f"Function {name} not allowed")
    return ALLOWED_FUNCTIONS[name](*args, **kwargs)

# उपयोग
result = call_function('func_a', arg1, arg2)

importlib के साथ डायनामिक इम्पोर्ट + कॉल


import importlib

def call_module_function(module_name, func_name, *args, **kwargs):
    module = importlib.import_module(module_name)
    func = getattr(module, func_name)
    return func(*args, **kwargs)

# उपयोग
result = call_module_function('math', 'sqrt', 16)  # 4.0
result = call_module_function('os.path', 'join', 'a', 'b')  # 'a/b'

सुरक्षा चेतावनी

  • कभी भी अविश्वसनीय इनपुट पर `eval()` या `exec()` का उपयोग न करें
  • `getattr`/`globals()` अनुमत नामों की व्हाइटलिस्ट के साथ उपयोग करें
  • इंजेक्शन हमलों से बचने के लिए इनपुट मान्य करें

उपयोग के मामले

  • प्लगइन सिस्टम
  • कमांड पैटर्न कार्यान्वयन
  • कॉन्फ़िगरेशन-चालित निष्पादन
  • RPC/एपीआई डिस्पैचिंग
  1. - पायथन में स्ट्रिंग से फंक्शन के नाम से मॉड्यूल के फंक्शन को कैसे कॉल करें?

    निम्न कोड आवश्यक फंक्शन को कॉल करना चाहिए: import fibo result = getattr(fibo, baz) print result इसी तरह हम getattr का उपयोग क्लास इंस्टेंस बाउंड मेथड्स, मॉड्यूल-लेवल मेथड्स, क्लास मेथड्स आदि के लिए कर सकते हैं।

  1. - MATLAB से पायथन फंक्शन कैसे कॉल करें?

    पायथन लाइब्रेरीज़ अब MATLAB में उपलब्ध हैं (2014b के बाद से)। यदि हम 2014b या बाद के संस्करण का उपयोग कर रहे हैं तो हम सीधे MATLAB में कोड चला सकते हैं। इससे MATLAB में पायथन मॉड्यूल्स का उपयोग करना संभव हो जाता है। बिना किसी अन्य परिवर्तन के, बस उस पायथन लाइब्रेरी के नाम से पहले py प्रीफिक्स करें ज

  1. - कमांड लाइन से पायथन मॉड्यूल कैसे कॉल करें?

    यदि हम एक पायथन स्क्रिप्ट लिख रहे हैं जिसे मॉड्यूल के रूप में उपयोग किया जाना है, तो हम फंक्शन के इस कॉल को नीचे जोड़कर इस मॉड्यूल का टेस्ट कर सकते हैं: def fubar(): #does something useful fubar() और इसे कमांड प्रॉम्प्ट पर इस तरह चलाएं: ~$ python fubar.py