2010-07-06 35 views
8

Tôi khá mới đối với Python và tôi có một tình huống mà tôi có một biến đại diện cho một hàm bên trong một mô-đun và tôi tự hỏi làm thế nào để gọi nó là động. Tôi có filters.py:Python - Gọi hàm trong mô-đun động

def scale(image, width, height): 
    pass 

Và sau đó trong kịch bản khác tôi có cái gì đó như:

import filters 

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

... nhưng điều đó không làm việc rõ ràng. Nếu ai đó có thể điền vào tôi một cách thích hợp để làm điều này, hoặc cho tôi biết nếu có một cách tốt hơn để vượt qua xung quanh chức năng như các thông số đó sẽ là tuyệt vời.

Trả lời

10

Để tránh vấn đề này, bạn có thể vượt qua chức năng trực tiếp, thay vì "theo tên":

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

Nếu bạn có một lý do đặc biệt để sử dụng chuỗi thay vào đó, bạn có thể sử dụng getattr theo đề xuất của SilentGhost.

+0

Hoàn hảo - cảm ơn! –

11

bạn không cần built-in getattr:

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

Tuyệt vời, cảm ơn bạn! –

0
import filters 

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

này sau đó có thể được gọi như thế nào, ví dụ:

process_images(filters.rotate, **rotate_options) 

Lưu ý rằng có một chức năng mặc định arg không có vẻ như là một ý tưởng tốt - nó không phải bằng trực giác rõ ràng lý do tại sao filters.scale là mặc định trong số một số thao tác xử lý hình ảnh có thể có.

Các vấn đề liên quan