【问题标题】:python function variable in text文本中的python函数变量
【发布时间】:2019-04-18 03:16:38
【问题描述】:

我正在尝试创建一个简单的 python 函数,如下所示:

def fnc_assign(y,a): 
    'new_acc_no' + y + '.text' = import_list[x][a]

我想要用它做的是在我调用 fnc_assign(10,1) 时分配 new_acc_no10.text = import_list[1][0] 但我一直坚持让函数的左侧工作(我得到一个 SyntaxError: can't assign to operator)。

感谢您的帮助!

编辑: 如下所述,new_acc_no1 有一个属性 .text,它 = import_list[x][0]。

我有很多new_acc_no,所以我一直在做的是:

new_acc_no1.text = import_list[x][0]
new_acc_no2.text = import_list[x][1]
new_acc_no3.text = import_list[x][2]
new_acc_no4.text = import_list[x][12]
new_acc_no5.text = import_list[x][13]

而且我还有很多东西需要添加,所以我认为编写一个可以写出 new_acc_noY.text = import_list[x][a] 的函数将是有益的,因为 x 是 while 循环中的变量之前的代码块在里面。所以函数是 fnc_assign(1,2) 它将生成输出:

new_acc_no1.text = import_list[x][2]

x 仍然从循环中获取变量输入。这可能吗?

【问题讨论】:

  • 为什么要动态创建变量名?此外,Python 中的变量名中不能有句点。
  • .text 应该是new_acc_no<y> 的属性吗?因为如果是这样,你需要以一种完全不同的方式来解决这个问题。
  • 是的,这是一个属性,请参阅帖子编辑以获取更多信息

标签: python function string-concatenation


【解决方案1】:

将 y 更改为 str(y)

def fnc_assign(y,x): 
    import_list[x][0] = 'new_acc_no' + str(y) + '.text'

编辑:

你不能将 int 添加到 str。

【讨论】:

  • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和/或文档链接。如果没有围绕它们的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案。
【解决方案2】:

应该是

def fnc_assign(y,x): 
    import_list[x][0] = 'new_acc_no' + y + '.text'

请注意,您的 LHS 是一个字符串,而 Python 中的字符串是不可变的,即无法更改。我了解您的意图是将结果字符串分配到您放在 RHS 上的相关数组元素中。只需将它们反转即可完成任务。

或者您是否打算实际拥有一个名为 new_acc_no10.text 的变量并将导入列表中的值分配给它?

更新

这也假设y 是一个字符串(或支持使用+ 运算符与字符串连接),如果不是,请改用str(y)


新任务更新

你在问题​​中的代码(假设x中有一个外循环

for x in someValueIterator:
    new_acc_no1.text = import_list[x][0]
    new_acc_no2.text = import_list[x][1]
    new_acc_no3.text = import_list[x][2]
    new_acc_no4.text = import_list[x][12]
    new_acc_no5.text = import_list[x][13]

似乎建议采用以下方法。将帐号组织到字典中,由您用来分配的 RHS 索引进行索引,即类似

acc_nos = [new_acc_no1, new_acc_no2, new_acc_no3, new_acc_no4, new_acc_no5]
indices = [0,1,2,12,13]
idx2acc = dict(zip(indices, acc_nos))

现在像这样循环:

for index, acc_no in idx2acc.iteritems():
    acc_no.text = import_list[x][index]

并考虑到x 中的外循环,而不是

for x in someValueIterator:
    for index, acc_no in idx2acc.iteritems():
        acc_no.text = import_list[x][index]

考虑像这样直接循环:

for current_list in import_list:
    for index, acc_no in idx2acc.iteritems():
        acc_no.text = current_list[index]

【讨论】:

  • 是的,抱歉,看来我可能误判了问题,.text 是 new_acc_no 的属性
猜你喜欢
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 2015-09-04
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多