Как добавить встроенные функции - PullRequest
13 голосов
/ 06 августа 2011

Я новичок в программировании на Python. Как я могу добавить новые встроенные функции и ключевые слова в интерпретатор Python, используя C или C ++?

1 Ответ

23 голосов
/ 06 августа 2011

Короче говоря, технически можно добавить к встроенным функциям Python , но это почти никогда не требуется (и вообще считается очень плохой идеей).

В более длительном периоде, очевидно, возможно изменить исходный код Python и добавить новые встроенные функции, ключевые слова и т. Д. Но процесс для этого немного выходит за рамки вопроса в его нынешнем виде.

Если вы хотите узнать больше о том, как изменить исходный код Python, как написать функции C, которые можно вызывать из Python, или что-то еще, пожалуйста, отредактируйте вопрос, чтобы сделать его более конкретным.

Если вы новичок в программировании на Python и чувствуете, что должен изменить основной язык в вашей повседневной работе, это, вероятно, показатель, который вы должны просто узнать больше об этом. Python используется без изменений для огромного числа различных проблемных областей (например, numpy - это расширение, которое облегчает научные вычисления, а Blender использует его для 3D-анимации), поэтому, вероятно, что язык может обрабатывать вашу проблемную область тоже.

†: вы можете изменить модуль __builtin__ для «добавления новых встроенных функций»… Но это почти наверняка плохая идея: любой код, который зависит от него, будет очень трудным (и запутанным) использовать вне контекста исходного приложения. Рассмотрим, например, если вы добавили greater_than_zero «встроенный», то используйте его где-нибудь еще:

$ cat foo.py
import __builtin__
__builtin__.greater_than_zero = lambda x: x > 0

def foo(x):
    if greater_than_zero(x):
        return "greater"
    return "smaller"

Любой, кто попытается прочитать этот код, будет сбит с толку, потому что он не будет знать, где определен greater_than_zero, и тот, кто попытается использовать этот код из приложения, которое не перешло greater_than_zero в __builtin__, выиграл не смогу его использовать.

Лучше использовать существующий оператор Python import: http://docs.python.org/tutorial/modules.html

...