当文件prog.py与具有相同名称的本地模块(math.py)放在同一目录中时,如何访问标准库模块(比如数学)?
我问这个问题,因为我想创建uncertainties一个可以用作的包
import uncertainties
from uncertainties.math import *
Run Code Online (Sandbox Code Playgroud)
因此,不确定性目录中有一个本地数学模块.问题是我想从不确定性/ __ init__.py访问标准库数学模块.
我不想重命名不确定性.因为这个模块正是用于替换数学模块中的函数(具有处理数值不确定性的等价物).
PS:这个问题与我为执行不确定性计算而编写的模块有关,同时考虑了变量之间的相关性.
我正在寻找定义,seq并遇到了这种奇怪.为什么所有这些函数都有相同/相似的定义?
seq :: a -> b -> b
seq = let x = x in x
inline :: a -> a
inline = let x = x in x
lazy :: a -> a
lazy = let x = x in x
Run Code Online (Sandbox Code Playgroud)
源代码中有更多此定义.这是怎么回事?
我在PYTHONPATH中的一个目录中有一个自定义模块,其名称与标准库模块之一相同,因此当我import module_name,该模块被加载时.如果我想使用原始标准库模块,有没有办法强制Python从标准库而不是从PYTHONPATH目录导入,除了重命名自定义模块并更改每个引用以指向新名称?
我在很大程度上取决于Python的标准库,既为有用的数据结构和操纵(例如,collections和itertools)和公用事业(如optparse,json和logging),跳过样板,只是把工作的事情.通过关于C++标准库的文档,它似乎完全与数据结构有关,而在Python的标准库中几乎没有"包含电池"的方式.
Boost库是我所知道的唯一类似于Python标准库的开源C++库集合,但是它确实有实用程序库,例如正则表达式支持,其中大部分也专用于数据结构.令我感到非常惊讶的是,即使是确保解析和编写CSV文件这样简单的事情,使用Python csv模块变得非常简单,看起来需要在C++中自己滚动(即使你利用Boost的一些解析库).
是否有其他开源库可供C++提供"电池"?如果没有,你作为一个C++程序员做什么:寻找个人实用程序库(如果是这样,如何),或者只是自己动手(这看起来很烦人和浪费)?
的new操作者(或吊舱,的malloc /释放calloc)支持分配的存储器大块,当失败的一个简单而有效的形式.
说我们有这个:
const size_t sz = GetPotentiallyLargeBufferSize(); // 1M - 1000M
T* p = new (nothrow) T[sz];
if(!p) {
return sorry_not_enough_mem_would_you_like_to_try_again;
}
...
Run Code Online (Sandbox Code Playgroud)
是否有任何这样的std :: containers构造,或者我总是要std::vector和朋友一起处理(预期的!!)异常?
是否有可能有一种方法来编写一个自定义分配器来预分配内存然后将这个自定义分配器传递给向量,这样只要向量不要求比预先放入分配器的内存更多,它就不会失败?
事后的想法:bool std::vector::reserve(std::nothrow) {...}除了正常的储备功能外,还需要一个成员函数.但是,既然只有扩展分配器以允许不进行分配,那只会是有意义的,它就不会发生.似乎(nothrow)新的东西毕竟是好事:-)
编辑:至于为什么我甚至问这个:
调试时我想到了这个问题(调试器的第一次机会/第二次机会异常处理):如果我将我的调试器设置为1st-chance catch任何bad_alloc,因为我正在测试低内存条件,那将是烦人的它还捕获了那些已经很好预期并在代码中处理的bad_alloc异常.这不是/不是一个非常大的问题,但我刚刚发现,布道说异常是针对特殊情况的,而且我已经预期会发生代码中每个奇怪的调用都不例外.
如果new (nothrow)它是合法的用途,那么vector-nothrow-reserve也会有.
有一个Go二进制实现一个http服务器:
package main
import (
"net/http"
)
func main() {
http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)
它将以约850 kb左右的内存开始.通过您的网络浏览器发送一些请求.观察它迅速上升到1 MB.如果你等待,你会发现它永远不会消失.现在用Apache Bench(使用下面的脚本)敲击它,看看你的内存使用量不断增加.一段时间后,最终将达到8.2 MB左右的高原.
编辑:它似乎没有停在8.2,而是显着减慢.它目前在9.2并且还在上升.
简而言之,为什么会发生这种情况?我用过这个shell脚本:
while [ true ]
do
ab -n 1000 -c 100 http://127.0.0.1:8080/
sleep 1
end
Run Code Online (Sandbox Code Playgroud)
在尝试深入研究时,我试图调整设置.我试过关闭使用r.Close = true以防止Keep-Alive.似乎没什么用.
我最初在尝试确定我正在编写的程序中是否存在内存泄漏时发现了这一点.它有很多http处理程序和I/O调用.检查后我已经关闭了所有数据库连接,我一直看到它的内存使用率上升.我的计划到了433 MB左右的高原.
这是Goenv的输出:
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/mark/Documents/Programming/Go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
TERM="dumb"
CC="clang"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fno-common"
CXX="clang++"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud) 这个问题的灵感来自于std :: reference_wrapper的问题.让我们说,例如,operator<对于std::vector.它被定义为函数模板
template< class T, class Alloc >
bool operator<( const vector<T,Alloc>& lhs,
const vector<T,Alloc>& rhs );
Run Code Online (Sandbox Code Playgroud)
因此,拒绝将函数参数隐式转换为相应函数参数的类型(主要是因为其模板性质).这大大降低了它的实用性和便利性std::reference_wrapper.例如,您不能使用std::sort的std::vector<std::reference_wrapper<std::vector<int>>>.
另一方面,只有当operator<定义为非模板Koenig运算符时,才能解决所有问题
template <...>
class vector ... {
friend bool operator<(const vector& a, const vector& b) {...}
};
Run Code Online (Sandbox Code Playgroud)
我想知道为什么标准库采用了前一种方法而不是这种方法?
c++ standard-library implicit-conversion c++11 reference-wrapper
我想编写一个库,它是BTreeMap中一些功能的薄包装器.我宁愿不将它与特定的数据结构紧密结合.严格来说,我只需要其功能的一个子集,就像 Java 中的NavigableMap接口一样.我希望找到一个我可以使用的类似特征.我似乎记得在某些时候,标准库中存在类似Map和特征的特征MutableMap,但现在它们似乎不存在了.
是否有一个定义这些的箱子?或者他们最终会被重新添加到std?
在C中向后读取文件的最佳方法是什么?我知道一开始你可能会认为这没用,但大多数日志等都会在文件末尾附加最新的数据.我想从文件向后读取文本,将其缓冲为行 - 即
abc
def
ghi
应该读行ghi,def,abc.
到目前为止,我尝试过:
#include <stdio.h>
#include <stdlib.h>
void read_file(FILE *fileptr)
{
char currentchar = '\0';
int size = 0;
while( currentchar != '\n' )
{
currentchar = fgetc(fileptr); printf("%c\n", currentchar);
fseek(fileptr, -2, SEEK_CUR);
if( currentchar == '\n') { fseek(fileptr, -2, SEEK_CUR); break; }
else size++;
}
char buffer[size]; fread(buffer, 1, size, fileptr);
printf("Length: %d chars\n", size);
printf("Buffer: %s\n", buffer);
}
int main(int argc, char *argv[])
{
if( argc < …Run Code Online (Sandbox Code Playgroud) standard-library ×10
c++ ×3
python ×3
import ×2
module ×2
c ×1
c++11 ×1
collections ×1
common-lisp ×1
ghc ×1
go ×1
haskell ×1
http ×1
lisp ×1
memory-leaks ×1
pythonpath ×1
rust ×1
sbcl ×1
stl ×1
stream ×1
text ×1
traits ×1