小编max*_*max的帖子

可以从__new__返回None吗?

通常,__new__如果类的用户知道有时构造函数将评估为None,那么从方法返回None是否合理?

文档并不意味着它是非法的,我没有看到任何直接的问题(因为__init__不会被调用,没有不是有问题的自定义类的实例!).但我很担心

  1. 是否可能有其他不可预见的问题
  2. 构造函数返回None是否是一个很好的编程习惯

具体例子:

class MyNumber(int):
    def __new__(cls, value): # value is a string (usually) parsed from a file
        if value == 'N.A.':
            return None
        return int.__new__(cls, value)
Run Code Online (Sandbox Code Playgroud)

python new-operator

7
推荐指数
1
解决办法
1162
查看次数

python interpreter:中断并继续

在我用Python解释器中断执行后(在Windows中使用CTRL-BREAK),我可以继续执行吗?

如果没有,有没有其他方式交互式暂停执行(所以我可以查看变量值),然后继续?

我不喜欢使用调试器,因为它比正常执行慢得多.

python windows debugging interpreter

7
推荐指数
1
解决办法
1508
查看次数

python:从2D网格中取代而无需替换

我需要一个样本,无需替换,来自所有可能的数字元组range(n).也就是说,我有一个(0,0),(0,1),...,(0,n),(1,0),(1,1),...,(1,n)的集合),...,(n,0),(n,1),(n,n),我试图得到这些元素的k个样本.我希望避免明确构建此集合.

我知道random.sample(range(n), k)如果我需要一系列数字而不是数字元组的样本,那么它是简单而有效的.

当然,我可以显式构建包含所有可能(n * n = n^2)元组的列表,然后调用random.sample.但如果k比小得多,那可能效率不高n^2.

我不确定Python 2和3中的效率是否与效率相同; 我使用Python 3.

python random algorithm python-3.x

7
推荐指数
1
解决办法
1529
查看次数

python 3:random.seed():在哪里调用它?

我需要确保程序中的所有随机性都是完全可复制的.我应该在哪里拨打random.seed()?

我认为它应该在我的main.py模块中,但它会导入其他碰巧使用随机函数的模块.

我可以仔细浏览我的导入,看看哪一个是第一个执行,但是当我改变我的代码结构时,我将不得不记得再次重做这个分析.

有没有简单安全的解决方案?

python random coding-style python-3.x

7
推荐指数
1
解决办法
5365
查看次数

更改"区域设置首选编码"

[使用Python 3.2]

如果我不提供encoding参数open,则使用打开文件locale.getpreferredencoding().因此,例如,在我的Windows机器上,无论何时使用open('abc.txt'),它都将使用解码cp1252.

我想将所有输入文件切换到utf-8.显然,我可以添加encoding = 'utf-8'到我的所有open函数调用.或者,更好的是,encoding = MY_PROJECT_DEFAULT_ENCODING常量在某个地方的全局级别定义.

但我想知道是否有一种干净的方法来避免编辑我的所有open调用,通过更改"默认"编码.是否可以通过更改区域设置来更改?或者通过更改语言环境中的参数?我试图遵循Python手册,但未能理解如何使用它.

谢谢!

python locale character-encoding python-3.x

7
推荐指数
1
解决办法
2837
查看次数

pandas:规范化DataFrame

我在平面文件中输入数据.我想通过将它们分成表来规范化这些数据.我可以巧妙地做到这一点pandas- 也就是说,通过将扁平数据读入DataFrame实例,然后应用一些函数来获得结果DataFrame实例?

例:

数据以CSV文件的形式提供给我,如下所示:

ItemId   ClientId   PriceQuoted  ItemDescription
1        1          10           scroll of Sneak
1        2          12           scroll of Sneak
1        3          13           scroll of Sneak
2        2          2500         scroll of Invisible
2        4          2200         scroll of Invisible
Run Code Online (Sandbox Code Playgroud)

我想创建两个DataFrame:

ItemId   ItemDescription
1        scroll of Sneak
2        scroll of Invisibile
Run Code Online (Sandbox Code Playgroud)

ItemId   ClientId   PriceQuoted
1        1          10
1        2          12
1        3          13
2        2          2500
2        4          2200
Run Code Online (Sandbox Code Playgroud)

如果pandas对于最简单的情况只有一个很好的解决方案(规范化导致2个表具有多对一关系 - 就像上面的例子一样),它可能足以满足我当前的需求.但是,我将来可能需要一个更通用的解决方案.

python database-normalization pandas

7
推荐指数
1
解决办法
1389
查看次数

限制打印输出

我有许多对象需要打印到终端(用于调试).普通print函数几乎是完美的,除了一些对象太大,因此print会产生数百万行输出.我想创建一个执行功能的函数print,除了在预定义数量的字符之后截断输出,用其替换其余字符....

有什么好办法呢?

请注意,性能是一个问题,所以理想情况下我不想保存一个千兆字节大小的字符串,然后从中获取前几个字符; 类似地,pprint有点问题,因为它在字典中对键进行排序(并且需要数百万个键才需要一段时间).

例:

obj = [ [1, 2, 3], list(range(1000000)) ]
my_print(obj, 20)
# should output:
# [[1, 2, 3], [0, 1, 2...
Run Code Online (Sandbox Code Playgroud)

Python 3,如果重要的话.

python python-3.x

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

Celery 任务和子任务有什么区别?

如果我正确理解了教程,Celery子任务支持与task几乎相同的 API ,但还有一个额外的优势,它可以传递给其他函数或进程。

显然,如果是这种情况,Celery 将简单地用子任务替换任务而不是保留两者(例如,装饰器会将函数转换为子任务而不是任务等)。所以我一定是误会了什么。@app.task

有什么可以一个任务做,一个子任务不能?

Celery API 发生了相当大的变化;我的问题特定于 3.1 版(目前是最新的)。

编辑:

我知道文档说子任务旨在从其他任务中调用。我的问题是什么阻止 Celery 完全摆脱任务并在任何地方使用子任务?它们似乎比任务更灵活/更强大:

# tasks.py
from celery import Celery
app = Celery(backend='rpc://')

@app.task
def add(x, y):
    # just print out a log line for testing purposes
    print(x, y)

# client.py
from tasks import add
add_subtask = add.subtask()
# in this context, it seems the following two lines …
Run Code Online (Sandbox Code Playgroud)

python celery

7
推荐指数
1
解决办法
4872
查看次数

检测对象是否可重复迭代

是否obj == iter(obj)意味着obj不能重复迭代,反之亦然?我没有在文档中看到任何这样的措辞,但根据这个评论,标准库通过测试检查对象是否可重复迭代 :if iter(obj) is obj

@agf:Python标准库的某些部分依赖于规范的这一部分; 它们通过测试检测某些东西是否是迭代器/生成器if iter(obj) is obj:,因为真正的迭代器/生成器对象将__iter__定义为标识函数.如果测试为真,则转换为list允许重复迭代,否则,假设对象可重复迭代,并且可以按原样使用它.
- ShadowRanger 6月3日17:23

文档确实声明如果obj是迭代器,则需要iter(obj)返回obj.但我认为这并不足以得出结论,可以使用非重复可迭代对象来识别iter(obj) is obj.

python iterator python-3.x

7
推荐指数
1
解决办法
109
查看次数

具有功能范围和没有拆卸代码的夹具有什么好处?

没有拆卸代码的(默认)功能范围夹具有什么优势?为什么不在测试开始时调用函数?

例如,写作的好处是什么:

@pytest.fixture
def smtp():
    return smtplib.SMTP("smtp.gmail.com")

def test_ehlo(smtp):
    response, msg = smtp.ehlo()
    # ...
Run Code Online (Sandbox Code Playgroud)

而不是简单地:

def create_smtp():
    return smtplib.SMTP("smtp.gmail.com")

def test_ehlo():
    smtp = create_smtp()
    response, msg = smtp.ehlo()
    # ...
Run Code Online (Sandbox Code Playgroud)

我理解为什么在我们需要拆卸代码时固定装置很有用.我也理解为什么具有除函数之外的范围的灯具是有用的:我们可能希望在多个测试中重复使用相同的"外部"对象(以节省创建它所需的时间;或者甚至可能保持其状态 - 尽管看起来似乎相当危险,因为这会在单独的测试之间产生难以看见的耦合).

python pytest

7
推荐指数
1
解决办法
658
查看次数