使用字符串作为函数参数

时间:2019-06-09 07:06:23

标签: python string function

嘿,我正在尝试在函数中使用字符串,但是当我将其放在''中时。 我想要得到的结果就是这个。

foo(bar = 1)

但是使用这样的字符串。

string = 'bar = 1'

foo(string)

但是它出来的样子。

foo('bar = 1')

谢谢。

4 个答案:

答案 0 :(得分:2)

我认为这个问题归结为命名参数和位置参数之间的区别。

让我们定义一个函数foo(bar)

def foo(bar):
    print(bar, "(type: " + str(type(bar)) + ")")

现在,让我们运行一些示例:

foo(1)
# 1 (type: <class 'int'>)

这是一个位置参数,按照给定的顺序进入函数。 在这种情况下,只有一个参数,因此它进入foo函数的第一个位置,即参数bar

foo(bar=1)
# 1 (type: <class 'int'>)

这是以前版本的等效名称。而不是将其作为第n个参数输入到函数中,而是显式将其输入到名为bar的参数中。

foo('bar=1')
# bar=1 (type: <class 'str'>)

这是一个位置参数,字符串为'bar=1'。 Python不在乎该字符串的内容是什么,而是将字符串保留在内容'bar=1'中。

我怀疑您要执行的操作是喂入名为arguments的函数,但要在类似dict的结构中定义参数。您可以这样实现:

args = {'bar': 1}
foo(**args)
# 1 (type: <class 'int'>)

通过这种方式,将字典args用作该函数的命名参数。

现在回到您最初遇到的问题,即如何使用字符串'bar=1'获得相同的结果。我认为这不可能轻易实现。它将涉及手动解析字符串,然后设置命名参数的字典。我不确定您要使用它做什么,但是肯定有比使用字符串更好的解决方案。

答案 1 :(得分:0)

您尝试实现的目标可能是bash和其他一些字符串类型的语言,而不是Python。

这也许是您可以在Python中执行的最接近的操作。

var_name = 'bar'
var_value = 1

foo(**{var_name: var_value})
# equivalent to foo(bar=1)

答案 2 :(得分:0)

将字符串转换为字典,在转换为int时不会忘记可能的错误:

def foo(bar = 1):
    print('bar:', type(bar), bar)

s = 'bar = 170'
d = {k.strip(): int(v.strip()) for k, v in [s.split('=', 1)]}
print('d:', type(d), d)
foo(**d)

输出:

d: <class 'dict'> {'bar': 170}
bar: <class 'int'> 170

如果需要使用INI文件,则Python具有configparse模块。

答案 3 :(得分:-1)

您可以使用exec来评估字符串,就像它是“键入”一样。

def foo(bar):
    print bar

foo(bar=1)

argString = "bar=1"

foo(argString)


exec("foo(" + argString + ")")

运行此:

1
bar=1
1

但是通常使用exec / eval not recommended,所以如果我是我,我仍然会尝试其他方法。