是否可以将docstring用于普通变量?例如,我有一个名为的模块t
def f():
"""f"""
l = lambda x: x
"""l"""
Run Code Online (Sandbox Code Playgroud)
而我呢
>>> import t
>>> t.f.__doc__
'f'
Run Code Online (Sandbox Code Playgroud)
但
>>> t.l.__doc__
>>>
Run Code Online (Sandbox Code Playgroud)
示例类似于PEP 258(搜索"this is g").
这与我在SWIG邮件列表上的问题重复.
我试图在我的SWIG绑定中使用stl容器.除了在Perl中进行stl映射处理外,一切都运行良好.在C++方面,我有
std::map<std::string, std::string> TryMap(const std::map<std::string, std::string> &map) {
std::map<std::string, std::string> modified(map);
modified["7"] = "!";
return modified;
}
Run Code Online (Sandbox Code Playgroud)
SWIG配置看起来像这样
%module stl
%include "std_string.i"
%include "std_map.i"
%template(StringStringMap) std::map<std::string, std::string>;
%{
#include "stl.h"
%}
%include "stl.h"
Run Code Online (Sandbox Code Playgroud)
在我的Python脚本中,我可以这样调用TryMap
print dict(stl.TryMap({'a': '4'}))
Run Code Online (Sandbox Code Playgroud)
并获得美丽的输出
{'a': '4', '7': '!'}
Run Code Online (Sandbox Code Playgroud)
但在Perl我打电话
print Dumper stl::TryMap({'a' => '4'});
Run Code Online (Sandbox Code Playgroud)
并得到一个错误
TypeError in method 'TryMap', argument 1 of type 'std::map< std::string,std::string > const &' at perl.pl line 7.
Run Code Online (Sandbox Code Playgroud)
我实际上可以做类似的事情
my $map = stl::TryMap(stl::StringStringMap->new());
print $map->get('7');
Run Code Online (Sandbox Code Playgroud)
并得到'!',但这不是一个选项,因为有很多遗留代码使用"TryMap",期望普通的Perl哈希作为其输出.
我相信有一种方法可以解决这个问题,因为如果我使用stl向量和字符串而不是map,SWIG可以很好地解决Python中的这个特殊问题,即使在Perl中也是如此.
有没有办法在SWIG中使用Perl处理stl映射?我正在使用最新的SWIG 2.0.7 …
我有一个Python的扩展模块,它使用SWIG作为包装器,我尝试用Pickle序列化它,我失败了=)
__reduce_ex__在我的C++代码中实现方法.有没有人有例子__reduce_ex__?有类似的Stackoverflow问题,但它省略了manager_constructor规范和实现.如果我跑
"Year 2010" =~ /([0-4]*)/;
print $1;
Run Code Online (Sandbox Code Playgroud)
我得到空字符串.但
"Year 2010" =~ /([0-4]+)/;
print $1;
Run Code Online (Sandbox Code Playgroud)
输出"2010".为什么?
我想在我的无限二进制函数中使用$a和$b变量,就像它完成sort {$a <=> $b} (1, 2, 3)但我无法弄清楚为什么代码
#!/usr/bin/env perl
use strict;
use warnings;
Foo::Bar(sub { $a + $b });
package Foo;
sub Bar {
my ($function) = @_;
for my $i (1, 2, 3) {
local ($a, $b) = ($i, $i);
print $function->() . "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
不起作用.而
#!/usr/bin/env perl
use strict;
use warnings;
Foo::Bar(sub { $_ });
package Foo;
sub Bar {
my ($function) = @_;
for my $i (1, 2, 3) { …Run Code Online (Sandbox Code Playgroud) 我有一个每秒可以生成20 000条记录的过程(记录大小~30Kb).我试图尽可能快地将它们插入到MongoDB的单个实例中.但我每秒得到约1500次插入,不稳定的速率范围从1000次插入到每秒2000次插入.问题是原因是什么以及如何解决?:)这是mongostat2.5小时的数据:

建立
我在云中运行实例,包括8核,16Gb RAM,150Gb硬盘,Ubuntu 18.04,MongoDB 4.0 官方 docker 镜像.在同一个实例上运行2个工作程序,每个工作程序每秒生成10 000条记录,并将insert_many它们分成每个块的MongoDB 100条记录.每个记录2个集合之间划分cases和docs,docs使用zlib压缩.cases记录平均大小约为1Kb.随机记录为例:
{'info': {'judge': '?????? ????? ??????????', 'decision': '???????? ? ???????????? ?? ????? ????????????', 'entry_date': datetime.datetime(2017, 1, 1, 0, 0), 'number': '12-48/2017 (12-413/2016;)', 'decision_date': datetime.datetime(2017, 2, 9, 0, 0)}, 'acts': [{'doc': ObjectId('5c3c76543d495a000c97243b'), 'type': '???????'}], '_id': ObjectId('5c3c76543d495a000c97243a'), 'sides': [{'name': '???????? ?. ?.', 'articles': '????: ??. 5.27.1 ?.4'}], 'history': [{'timestamp': datetime.datetime(2017, 1, 1, 15, 6), 'type': '????????? ???????? ? …Run Code Online (Sandbox Code Playgroud) mapPerl中的函数是用Perl编写的吗?我只是无法弄清楚如何实现它.这是我的尝试:
use Data::Dumper;
sub Map {
my ($function, $sequence) = @_;
my @result;
foreach my $item (@$sequence) {
my $_ = $item;
push @result, $function->($item);
}
return @result
}
my @sample = qw(1 2 3 4 5);
print Dumper Map(sub { $_ * $_ }, \@sample);
print Dumper map({ $_ * $_ } @sample);
Run Code Online (Sandbox Code Playgroud)
$_in $function是未定义的,但是如何map克服这个?
Python有很好的模块用于处理名为itertools的迭代器吗?Perl中是否有任何模拟?
我知道Object- Iterate但它只有imap和igrep.
我的测试中有一个问题:
计算文件中行数和单词数的程序有什么问题?
open F, $ARGV[0] || die $!;
my @lines = <F>;
my @words = map {split /\s/} @lines;
printf "%8d %8d\n", scalar(@lines), scalar(@words);
close(F);
Run Code Online (Sandbox Code Playgroud)
我的推测是:
如果文件中有标点符号,程序将对它们进行计数,例如,在
Run Code Online (Sandbox Code Playgroud)abc cba , , ,dce
将是五个字,但另一方面wc输出相同的结果,因此它可能被认为是正确的行为.
F是一个大文件,最好迭代线而不是将其转储到lines数组中.你有什么不那么琐碎的想法吗?