在 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/