如何将用户输入的(字符串)函数转换为数学模块

时间:2017-01-27 15:35:54

标签: python python-3.x

除了我先前提出的有助于回答的问题之外,一个新的相关问题是:

我如何追加'用户将超越函数输入到数学中。 python可以以通常的方式使用的前缀(math。 user_fn )吗?对不起初学者,我不确定我拍摄的精确术语,但我想我在这种情况下询问如何更改对象类型? e.g。

v1 = input("Type a transcendental function e.g. 'sin' or 'exp': ")

这样我就可以计算出类似的东西:

math.v1(2.3) 

1 个答案:

答案 0 :(得分:1)

你不能以通常的方式进行(即点访问)。您可以使用math.v1在现场调用它。事实是,__getattribute__将对模块对象执行v1调用,并查找属性的名称不是'v1'的值,而是,字符串getattr本身。

失败了,没有办法改变它。

您应该选择getattr(math, v1)(2.3) ,这支持动态属性提取:

v1

这试图获取一个属性, name等于func = getattr(math, v1) func(2.3) 的值,然后在现场调用它。它是一个较短的版本:

dummy_long_list = [1,2,3,4,5,6]*1000000