【问题标题】:Python post increment variable in function callPython在函数调用中发布增量变量
【发布时间】:2013-07-16 15:48:58
【问题描述】:

前提:我正在尝试在 Tkinter 中制作一堆按钮,并将它们一个接一个地放在网格布局中。我不想硬编码每个网格值,这样我以后可以轻松添加更多按钮。

我的第一个想法是:

Button(root, text = "example", command = self.example_action).grid(row = count++)

但这不起作用,我做了一些搜索,发现python没有前置或后置增量运算符(Behaviour of increment and decrement operators in Python)。所以我的下一个想法是:

Button(root, text = "example", command = self.example_action).grid(row = count = count + 1)

这给出:SyntaxError: invalid syntax

所以除了将我的代码分成两行(使用变量然后在下一行更新它)之外,有没有一种好方法可以在一行中完成这一切以使我的代码更漂亮?

【问题讨论】:

  • 在许多情况下,我不会认为一行代码更漂亮,尤其是您的情况。我个人的观点是,更好的可读性会产生更“漂亮”的代码(也许连同 PEP-8 约定)
  • Python 想让你分两行完成

标签: python tkinter post-increment


【解决方案1】:

我想你可以使用生成器。初始化计数如下:

count = itertools.count()

那么你可以随心所欲地做以下事情

Python 2.x:

Button(root, text = "example", command = self.example_action).grid(row = count.next())

Python 3.x:

Button(root, text = "example", command = self.example_action).grid(row = next(count))

但我可能不会

【讨论】:

  • 谢谢,这正是我想要的。但正如您和其他评论者所指出的那样,做这样的事情并将其全部放在一条线上可能不值得。
【解决方案2】:

我想 count 是一个整数。由于它是不可变的,因此您将无法更改其值。也就是说,无论你对函数内部的'row'做什么,函数返回后'row'的值都不会改变。

>>> row = 2
>>> def plus(i):
...     i = i + 1
...
>>> plus(row)
>>> row
2
>>>

所以我建议你将'row'存储为一个实例变量,这样你就可以通过'self.row += 1'来改变它的值

【讨论】:

  • 我相信 row 是函数 grid() 的命名参数。我正在尝试递增计数器,它是一个变量,然后将递增的结果按值传递给函数
  • 对不起,我想我的意思是“计数”而不是“行”。如果你想改变'count',你需要将它存储为self.count
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2017-03-06
  • 2015-10-25
  • 1970-01-01
  • 2016-05-18
  • 2015-09-04
相关资源
最近更新 更多