我是Python编程的新手。如何使用C或C ++向Python解释器添加新的内置函数和关键字?
我是Python编程的新手。如何使用C或C ++向Python解释器添加新的内置函数和关键字?
__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
__builtins__
模块是可写的。 - Keith__builtins__
添加许多实用函数,以便在调试时在每个上下文中都可用,并调用pdb.set_trace()。这没有任何问题,因为这只是为了我自己的消费,对吧?我对SO答案变得非常说教感到烦恼,感谢Keith为使该网站实际有用做出贡献。被接受的答案是误导性的,而Google的预览让你认为这是一件非常困难的事情。这应该被修复。 - spam_eggs__builtins__
而不是__builtin__
吗?请参考Python:__builtin__和__builtins__有什么区别?。 - Piotr Dobrogost从Python 3.6开始,请使用import builtins
。
# example 1
import builtins
def f():
print('f is called')
builtins.g = f
g() # output = f is called
####################################
# example 2
import builtins
k = print
def f(s):
k('new print called : ' + s)
builtins.print = f
print('abc') # output = new print is called abc
如果你需要一个全面的解决方案,可以查看我实现的这个函数:https://drive.google.com/file/d/19lpWd_h9ipiZgycjpZW01E34hbIWEbpa/view
另一种方法是扩展或嵌入Python,这是一个相对复杂的主题。最好阅读Python文档。对于基本用户,我只想说...
高级用户已经知道他们在做什么!
builtins
。import builtins
def write(x):
print(x)
builtins.write = write
write("hello")
# output:
# Hello
示例2:
import builtins
def hello(*name):
print(f"Hello, {' '.join(name)}!")
builtins.hello = hello
hello("Clark", "Kent")
# output:
# Hello, Clark Kent!
builtins
模块:# module A
def func(): ...
__builtins__.func = func
# module B
__builtins__['func']() # or just func()