这是我的第一篇文章,我是编码的新手(Python 3 是我的第一语言)所以请耐心等待 :)
我不知道(甚至不知道自己应该搜索什么函数来尝试和学习)如何编写一些可以使用 while 循环来检查用户键入的先验函数是否有效的代码一,存在于数学模块中:
user_fn_str = str(input("Type a transcendental function in this form: e.g. 'sin' or 'exp'"))
然后说用户输入:
sim
检查将失败(math.sim 不存在)并且它们将保留在 while 循环中直到有有效输入。
提前致谢。
请您参考如下方法:
您可以检查 math 的 dir(..),例如:
import math
name in dir(math)
但是对于'__doc__'和'pi'这样的事情,这也会给你True,所以你不能保证它是一个函数。
因此,您需要做的是获取属性并通过检查它是否附加了 __call__' 属性来检查它是否可调用。因此,完整的测试将类似于:
import math
def is_math_function(funcname):
func = getattr(math,funcname,None)
return func is not None and hasattr(func, '__call__')
你可以进一步优化它,因为 None 没有 __call__,所以你可以简单地说明:
def is_math_function(funcname):
return hasattr(getattr(math,funcname,None),'__call__')
使其成为单行。
一些补充说明:
- 如果测试成功,那不本身就意味着它是一个数学函数:
math可能包含一些额外的函数,例如isnan例如(好吧,你可以争论这是否是一个数学函数);和 - 它没有说明参数数量,它可以是一个(例如对于
math.sin),但也可以是多个(或者严格来说甚至没有参数,但对于math可能不是这种情况。
