python - 在 Python 中,如何使函数接受嵌入字符串中的一系列变量?

标签 python

在 Python 中:

a = "l[0], l[1], l[2], l[3]"
# l[0] etc. have their own value

my_function(a) #doesn't work


#but this does work
my_function(l[0], l[1], l[2], l[3])

字符串 a 是否可以“转换”以便函数可以看到变量? 谢谢。

稍后更新:感谢您回答我的问题。 我包括了更大的问题以及为什么我不得不求助于 eval 函数(根据您的回答不需要)。 函数:

class Line(object):
def __init__(self, pt1, pt2, *pt):
    pt1 = Point(pt1[0],pt1[1])
    pt2 = Point(pt2[0],pt2[1])
    self.vertices = [pt1, pt2]
    for i in pt:
        self.vertices.append(Point(i[0],i[1]))

def __getitem__(self, key):
    pt = self.vertices[key]
    p = Point(p[0],p[1])
    return p

#Here is the part with the issue:

def move(self, dx, dy):
    pts = len(self.vertices)
    l = self.vertices

    pt1 = Point(Point(l[0].x, l[0].y).move(dx, dy).x, Point(l[0].x, l[0].y).move(dx, dy).y)
    pt2 = Point(Point(l[1].x, l[1].y).move(dx, dy).x, Point(l[1].x, l[1].y).move(dx, dy).y)
    if pts == 2:
        mv = LineString(p1, p2)
    if pts > 2:
        bla = ''
        for i in [2,pts]:
            px = Point(l[i].x, l[i].y).move(dx, dy).x
            py = Point(l[i].x, l[i].y).move(dx, dy).y
            l[i] = Point(px,py)
            bla += 'l[' + str(i) + '], '
            arguments = bla[:-2]
            mv = LineString(pt1, pt2, *eval(arguments))
    return mv

根据您的回答,有更好的方法可以解决此问题..

最佳答案

为此,您可以将 eval 函数与 * 运算符结合使用来评估字符串,以将 my_function 应用于结果元组:

my_function(*eval(a))

但是,如果没有很好的理由就这样做几乎总是设计不良的迹象。 eval 使您的代码容易受到运行时错误和代码注入(inject)攻击,并删除了重要的性能优化。如果您描述您的实际需求,很可能有人可以提出更好的解决方案。

关于python - 在 Python 中,如何使函数接受嵌入字符串中的一系列变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184429/

相关文章:

python - 我的 .yaml 未正确重定向

python - 如何使 Wagtail 搜索不区分大小写

java - 使用自定义 header 和授权请求 HTTP rest 资源?

python - 正则表达式将结尾处的(所有匹配项或无匹配项)修复为 1

Python扩展调试

c++ - 如何使Botan RSA签名验证匹配PyCrypto

python - 内存错误: bad allocation when Pycharm shows barely any memory use

python - 从 python 脚本运行 C# 应用程序

python - 更改不在索引列表中的 NumPy 数组的值

python - 属性错误 : 'int' object has no attribute 'get'