Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中作为参数传递参数和函数_Python - Fatal编程技术网

在python中作为参数传递参数和函数

在python中作为参数传递参数和函数,python,Python,给出的代码是我程序的一部分。在这里,我想把3个函数减少到1个,因为它们除了1行之外完全相似。我读过关于传递函数(将此函数设为Bar)及其参数作为另一个函数中的参数(将此函数称为Foo)的内容 但是在这个场景中,我不能更改函数Foo。这里我的Foo函数是。单击。connect()和addXMin是我的函数Bar。我想将Bar及其参数num传递到Foo,在那里我无法更改Foo中的内容。有没有办法将这3个函数缩减为1,并将15、10和5作为参数传递给单个函数 self.add15m.clicked.c

给出的代码是我程序的一部分。在这里,我想把3个函数减少到1个,因为它们除了1行之外完全相似。我读过关于传递函数(将此函数设为
Bar
)及其参数作为另一个函数中的参数(将此函数称为
Foo
)的内容

但是在这个场景中,我不能更改函数
Foo
。这里我的
Foo
函数是
。单击。connect()
addXMin
是我的函数
Bar
。我想将
Bar
及其参数
num
传递到
Foo
,在那里我无法更改
Foo
中的内容。有没有办法将这3个函数缩减为1,并将
15
10
5
作为参数传递给单个函数

self.add15m.clicked.connect(self.add15Min)
self.add10m.clicked.connect(self.add10Min)
self.add5m.clicked.connect(self.add5Min)

def add15Min(self):
    global mins, secs, time
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    mins+=15         #The only different line
    secs = int((time.split(':'))[1])
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

def add10Min(self):
    global mins, secs, time
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    mins+=10         #The only different line
    secs = int((time.split(':'))[1])
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

def add5Min(self):
    global mins, secs, time
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    secs = int((time.split(':'))[1])
    mins+=5         #The only different line
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

如果
connect
接受单个参数,则可以使用匿名函数(python中的
lambda
),如下所示:

self.add5m.clicked.connect(lambda: self.addMin(5))

def addMin(self, minutes):
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    secs = int((time.split(':'))[1])
    mins += minutes
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

如果
connect
接受单个参数,则可以使用匿名函数(python中的
lambda
),如下所示:

self.add5m.clicked.connect(lambda: self.addMin(5))

def addMin(self, minutes):
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    secs = int((time.split(':'))[1])
    mins += minutes
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

您可以创建一个常规函数,然后使用
functools.partial
将变量绑定到参数:

def addMin(self, mins_to_add):
    global mins, secs, time
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    secs = int((time.split(':'))[1])
    mins+=5         #The only different line
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

add5Min, add10Min, add15Min = [functools.partial(self.addMin, x) for x in range(5, 20, 5)]
或直接连接:

self.add15m.clicked.connect(partial(self.addMin, 5))

您可以创建一个常规函数,然后使用
functools.partial
将变量绑定到参数:

def addMin(self, mins_to_add):
    global mins, secs, time
    time = self.lineEdit.text()
    mins = int((time.split(':'))[0])
    secs = int((time.split(':'))[1])
    mins+=5         #The only different line
    time = str(mins).zfill(2) + ":" + str(secs).zfill(2)
    self.lineEdit.setText(time)

add5Min, add10Min, add15Min = [functools.partial(self.addMin, x) for x in range(5, 20, 5)]
或直接连接:

self.add15m.clicked.connect(partial(self.addMin, 5))

是的…你也不应该使用全局…是的…你也不应该使用全局。。。