我想编写一个接受迭代器的函数,并返回一些操作的结果.具体来说,我试图迭代a的值HashMap:
use std::collections::HashMap;
fn find_min<'a>(vals: Iterator<Item=&'a u32>) -> Option<&'a u32> {
vals.min()
}
fn main() {
let mut map = HashMap::new();
map.insert("zero", 0u32);
map.insert("one", 1u32);
println!("Min value {:?}", find_min(map.values()));
}
Run Code Online (Sandbox Code Playgroud)
可惜:
error: the `min` method cannot be invoked on a trait object
--> src/main.rs:4:10
|
4 | vals.min()
| ^^^
error[E0277]: the trait bound `std::iter::Iterator<Item=&'a u32> + 'static: std::marker::Sized` is not satisfied
--> src/main.rs:3:17
|
3 | fn find_min<'a>(vals: Iterator<Item = &'a u32>) -> Option<&'a u32> {
| …Run Code Online (Sandbox Code Playgroud) 如果您今天从头开始编写一个新的应用程序,并希望它可以扩展到明天可以使用的所有内核,您会选择哪种并行编程模型/系统/语言/库?为什么?
我对这些轴的答案特别感兴趣:
我故意对应用程序的性质含糊不清,以期获得对各种应用程序有用的良好通用答案.
我梦想着一个带有显式关键字args的Python方法:
def func(a=None, b=None, c=None):
for arg, val in magic_arg_dict.items(): # Where do I get the magic?
print '%s: %s' % (arg, val)
Run Code Online (Sandbox Code Playgroud)
我想得到一个字典,只有调用者实际传入方法的那些参数,就像**kwargs,但我不希望调用者能够传递任何旧的随机args,不像**kwargs.
>>> func(b=2)
b: 2
>>> func(a=3, c=5)
a: 3
c: 5
Run Code Online (Sandbox Code Playgroud)
所以:有这样的咒语吗?在我的情况下,我碰巧能够将每个参数与其默认值进行比较以找到不同的参数,但是当你有九个参数时,这有点不雅并且变得单调乏味.对于奖励积分,提供一个咒语,即使调用者传递了一个分配了默认值的关键字参数,也可以告诉我:
>>> func(a=None)
a: None
Run Code Online (Sandbox Code Playgroud)
调皮!
编辑:(词法)函数签名必须保持不变.它是公共API的一部分,显式关键字args的主要价值在于它们的文档值.只是为了让事情变得有趣.:)
我有一个在Gunicorn下运行的Flask应用程序,使用同步工作器类型和20个工作进程.该应用程序在启动时读取大量数据,这需要时间并使用内存.更糟糕的是,每个进程加载自己的副本,这会导致它花费更长的时间并占用20倍的内存.数据是静态的,不会改变.我想加载一次,让所有20名员工分享它.
如果我使用该preload_app设置,它只在一个线程中加载,并且最初只需要1X内存,但是一旦请求开始进入,它似乎会变成20X.我需要快速随机访问数据,所以我宁愿不做IPC.
有没有办法在Gunicorn流程之间共享静态数据?
当我spawn在Rust中使用一个线程时,我得到一个JoinHandle,这对于...加入(一个阻塞操作)是好的,而不是其他的.如何检查子线程是否JoinHandle.join()已从父线程退出(即,不会阻止)?如果您知道如何杀死子线程,则可获得奖励积分.
我想你可以通过创建一个频道,向孩子发送一些东西,捕捉错误来做到这一点,但这似乎是不必要的复杂性和开销.
我正在解析这样的文件:
--header-- data1 data2 --header-- data3 data4 data5 --header-- --header-- ...
我想要这样的团体:
[ [header, data1, data2], [header, data3, data4, data5], [header], [header], ... ]
Run Code Online (Sandbox Code Playgroud)
所以我可以像这样迭代它们:
for grp in group(open('file.txt'), lambda line: 'header' in line):
for item in grp:
process(item)
Run Code Online (Sandbox Code Playgroud)
并将detect-a-group逻辑与process-a-group逻辑分开.
但我需要一个可迭代的迭代,因为这些组可以任意大,我不想存储它们.也就是说,每当遇到"sentinel"或"header"项时,我想将一个iterable分成子组,如谓词所示.看起来这将是一项常见的任务,但我找不到有效的Pythonic实现.
这是一个愚蠢的追加到列表的实现:
def group(iterable, isstart=lambda x: x):
"""Group `iterable` into groups starting with items where `isstart(item)` is true.
Start items are included in the group. The first group may or may not have a
start item. An empty `iterable` results …Run Code Online (Sandbox Code Playgroud) 我在Python(2.x)中将一些二进制数据生成为256字节的基本字符串.我需要将这些读入JavaScript,保留字符串中每个字节(char)的序数值.如果你允许我混合语言,我想s用Python 编码一个字符串,以便ord(s[i]) == s.charCodeAt(i)在我把它读回JavaScript之后.
最简洁的方法似乎是将我的Python字符串序列化为JSON.但是,json.dump不喜欢我的字节串,尽管摆弄ensure_ascii和encoding参数.有没有办法将字节串编码为保留序数字符值的Unicode字符串?否则我认为我需要将ASCII范围之上的字符编码为JSON样式的\u1234转义; 但像这样的编解码器似乎并不属于Python codecs.
有没有一种简单的方法将Python字节串序列化为JSON,保留char值,还是需要编写自己的编码器?
我有一个数组,确定元素的排序:
order = [3, 1, 4, 2]
Run Code Online (Sandbox Code Playgroud)
然后我想要排序另一个更大的数组(仅包含那些元素):
a = np.array([4, 2, 1, 1, 4, 3, 1, 3])
Run Code Online (Sandbox Code Playgroud)
这样首先出现的元素order在结果中排在第一位,等等.
在Python中,我会用一个关键函数来做:
sorted(a, key=order.index)
[3, 3, 1, 1, 1, 4, 4, 2]
Run Code Online (Sandbox Code Playgroud)
如何(有效地)使用numpy这样做?numpy数组是否有类似的"关键功能"概念?
如何以编程方式从 Gunicorn 中运行的 WSGI 应用程序中检索 Gunicorn 工作人员的当前数量?如果这有什么不同,我正在使用 Flask。
我正在尝试向MappingPython 3.4 中的子类添加泛型类型注释:
from typing import Mapping, TypeVar, Iterator, Dict
K = TypeVar('K')
V = TypeVar('V')
class M(Mapping[K, V]):
def __init__(self) -> None:
self.d = dict() # type: Dict[K, V]
def __getitem__(self, item: K) -> V:
return self.d[item]
def __len__(self) -> int:
return len(self.d)
def __iter__(self) -> Iterator[K]:
return iter(self.d)
# Also errors, but less
# d = dict() # type: Mapping[K, V]
Run Code Online (Sandbox Code Playgroud)
我做错了什么,为什么不mypy提供更有用的错误信息?
$ python -V; mypy -V
Python 3.4.3+
mypy 0.470
$ mypy map.py …Run Code Online (Sandbox Code Playgroud) 我想获取与数据框中某些条件匹配的值的行和列标签。只是为了让它有趣,我需要它与分层(多)索引一起使用。例如:
df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=pd.MultiIndex.from_product((('a', 'b'), ('x', 'y'))))
a b
x y x y
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
Run Code Online (Sandbox Code Playgroud)
现在假设我想要元素的行和列标签
df % 6 == 0
a b
x y x y
0 True False False False
1 False False True False
2 False False False False
3 True False False False
Run Code Online (Sandbox Code Playgroud)
我想得到
[(0, ('a', 'x')), (1, ('b', 'x')), (3, ('a', 'x'))]
Run Code Online (Sandbox Code Playgroud)
请注意,我想要一个通用的解决方案,它不依赖于单调的索引或我的示例中的特定选择。这个问题已经被问过很多次了,但答案并不概括: …
我有一个来自Excel电子表格的Pandas系列,该电子表格大多是浮动的,但是由于货币位于不同的语言环境中而导致一些字符串无法解析:
s = pd.Series(['1,23', '4.56,78', 1, 2.0, np.nan])
Run Code Online (Sandbox Code Playgroud)
我只想选择那些是字符串的项目,以便可以应用转换:
s[s.apply(type) == str] = s[s.apply(type) == str].str.replace('.', '').str.replace(',', '.')
s.astype(float)
0 1.23
1 456.78
2 1.00
3 2.00
4 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
但是我找不到一种很好的(内置,向量化的)方式来逐行获取或选择dtypes。有没有更好的办法?
我有一个函数,它接受结构的引用迭代器.有时我正在迭代一个向量,它工作正常,但有时我创建一个迭代器,产生新的结构,我很难找到一个.当我在闭包中创建一个值时,我会得到它,当闭包时它会消失.当我不想要它时,Rust总是试图将价值从事物中移出; 为什么不在这里?
struct Thing {
value: u32
}
fn consume<'a, I: IntoIterator<Item=&'a Thing>>(things: I) {
for thing in things {
println!("{}", thing.value);
}
}
fn main () {
let solid = vec![Thing { value: 0 }];
let ephemeral = (1..5).map(|i| &Thing { value: i }); // Boxing Thing does not work either
consume(solid.iter());
consume(ephemeral);
}
Run Code Online (Sandbox Code Playgroud)
但
error: borrowed value does not live long enough
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我要么需要将结构移出闭包和迭代器,要么将它存储在某个地方.但Box结构不起作用并返回结构而不是指针不会键入检查(我找不到相反的.cloned()).这是什么方法?