在python中,如果我们有一个与导入的函数同名的函数,会发生什么。哪一个会跑?

在python中,如果我们有一个与导入的函数同名的函数,会发生什么。哪一个会跑?,python,function,oop,Python,Function,Oop,在python程序中,如果我们有一个本地定义的函数,另一个是从其他模块导入的函数。哪一个会跑 from example.maths import multiply def multiply(a,b): ----- multiply(2,3) 另外,如果我想用cython编写一个函数并导入它。同时,保留本地定义的函数,以防用户没有安装cython。如何实现这一点?如果您有两个相同的名称,则运行时传递的较新名称将保留下来。因为您不想覆盖导入的乘法,所以可以使用import…as语句并为

在python程序中,如果我们有一个本地定义的函数,另一个是从其他模块导入的函数。哪一个会跑

from example.maths import multiply

def multiply(a,b):
    -----

multiply(2,3)

另外,如果我想用cython编写一个函数并导入它。同时,保留本地定义的函数,以防用户没有安装cython。如何实现这一点?

如果您有两个相同的名称,则运行时传递的较新名称将保留下来。因为您不想覆盖导入的乘法,所以可以使用import…as语句并为该乘法赋予不同的名称。而且,cython在进口时基本相同

from example.maths import multiply as multi

def multiply(a,b):
    -----

multiply(2,3)
# multi(2,3)

嗯,这被认为不是一个好的编码实践。永远不要使用与导入函数相同的名称定义函数

在您的情况下,本地定义的函数将优先于导入的函数。这样想:如果您在代码的_main____部分中定义了某个变量,然后在某个函数中对某个变量使用相同的名称,那么该变量将覆盖第一个变量。导入也会发生同样的情况。

视情况而定。 如果在定义新函数后调用乘法,则将调用本地定义的函数。如果之前调用了乘法,则将使用导入的函数

Python 3中的一个简短示例:

import math
print(math)
# <module 'math' from '/usr/local/lib/python3.5/lib-dynload/math.cpython-35m-x86_64-linux-gnu.so'>

def math():
   pass

print(math)
# <function math at 0x7fe5a376db70>
在python程序中,如果我们有一个本地定义的函数,另一个是从其他模块导入的函数。哪一个会跑

from example.maths import multiply

def multiply(a,b):
    -----

multiply(2,3)
您的IDE将取代以前的IDE,我相信任何IDE都会就此向您发出警告

您可以使用内置函数在调用当前模块的位置查看当前模块中的所有可用全局符号:

from math import floor

print(globals())

def floor(x):
    print 'hello, ' + x

print(globals())
第一个printglobals将打印:

{'floor':,'uuuuu内置文件:'test.py','uuuu包:无','uuuuu名称:无','uuuuuu主文件','uuuu文档:无}

但第二个将打印:

{'floor':,'uuuuu内置文件:'test.py','uuuu包:无','uuuuu名称:无','uuuuuu主文件','uuuu文档:无}

您可以看到符号地板已被后面的地板替换

另外,如果我想用cython编写一个函数并导入它。同时,保留本地定义的函数,以防用户没有安装cython。如何做到这一点

您可以使用以下方法来实现它:

try:
    from your_module import func_maybe_not_exist
except ImportError:
    def func_maybe_not_exist():
        print "local implementation"

if __name__ == '__main__':
    func_maybe_not_exist()

试试看。@PrakharPratyush你需要在你的问题上下些功夫。请参阅。向下投票按钮的悬停文本开始,此问题未显示任何研究成果。。。。