2024-05-16 14:18:41 发布
网友
我对python还不熟悉,也许这听起来不符合逻辑,但我如何才能让它工作:
p1=(20,50) p2=(70,80) p3=(100,140) listP=[] #listP=[p1,p2,p3] #manually it works for i in range(3): listP.append('p'+str(i))
结果应该是点列表,而不是(p1、p2等) 提前多谢了!你知道吗
如果您想使用变量名作为字符串来访问变量,可以使用locals()或vars()(感谢@Wingston Sharon这样做):
locals()
vars()
# Using locals() for i in range(3): listP.append(locals()['p' + str(i)]) # Using vars() for i in range(3): listP.append(vars()['p' + str(i)])
在您的示例中,p1, p2, p3是标识符,但是在for循环中,您将这些标识符的名称作为字符串添加到列表中。因此,您将获得字符串列表,而不是与这些字符串匹配的标识符的取消引用值列表。这种行为是有意的,也是需要的。你知道吗
p1, p2, p3
for
标识符是代码中用来访问它们引用的值的命名句柄。一般来说,没有任何编程语言会自动将可能与某些本地标识符匹配的字符串转换为实际引用,因为在大多数情况下这是意外行为。考虑范围和安全性。你知道吗
通常,不应尝试将字符串转换为标识符。在python中,可以使用getattr。不过,我不在这里概述这一点,因为您不应该这样做。你知道吗
getattr
对于您的案例,更好的方法是直接在list或dict结构中实例化您的点:
list
dict
# List: plist = [(20, 50), (70, 80), (100, 140)] # Dict: pdict = { 'p1': (20, 50), 'p2': (70, 80), 'p3': (100, 140) }
在这些情况下,您可以按如下方式访问您的点:
# For list case: for i in range(3): print(plist[i]) # For dict case: for i in range(3): print(pdict['p{:d}'.format(i)])
您可以使用vars()
for i in range(1,4): listP.append(vars()['p'+str(i)])
如果您想使用变量名作为字符串来访问变量,可以使用
locals()
或vars()
(感谢@Wingston Sharon这样做):在您的示例中,
p1, p2, p3
是标识符,但是在for
循环中,您将这些标识符的名称作为字符串添加到列表中。因此,您将获得字符串列表,而不是与这些字符串匹配的标识符的取消引用值列表。这种行为是有意的,也是需要的。你知道吗标识符是代码中用来访问它们引用的值的命名句柄。一般来说,没有任何编程语言会自动将可能与某些本地标识符匹配的字符串转换为实际引用,因为在大多数情况下这是意外行为。考虑范围和安全性。你知道吗
通常,不应尝试将字符串转换为标识符。在python中,可以使用
getattr
。不过,我不在这里概述这一点,因为您不应该这样做。你知道吗对于您的案例,更好的方法是直接在
list
或dict
结构中实例化您的点:在这些情况下,您可以按如下方式访问您的点:
您可以使用
vars()
相关问题 更多 >
编程相关推荐