小编use*_*ica的帖子

为什么我不能为csv.Reader重复'for'循环?

我是Python的初学者.我现在正在尝试弄清楚为什么第二个'for'循环在以下脚本中不起作用.我的意思是我只能得到第一个'for'循环的结果,但没有得到第二个循环的结果.我在下面复制并粘贴了我的脚本和数据csv.

如果你告诉我它为什么会这样,以及如何让第二个'for'循环工作也会很有帮助.

我的脚本:

import csv

file = "data.csv"

fh = open(file, 'rb')
read = csv.DictReader(fh)

for e in read:
    print(e['a'])

for e in read:
    print(e['b'])
Run Code Online (Sandbox Code Playgroud)

"data.csv":

a,b,c
tree,bough,trunk
animal,leg,trunk
fish,fin,body
Run Code Online (Sandbox Code Playgroud)

python csv

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

为什么Python在打印回溯时会从当前目录中读取?

$ echo "Your code is bad and you should feel bad" > "<stdin>"
$ python
Python 3.6.0 (default, Dec 28 2016, 19:53:26) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + '2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    Your code is bad and you should feel bad
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)

为什么Python会将字符串"<stdin>"与匹配该文件名的文件混淆?如果遇到未处理的异常,我不希望Python试图从磁盘中读取任何文件.

您也可以使用"<string>"文件名获取它:

$ echo …
Run Code Online (Sandbox Code Playgroud)

python stdin

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

使用继承编写__repr__函数的正确方法

我正在尝试使用OOP python,我不确定__repr__函数继承.由于父类函数看起来像这样:

def __repr__(self):
    '''Returns representation of the object'''
    return("{}({!r})".format("Class name", self._param))
Run Code Online (Sandbox Code Playgroud)

我想知道是否更好地使用通用方法(也适用于子类),如下所示:

def __repr__(self):
    '''Returns representation of the object'''
    return("{}({!r})".format(self.__class__.__name__, self._param))
Run Code Online (Sandbox Code Playgroud)

或者如果在每个班级中覆盖该功能是一个好习惯.

另外,请忽略编码部分,因为我将它留在后面.

python oop inheritance repr

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

为什么 Prometheus 消耗这么多内存?

我正在使用 Prometheus 2.9.2 来监控大型节点环境。作为在我们的环境中测试 Prometheus 最大规模的一部分,我在我们的测试环境上模拟了大量指标。

我的管理服务器有 16GB 内存和 100GB 磁盘空间。

在规模测试期间,我注意到 Prometheus 进程消耗越来越多的内存,直到进程崩溃。

我注意到 WAL 目录很快就被大量数据文件填满,而 Prometheus 的内存使用量却在上升。

管理服务器每15秒抓取一次节点,存储参数全部设置为默认值。

我想知道为什么会发生这种情况,以及如何/是否可以防止进程崩溃。

谢谢你!

memory prometheus

14
推荐指数
2
解决办法
4万
查看次数

为什么**kwargs映射与不同排序的OrderedDict相等?

根据PEP 468:

从版本3.6开始,Python将保留传递给函数的关键字参数的顺序.为了实现这一点,收集的kwargs现在将是有序映射.请注意,这并不一定意味着OrderedDict.

在这种情况下,为什么这个有序映射无法与Python的规范有序映射类型进行相等比较,collections.OrderedDict:

>>> from collections import OrderedDict
>>> data = OrderedDict(zip('xy', 'xy'))
>>> def foo(**kwargs):
...     return kwargs == data
... 
>>> foo(x='x', y='y')  # expected result: True
True
>>> foo(y='y', x='x')  # expected result: False
True
Run Code Online (Sandbox Code Playgroud)

虽然现在保留了迭代顺序,但kwargs似乎表现得像比较的普通字典.从3.5开始,Python有一个C实现的有序字典,因此它可以直接使用(或者,如果性能仍然是一个问题,使用3.6紧凑字典的瘦子类更快的实现).

为什么函数接收的有序映射不会在相等比较中遵循排序?

python function ordereddictionary kwargs python-3.6

12
推荐指数
3
解决办法
992
查看次数

与两个谓词的Numpy链比较

在Numpy中,我可以像这样生成一个布尔数组:

>>> arr = np.array([1, 2, 1, 2, 3, 6, 9])
>>> arr > 2
array([False, False, False, False,  True,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

有可能将比较链接在一起吗?例如:

>>> 6 > arr > 2
array([False, False, False, False,  True,  False,  False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

python arrays numpy boolean-expression scipy

11
推荐指数
2
解决办法
1460
查看次数

将double*转换为double(*)[N]

void compute(int rows, int columns, double *data) {
    double (*data2D)[columns] = (double (*)[columns]) data;
    // do something with data2D
}

int main(void) {
    double data[25] = {0};
    compute(5, 5, data);
}
Run Code Online (Sandbox Code Playgroud)

有时,将参数视为多维数组非常方便,但需要将其声明为指向平面数组的指针.将指针视为多维数组是否安全,compute如上例所示?我很确定内存布局可以保证正常工作,但我不知道标准是否允许指针以这种方式进行转换.

这会破坏任何严格的别名规则吗?指针算法的规则怎么样; 由于数据"实际上不是"a double[5][5],我们是否允许执行指针算法和索引data2D,或者是否违反了指针算法不会偏离适当数组范围的要求?是data2D即使保证指向正确的地方,还是它只是保证我们可以将它转换回并恢复data?标准报价将非常感激.

c arrays casting

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

使用不带前缀"std"的std :: sort(),也没有"using namespace std;" 编译成功

正如sort()其定义namespace std必须始终用作std::sort.但即使没有,下面的代码也能正确编译std.

#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> nums = {4,3,1,7,2,0};
    sort(nums.begin(),nums.end());
}
Run Code Online (Sandbox Code Playgroud)

ideone.com

但是这段代码没有.

#include <array>
#include <algorithm>

int main()
{

    std::array<int,5> nums = {4,1,8,9,6};
    sort(nums.begin(),nums.end());
}
Run Code Online (Sandbox Code Playgroud)

使用gcc 4.8.4with -std=c++11flag启用.

从这两个代码片段中可以清楚地知道std::vector这与此有关.但我无法弄明白.

c++ stdvector

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

将char指针传递给接受char数组引用的函数

我正试图称这种方法

#define SIZE 16
void DoSomething(char(&value)[SIZE])
{
}
Run Code Online (Sandbox Code Playgroud)

从这个方法:

void BeforeDoingSomething(char* value, int len)
{
    if (len == SIZE)
    {
        DoSomething(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

试图这样做会给我这个错误:

不能使用"char*"类型的值初始化类型为"char(&)[16]"(非const限定)的引用

有关如何让编译器接受value函数传递的任何提示BeforeDoingSomething

c++

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

反向排序流

我想反向排序下面的流,但得到编译时错误"The method sorted() in the type IntStream is not applicable for the arguments ((<no type> o1, <no type> o2) -> {})".谁能纠正这个

IntStream.range(1, 100)
         .filter(x -> x%2 != 0)
         .sorted((o1,o2) -> -o1.compareTo(o2))
         .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java sorting java-8 java-stream

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