【问题标题】:Instead of updating global values, set parameters and return in a function而不是更新全局值,设置参数并在函数中返回
【发布时间】:2018-02-12 20:35:46
【问题描述】:

更新:我现在明白这实际上只是关于范围与导入的一些混淆。我正在更新全局值,但找不到从另一个“求和函数”文件返回多个值的方法。现在,我知道这可以很容易地使用 Alex 指出的元组来完成。

所以,这是我写的一些代码。正如您可能看到的那样,我的数学函数并没有真正采用任何参数。我正在尝试将其更改为 Sum、Subtraction 和类似的函数需要两个参数,而像 sin 这样的函数只需要一个参数。现在我想问的是,我怎样才能实现给它参数 n 并返回答案像我在这里所做的那样更新全局值。任何和所有的帮助将不胜感激

from tkinter import *
import math

root= Tk()
num1=StringVar()


txtDisplay = Entry(root, textvariable = num1, width=17, font='Arial 25',justify="right");
txtDisplay.focus();
txtDisplay.grid(columnspan=5,row=0,ipady=8,padx=18,pady=10)


a=0
common=''
condition=0

oneButton = Button(root, text="1", width='5',command = lambda: clck(1 ))
oneButton.grid(row=6, column=1, ipady=8, ipadx=8)
twoButton = Button(root, text="2", width='5',command = lambda: clck(2))
twoButton.grid(row=6, column=2, ipady=8, ipadx=8)

addButton = Button(root, text="+", width='5',command = lambda: addition() )
addButton.grid(row=7, column=4, ipady=8, ipadx=8, padx=(0, 11))

subButton = Button(root, text="-", width='5',command = lambda: subtraction() )
subButton.grid(row=8, column=4, ipady=8, ipadx=8, padx=(0, 11))

sinButton = Button(root, text="sin", width='5',command = lambda: sin() )
sinButton.grid(row=9, column=4, ipady=8, ipadx=8, padx=(0, 11))


def clck (number):
    global common
    common+= str(number)
    num1.set(common)

def sin():
    global common
    global a
    a = math.sin(int(a))
    num1.set(a)

def addition():
    global a
    global common
    try:
        a=a+ int(common)
    except:
        pass
    #print(a)
    num1.set(a)
    common=''
    global condition
    condition='add'
def subtraction():
    global a
    global common
    a=a- int(common)
    #print(a)
    num1.set(a)
    common=''

root.mainloop()

另外,我现在知道我只实现了几个按钮。如果有任何方法可以改进我的代码,也请告诉我,如果有什么你没有得到的。

【问题讨论】:

标签: python function tkinter global-variables


【解决方案1】:

看看这个示例代码:

def add(arg_1, arg_2, arg_3):
    # do some stuff
    return arg_1 + int(arg_2), "new value", "new condition"

a = 1
common = "old value"
condition = "old condition"    

a, common, condition = sum(a, common, condition)
addButton = Button(root, text="+", width="5", command=lambda: addition(a, common, condition))

如果您的函数将 N 个变量作为参数并更改每个变量,则您的函数可以返回一个包含 N 个项目的元组,您可以将其“传播”到您的变量上,从而将它们全部更改。使用此方法,您可以更改全局变量,而无需在所有函数中声明它们是全局的。

除此之外,except: offensive_word = 2 是什么意思?您正在创建一个什么都不做的变量。如果您希望 except 块为空,只需编写 except: pass

【讨论】:

  • 嘿!谢啦!你能告诉我为什么你将“条件”作为参数传递吗?这没有意义,对吧?或者也许是这样?另外,您能否将我链接到解释此概念的文章:“a,common,condition = sum(a,common,condition)”或者只是让我知道它叫什么,我会查一下。谢谢!!!!!!
  • 其实我明白这里发生了什么……嗯……有趣
  • 我注意到您在 addition 函数中使用了 condition 变量,所以我认为您也需要它。如果您的函数不需要读取或重写此变量,请将其从函数声明中删除。至于返回多个值:stackoverflow.com/questions/354883/…a, b = add(a, b) 背后的想法是 (a, b) 变量和函数的返回都是元组,因此结果分布在变量上。您可以将其解释为result = add(a, b); a = result[0], b = result[1]
  • 是的...对此感到抱歉..我忘了用 pass 替换它... =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多