使用字符串来定义带元组的变量

时间:2017-05-28 18:26:09

标签: python string tuples

如果我的问题似乎是新手,我道歉,但在基于python(2.7)中的元组字符串分配变量时,我遇到了障碍。

在过去,我没有问题分配变量并使用字符串为其命名(例如:rowId = '%sDays' %workoutMode)。但在元组环境中,我遇到了一些问题。

我想从数据库中提取三个不同的表并将相同的代码应用于它们。在这个例子中,我想拉取数据并根据定义列表中的字符串打印它。但是我在根据字符串分配变量时遇到了问题。这是我的代码:

def workoutCycle():
    catagories = 'Legs', 'Arms', 'Back'
    for catagory in catagories:
        conn = sqlite3.connect('workoutData.db')
        c = conn.cursor()
        c.execute ('SELECT round(%sDays, 1), round(%sDaysTotal, 1) FROM Profile_%s' %(catagory, catagory, catagory))
        originalData = c.fetchall()
        ('%sDays' %catagory, '%sDaysTotal' %catagory) = tuple(originalData[0])
        print originalData
        print '%sDays' %catagory
        print '%sDaysTotal' %catagory

此代码返回:

SyntaxError: invalid syntax

我尝试了不同的修改,但我没有运气。字符串/元组是否缺少特定的格式?

********** EDIT **************

我似乎对自己的目标不太清楚。本质上我正在尝试创建一个循环来替换必须为每个类别编写代码。因此,例如,我想打印与“Arms”相关的数据,此代码有效:

def armCycle():
    conn = sqlite3.connect('workoutData.db')
    c = conn.cursor()
    c.execute ('SELECT round(ArmsDays, 1), round(ArmsDaysTotal, 1) FROM Profile_Arms')
    #originalData = c.fetchall()
    originalData = c.fetchall()
    (ArmsDays, ArmsDaysTotal) = tuple(originalData[0])
    print originalData
    print ArmsDays
    print ArmsDaysTotal

我正在尝试创建一个比为每个类别创建一个函数更动态的代码。我确定我会以错误的方式解决这个问题。我道歉,我是编程新手。

1 个答案:

答案 0 :(得分:1)

您希望创建基于包含值ArmsDays的变量ArmsDaysTotal命名的新变量(category"Arms")。最简单和通常的方法是不动态创建单个变量,而是使用dict

c.execute ('SELECT round(%sDays, 1), round(%sDaysTotal, 1) FROM Profile_%s' %(category, category, category))
originalData = c.fetchall()

my_dynamic_data = {}

my_dynamic_data['%sDays' %category] = originalData[0][0]
my_dynamic_data['%sDaysTotal' %category] = originalData[0][1]

dict的键的形成原理与您在select语句中构造列名的方式完全相同。然后,而不是

print '%sDays' %category
print '%sDaysTotal' %category       

DO

print my_dynamic_data['%sDays' %category]
print my_dynamic_data['%sDaysTotal' %category]       

可以在Python中动态创建新变量,但如果您需要询问如何,则不应该这样做。您需要一个非常的理由,不要使用dict