我有一个来自inspect.getargspec(function).args 的变量名列表。每个列表项都是变量名称的字符串。我需要在函数内部使用这些字符串名称,以便检查参数变量的值是否为字符串。
这就是我正在使用的
@staticmethod
def boyleslaw(p, V, k):
"""pV = k
p=pressure Pa, V=volume m^3, k=constant
substitute letter to solve for that value
return x"""
#sv = countvar(gasses.boyleslaw)
sv = 0
if p == 'p': sv += 1
if V == 'V': sv += 1
if k == 'k': sv += 1
if sv > 1:
raise ValueError('Too Many Variables')
if p == 'p' and sv == 1:
x = k/V
return x
elif V == 'V' and sv == 1:
x = k/p
return x
elif k == 'k' and sv == 1:
x = p*V
return x
@staticmethod
def charleslaw(V, T, k):
"""V/T = k
V=volume m^3, T=temperature K, k=constant
substitute letter for value to solve for
return x"""
#sv = countvar(gasses.charleslaw)
sv = 0
if V == 'V': sv += 1
if T == 'T': sv += 1
if k == 'k': sv += 1
if sv > 1:
raise ValueError('Too Many Variables')
if V == 'V' and sv == 1:
x = k*T
return x
elif T == 'T' and sv == 1:
x = V*k
return x
elif k == 'k' and sv == 1:
x = V/T
return x
我想结束这个过程
sv = 0
if V == 'V': sv += 1
if T == 'T': sv += 1
if k == 'k': sv += 1
if sv > 1:
raise ValueError('Too Many Variables')
进入它自己的计数变量函数来计算参数并检查每个参数值是否是一个字符串。到目前为止,我要做什么……然后墙+头……
@staticmethod
def countvar(module):
"""Count number of Variables in args"""
vc = 0
alist = inspect.getargspec(module)
for i in alist.args:
if isinstance(i, str) == True:
vc += 1
return vc
这在任一函数上运行时都会返回 3,无论它们的值如何,因为 alist.args 中的每个项目都是一个字符串。如果每个变量的 VALUE 是一个字符串,我只想增加计数器,如果有多个变量,则提高 ValueError。如何将字符串'p'翻译成变量p...
编辑:澄清
boyleslaw(6886019.02, 1, k) #Solve for k
inspect.getargspec(boyleslaw).args
返回['p', 'V', 'k']
我想要一份清单[6886019.02, 1, 'k']
alist[0]
= 返回'p'
#字符串名称
我需要return p
#变量值
如果值 p 是一个字符串(如果在调用时选择了哪个变量来解决),则递增计数器以进行错误处理
boyleslaw(6886019.02, 1, k)
不会引发错误
boyleslaw(6886019.02, V, k)
将raise ValueError('Too Many Variables')