Python:从模块中唯一标识函数

Python:从模块中唯一标识函数,python,Python,我不是一个真正的程序员,而是一个计算统计学家,所以我可能理解复杂的算法,但不理解简单的编程结构 我最初的问题是在函数中检查模块函数是否可调用。我环顾四周,决定使用try-call函数——除了import模块,以使其更简单。我很想在sys.mod中搜索这个,但我遇到了一些可识别性问题 我当前的问题是,从模块导入函数有很多种方法:导入模块将函数定义为module.function,但从模块导入函数将函数定义为function。更不用说从模块导入函数作为myfunction了。因此,可以用几种不同的方

我不是一个真正的程序员,而是一个计算统计学家,所以我可能理解复杂的算法,但不理解简单的编程结构

我最初的问题是在函数中检查模块函数是否可调用。我环顾四周,决定使用try-call函数——除了import模块,以使其更简单。我很想在sys.mod中搜索这个,但我遇到了一些可识别性问题

我当前的问题是,从模块导入函数有很多种方法:导入模块将函数定义为module.function,但从模块导入函数将函数定义为function。更不用说从模块导入函数作为myfunction了。因此,可以用几种不同的方式调用相同的函数

我的问题是:如果加载了模块,是否有可以跟踪的函数的唯一签名?如果有实际的调用别名,那就太棒了

ps Addition:mod是一个数学函数,sys.mod返回一个已加载模块的列表,但是当您通过sys import mod执行以下操作来隐藏内置mod函数时,python 2.7不会抱怨。我觉得这有点尴尬——有没有办法通过编程避免这种阴影

我最初的问题是在函数中检查模块函数是否可调用

根据定义,所有函数都是可调用的。这将测试对象是否可调用:

因此,可以用几种不同的方式调用相同的函数

是的,但它将是同一个对象。您可以使用f is g来测试f和g是否是同一个对象

更新:为什么需要使用唯一的ID?说真的,别这样。您有用于标识测试的_hash _方法来定义适用的哈希函数

如果有实际的调用别名,那就太棒了

我一点也不确定你的意思,但我想你只是希望它永远是一个物体。已经是了

mod是一个数学函数,sys.mod返回已加载模块的列表,但python 2.7不会向sys import mod抱怨。我觉得这有点尴尬

那就别那么做。你知道进口。。。作为语法。此外,默认情况下,mod不在全局命名空间中,运算符%用于该名称空间

最后,python确实抱怨您的导入行:

>>> from sys import mod
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name mod
感谢kindall指出这一点

# define modulus f
def mod(a,b):
    return b % a

print mod(5,2)
我最初的问题是在函数中检查模块函数是否可调用

根据定义,所有函数都是可调用的。这将测试对象是否可调用:

因此,可以用几种不同的方式调用相同的函数

是的,但它将是同一个对象。您可以使用f is g来测试f和g是否是同一个对象

更新:为什么需要使用唯一的ID?说真的,别这样。您有用于标识测试的_hash _方法来定义适用的哈希函数

如果有实际的调用别名,那就太棒了

我一点也不确定你的意思,但我想你只是希望它永远是一个物体。已经是了

mod是一个数学函数,sys.mod返回已加载模块的列表,但python 2.7不会向sys import mod抱怨。我觉得这有点尴尬

那就别那么做。你知道进口。。。作为语法。此外,默认情况下,mod不在全局命名空间中,运算符%用于该名称空间

最后,python确实抱怨您的导入行:

>>> from sys import mod
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name mod
感谢kindall指出这一点

# define modulus f
def mod(a,b):
    return b % a

print mod(5,2)
别名:

modulus=mod
print modulus(5,2)
这是一个很好的python构造,对数学家来说很直观

不同的导入方式有助于将函数放入不同的名称空间,以便以后在程序中使用。有时,您希望大量使用函数,因此选择较短的变量来编写

您还可以执行以下操作:

myat=math.atanh 
在其他名称空间中创建别名的步骤

并将其用作:

myat(x)
因为它会使用math.atanhx,所以写起来会变短

典型的程序员方法是定义所有您想要使用的,然后使用它。我认为您正在尝试的是在需要函数时执行lazy=>import模块。这就是为什么您希望知道函数是否可调用的原因

Python不是函数式编程语言,例如haskel,因此您可以根据需要加载或引用

希望这有帮助

别名:

modulus=mod
print modulus(5,2)
这是一个很好的python构造,对数学家来说很直观

不同的导入方式有助于将函数放入不同的名称空间,以便以后在程序中使用。有时,您希望大量使用函数,因此选择较短的变量来编写

您还可以执行以下操作:

myat=math.atanh 
在其他名称空间中创建别名的步骤

并将其用作:

myat(x)
因为它会使用math.atanhx,所以写起来会变短

典型的程序员方法是定义所有您需要的东西 先使用nt,然后再使用它。我认为您正在尝试的是在需要函数时执行lazy=>import模块。这就是为什么您希望知道函数是否可调用的原因

Python不是函数式编程语言,例如haskel,因此您可以根据需要加载或引用


希望这有帮助

假设我有一个包含以下内容的模块:

def foo(): pass
bar = foo
通过使用is或id,您可以很容易地看到它们是相同的函数:


它们都引用同一个代码对象,它只是存储在范围字典中的不同名称下。

假设我有一个具有以下内容的模块:

def foo(): pass
bar = foo
通过使用is或id,您可以很容易地看到它们是相同的函数:


它们都引用同一个代码对象,它只是存储在范围字典中的不同名称下。

请使用顶部的格式按钮,而不是制定自己的格式约定。mod是数学函数:在Python中,mod的拼写为%。mod对Python没有特殊的内在意义。因此,从某个模块导入该名称没有问题。另外,没有sys.mod,但是有sys.modules。我很好奇为什么需要检查模块函数是否可调用。这可能不是你最初的问题。非常感谢大家的宝贵意见,我真的很感激。我仍然感到困惑的是,对象没有某种唯一的id。但这可能是因为我不太了解o.o编程。我要做的是将模块导入函数作为myfunc,而不检查并忘记整个问题。我发誓,在家里我可以打电话给国防部,得到系统模块。我不能在办公室做这件事。不知道我是怎么做到的。最好的marco@Marco:但是,它们确实有一个唯一的ID,请参见我的答案。请使用顶部的格式按钮,而不是制定自己的格式约定。mod是数学函数:在Python中,该mod的拼写为%。mod对Python没有特殊的内在意义。因此,从某个模块导入该名称没有问题。另外,没有sys.mod,但是有sys.modules。我很好奇为什么需要检查模块函数是否可调用。这可能不是你最初的问题。非常感谢大家的宝贵意见,我真的很感激。我仍然感到困惑的是,对象没有某种唯一的id。但这可能是因为我不太了解o.o编程。我要做的是将模块导入函数作为myfunc,而不检查并忘记整个问题。我发誓,在家里我可以打电话给国防部,得到系统模块。我不能在办公室做这件事。不知道我是怎么做到的。最好的marco@Marco:不过,它们确实有一个唯一的ID,请参见我的答案。实际上,可以在python中惰性地加载内容。现在还不清楚OP是在问这个问题。如果你能解释一下懒惰的技巧,我相信这会对他有所帮助。我对python不是很在行。实际上,在python中可以懒洋洋地加载东西。现在还不清楚OP是在问这个问题。如果你能解释一下懒惰的技巧,我相信这会对他有所帮助。我不太擅长python。