相关疑难解决方法(0)

绑定函数内的对象值(闭包)

在SML(我在Python之前学过的函数式编程语言)中,我可以执行以下操作:

val x = 3;
fun f() = x;
f();
>>> 3
val x = 7;
f();
>>> 3
Run Code Online (Sandbox Code Playgroud)

但是,在Python中,第一个调用将给出3,第二个调用将给出7.

x = 3
def f(): return x
f()
>>> 3
x = 7
f()
>>> 7
Run Code Online (Sandbox Code Playgroud)

如何将变量的值绑定到Python中的函数?

python closures sml

3
推荐指数
1
解决办法
338
查看次数

如何在Python中绑定常量参数?

我有一个类似的课程

class C:
    def __init__(self, a):
        self.a = a
    def noParam(self):
        return self.a
    def withParam(self, b)
        return self.a + b
instC = C(5.)
Run Code Online (Sandbox Code Playgroud)

我需要传递一个类的特定实例的方法作为参数.传instC.noParam工作正常,但我怎么通过instC.withParamb总是等于说239?谢谢.

python

1
推荐指数
2
解决办法
193
查看次数

如何在 Python 中将函数放入列表中?

我想在Python中使用switch语句,但由于python中没有switch语句,我想使用函数列表。但是,当我定义列表时,函数就会被执行。

这是我的代码:

shapes = [drawSquare(), drawRectangle(), myTurtle.circle(10), drawTriangle(), drawStar()]
Run Code Online (Sandbox Code Playgroud)

这是使用海龟的输出:

输出

如何在 python 不运行函数的情况下定义函数列表?

python python-turtle

1
推荐指数
1
解决办法
2073
查看次数

Python替代Javascript function.bind()吗?

用Javascript可能会写

var ids = ['item0', 'item1', 'item2', 'item3']; // variable length
function click_callback(number, event)
{
    console.log('this is: ', number);
}
for (var k = 0; k < ids.length; k += 1)
{
    document.getElementById(ids[k]).onclick = click_callback.bind(null, k);
}
Run Code Online (Sandbox Code Playgroud)

因此,即使在调用函数k时它已更改,我也可以将其注册时的值传递给回调函数。

Python有办法做一些等效的事情吗?


具体情况是这样(但我更喜欢一个一般性的答案):

我有可变数量的matplotlib图(每个坐标一个)。每个都有一个SpanSelector,出于某种原因,它被设计为仅将两个极限点传递给回调函数。但是,它们都具有相同的回调函数。所以我有:

def span_selected(min, max):
Run Code Online (Sandbox Code Playgroud)

但是我需要

def span_selected(which_coordinate, min, max):
Run Code Online (Sandbox Code Playgroud)

在注册回调时,我当然知道坐标,但是在调用函数时我需要知道它。在Javascript中,我会做类似的事情

callback = span_selected.bind(null, coordinate)
Run Code Online (Sandbox Code Playgroud)

我将在Python中做什么?

javascript python bind callback

0
推荐指数
1
解决办法
1416
查看次数

使用Python中已提供的参数创建一个可调用对象

本质上,我试图将参数传递给函数,但推迟执行该函数直到以后.我不想拖延一段时间或者我只想sleep.这是我要用的用法

import requests

def test_for_active_server(server_address):
    response = requests.get(server_address)

try_n_times(func, expected_error, n_iterations):
    for i in range(n_iterations):
        try:
            func()
            break
        except expected_error:
            continue
    else:
        return False
    return True

try_n_times(
    create_callable(test_for_active_server("http://localhost/"),  
    requests.ConnectionError, 10)
Run Code Online (Sandbox Code Playgroud)

这里的问题当然是,当我打电话时,test_for_active_server("http://localhost/")它会立即运行,所以这个论点create_callable就是None.我相信我可以用类似的东西做到这一点

def create_callable(func, func_args: List[str], func_kwargs: Dict[str, str], *args):
    def func_runner():
        func(*args, *func_args, **func_kwargs)
    return func_runner
Run Code Online (Sandbox Code Playgroud)

然后用它作为

create_callable(test_for_active_server, "http://localhost")
Run Code Online (Sandbox Code Playgroud)

但这很尴尬.有一个更好的方法吗?

python function callable-object

0
推荐指数
1
解决办法
34
查看次数

Defaultdict,其值默认为负无穷大

我想创建一个默认字典,默认值为负无穷大.我尝试过,defaultdict(float("-inf"))但它不起作用.我该怎么做呢?

python defaultdict

-1
推荐指数
1
解决办法
1766
查看次数