小编Sha*_*ger的帖子

std :: fstream文件超过2GB

如果我有一个带有32位std :: streampos的std :: fstream的实现,我应该使用什么策略?如果我想移动位置,我可以分几个步骤(10gb - 10次+ 1gb).我怎样才能获得职位?或者我应该在fstream之外的某个变量中保持当前位置?

PS我无法改变STL的实现.

c++ fstream

5
推荐指数
1
解决办法
773
查看次数

'not =='和'!=之间存在逻辑差异(不是)

Python 3.x之间是否存在重大差异:

for each_line in data_file:
    if each_line.find(":") != -1:
        #placeholder for code
        #more placeholder
Run Code Online (Sandbox Code Playgroud)

for each_line in data:
    if not each_line.find(":") == -1:
        #placeholder for code
        #more placeholder
Run Code Online (Sandbox Code Playgroud)

我的问题不是特别针对上述用法,而是更一般或必要 - 这种语法差异是否以不同的方式工作,即使结果是相同的?有逻辑差异吗?是否存在一个更合适的任务,或者仅仅是风格上的差异?如果这只是风格,Python程序员认为哪一个更干净?

此外,为上述要求相反的实例的区别是什么之间is==?前者和后者一样,是对象身份和对象价值平等的区别吗?我的意思是,在上面的例子中,是is使用not隐式?

python syntax boolean-expression

5
推荐指数
1
解决办法
521
查看次数

如何在Python 2.7中一次解码一行unicode?

从Python 2.7加载unicode文本的正确方法如下:

content = open('filename').read().decode('encoding'):
for line in content.splitlines():
    process(line)
Run Code Online (Sandbox Code Playgroud)

(更新:不,不是.请参阅答案.)

但是,如果文件非常大,我可能希望一次读取,解码和处理一行,这样整个文件永远不会一次加载到内存中.就像是:

for line in open('filename'):
    process(line.decode('encoding'))        
Run Code Online (Sandbox Code Playgroud)

for循环的在开放的文件句柄迭代是一个生成器,一次读取一行.

但这不起作用,因为如果文件是utf32编码的,那么文件中的字节(十六进制)看起来像:

hello\n = 68000000(h) 65000000(e) 6c000000(l) 6c000000(l) 6f000000(o) 0a000000(\n)
Run Code Online (Sandbox Code Playgroud)

并且由for循环完成的行分割在字符的0a字节上\n,导致(以十六进制):

lines[0] = 0x 68000000 65000000 6c000000 6c000000 6f000000 0a
lines[1] = 0x 000000
Run Code Online (Sandbox Code Playgroud)

因此,\n字符的一部分留在第1行的末尾,其余三个字节在第2行结束(后面是第2行中的任何文本.)decode可以理解地调用这些行中的任何一行都会导致a UnicodeDecodeError.

UnicodeDecodeError: 'utf32' codec can't decode byte 0x0a in position 24: truncated data
Run Code Online (Sandbox Code Playgroud)

因此,显然,在字节上拆分unicode字节流0a并不是将其拆分为行的正确方法.相反,我应该分裂出现完整的四字节换行符(0x0a000000).但是,我认为检测这些字符的正确方法是将字节流解码为unicode字符串并查找\n字符 - 这个完整流的解码正是我试图避免的操作.

这不是一个不常见的要求.处理它的正确方法是什么?

python unicode file-io generator python-2.7

5
推荐指数
1
解决办法
1627
查看次数

Python:为什么我的列表在我实际上没有改变时会改变?

有问题的新手,所以请温柔:

list = [1, 2, 3, 4, 5]
list2 = list

def fxn(list,list2):
    for number in list:
        print(number)
        print(list)
        list2.remove(number)
        print("after remove list is  ", list, " and list 2 is  ", list2)
    return list, list2

list, list2 = fxn(list, list2)
print("after fxn list is  ", list)
print("after fxn list2 is  ", list2)
Run Code Online (Sandbox Code Playgroud)

这导致:

1
[1, 2, 3, 4, 5]
after remove list is   [2, 3, 4, 5]  and list 2 is   [2, 3, 4, 5]
3
[2, 3, 4, …
Run Code Online (Sandbox Code Playgroud)

python alias list

5
推荐指数
2
解决办法
1426
查看次数

速度静态方法与类方法

类方法和静态方法之间是否存在速度差异?我知道不同的用例,但有时我可以完全摆脱类方法,并想知道速度差异

python optimization static-methods class-method

5
推荐指数
1
解决办法
2675
查看次数

Cython 之间的差异,使用 Python.h 扩展 C/C++ 等

现在我有一个图像处理算法,在 Python 中大约有 100 行左右。使用numpy,PIL和大约需要 500 毫秒scipy。我希望让它更快,并且由于实际算法到目前为止似乎已经非常优化,我想知道是否使用不同的方法,例如Cython会改善时间。我相信我可以做几件不同的事情:

  1. 使用 Cython将 C 库的相关部分公开给 Python。
  2. 使用 Ctypes只用 C 编写所有内容,但仍然使用纯 Python(根本不倾向于这个)
  3. 在 C/C++ 中创建一个扩展模块,然后导入它并调用函数。我不确定我是否能够使用numpy这种方式。
  4. 创建一个 DLL并让 Python 加载它。这不会使用numpy或那些模块,但仍然非常有效。

我只是在这里寻找速度,而不是担心实施的难度。在这种情况下,是否有更好的选择,它们都是一样的,还是值得做?

python ctypes cython python-extensions

5
推荐指数
1
解决办法
753
查看次数

python 内置函数 iter() 如何将 python 列表转换为迭代器?

我已经阅读了我的材料,它告诉我 python 迭代器必须同时具有__iter____next__方法,但可迭代只需要__iter__. 我检查了一个列表,发现它没有__next__方法。当iter()在其上使用时,它将成为一个迭代器。这意味着iter()将向__next__列表添加一个方法以将其转换为迭代器?如果是,这是如何发生的?

python iterator iterable

5
推荐指数
1
解决办法
2782
查看次数

Python3,从自定义异常中调用super的__init__

我已经在 python 3 中创建了自定义异常,并且所有代码都工作得很好。但有一件事我无法理解,为什么我需要将消息发送到 Exception 类的__init__()以及当我尝试打印异常时它如何将自定义异常转换为该字符串消息因为 Exception 甚至 BaseException 中的代码没有做太多事情。

不太明白为什么从自定义异常中调用super().__init__()

python exception super python-3.x

5
推荐指数
2
解决办法
1730
查看次数

python中的多个集合操作

我是python的新手,现在开始学习它。我在网上练习,遇到以下问题。我试图解决它,但是,尽管我得到了在线验证器的预期结果,但还是得到了预期的结果。请建议我要去哪里错了。

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

在一所学校中,共有20名学生,编号从1到20。您将获得三个名为“ C”,“ F”和“ H”的列表,分别代表打板球,足球和曲棍球的学生。根据此信息,找出并打印以下内容:

  • 参加所有三种运动的学生
  • 既打板球又踢足球但不打曲棍球的学生
  • 刚参加两项运动的学生
  • 不参加这三种运动中的任何一项的学生

格式:

输入:

3个列表,分别包含代表板球,足球和曲棍球的学生的数字(范围从1到20)。

输出:

根据问题中提供的限制,有4个不同的列表包含学生。

示例:输入:

[[2, 5, 9, 12, 13, 15, 16, 17, 18, 19]
[2, 4, 5, 6, 7, 9, 13, 16]
[1, 2, 5, 9, 10, 11, 12, 13, 15]] 
Run Code Online (Sandbox Code Playgroud)

预期产量:

[2, 5, 9, 13]
[16]
[12, 15, 16]
[3, 8, 14, 20]
Run Code Online (Sandbox Code Playgroud)

下面是我的代码

C = set(input_list[0])
F = set(input_list[1])
H = set(input_list[2])
A= set(range(1, 21))

print(sorted(list(C & F & H)))
print(sorted(list((C & F) - H))) …
Run Code Online (Sandbox Code Playgroud)

python set python-3.x

5
推荐指数
1
解决办法
1585
查看次数

如何在python的用户定义函数中实现“仅位置参数”?

如何为用户在 python 中定义的函数实现“仅位置参数”?

def fun(a, b, /):
    print(a**b)

fun(5,2)        # 25
fun(a=5, b=2)   # should show error
Run Code Online (Sandbox Code Playgroud)

python parameters function python-3.x pep570

5
推荐指数
2
解决办法
852
查看次数