在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中的函数?
我有一个类似的课程
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.withParam与b总是等于说239?谢谢.
我想在Python中使用switch语句,但由于python中没有switch语句,我想使用函数列表。但是,当我定义列表时,函数就会被执行。
这是我的代码:
shapes = [drawSquare(), drawRectangle(), myTurtle.circle(10), drawTriangle(), drawStar()]
Run Code Online (Sandbox Code Playgroud)
这是使用海龟的输出:
如何在 python 不运行函数的情况下定义函数列表?
用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中做什么?
本质上,我试图将参数传递给函数,但推迟执行该函数直到以后.我不想拖延一段时间或者我只想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)
但这很尴尬.有一个更好的方法吗?
我想创建一个默认字典,默认值为负无穷大.我尝试过,defaultdict(float("-inf"))但它不起作用.我该怎么做呢?