小编Kev*_*vin的帖子

什么是virtualenv,我为什么要使用它?

我正在尝试使用此命令安装Python包

pip install <name of package>
Run Code Online (Sandbox Code Playgroud)

我收到了许可错误,我不知道为什么.我可以运行它sudo,但有人告诉我这是一个坏主意,我应该使用virtualenv代替.

什么是virtualenv?它对我有什么用?

python pip virtualenv

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

如何干净地写__getitem__?

在Python中,当实现序列类型时,我经常(相对而言)发现自己编写这样的代码:

class FooSequence(collections.abc.Sequence):
    # Snip other methods

    def __getitem__(self, key):
        if isinstance(key, int):
            # Get a single item
        elif isinstance(key, slice):
            # Get a whole slice
        else:
            raise TypeError('Index must be int, not {}'.format(type(key).__name__))
Run Code Online (Sandbox Code Playgroud)

代码显式检查其参数的类型isinstance().这被认为是 Python社区中的反模式.我该如何避免呢?

  • 我不能使用functools.singledispatch,因为这是非常故意与方法不兼容(它将尝试发送self,这完全没用,因为我们已经self通过OOP多态性调度).它可以使用@staticmethod,但如果我需要从中获取东西self呢?
  • 投掷int()然后捕捉TypeError,检查切片,并可能重新加注仍然是丑陋的,虽然可能稍微不那么.
  • 将整数转换为单元素切片并使用相同的代码处理这两种情况可能更清晰,但这有其自身的问题(返回0[0]?).

python python-3.x

19
推荐指数
1
解决办法
5370
查看次数

在"阅读文档"侧栏中显示整个toctree

我的理解是新的Read The Docs主题从toctree生成侧边栏,深度为2.我的文档相对较深,深度为2并不足以使其有用.如何增加此限制,或者最好将其完全删除?

如果这不合理,我怎样才能使用本地ToC而不是全局toctree?

python python-sphinx read-the-docs

12
推荐指数
1
解决办法
5317
查看次数

如何为名称遵循模式的标记创建revset别名?

在我的存储库中,我有表单的标签version-1.2.3.我想制作一个new()像这样调用的revset别名:

hg log -r 'new(1.2.3, 1.2.4)'
Run Code Online (Sandbox Code Playgroud)

......并扩展到:

hg log -r '::version-1.2.4 - ::version-1.2.3'  # What's new in 1.2.4?
Run Code Online (Sandbox Code Playgroud)

当我试图这样做时:

[revsetalias]
new($1, $2) = ::version-$2 - ::version-$1
Run Code Online (Sandbox Code Playgroud)

... Mercurial将其解释为从修订中减去修订$2(例如1.2.3)version,这不是我的意图.

我也试过这个,使用##连接运算符:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1
Run Code Online (Sandbox Code Playgroud)

但后来hg log -r 'new(1.2.3, 1.2.4)'给了我这个错误:

hg: parse error at 13: syntax error
Run Code Online (Sandbox Code Playgroud)

我也尝试使用ancestors()而不是::语法,但仍然有语法错误.这可能吗?

mercurial mercurial-revsets

8
推荐指数
1
解决办法
466
查看次数

"选择必须与所有消费者保持一致"是什么意思?

我正在实现Python C扩展,我希望我的自定义对象支持缓冲协议.缓冲区协议实质上允许容器对象以受控且明确定义的方式将原始指针暴露给它们的内存.消费者传递了许多标志,指示它准备处理什么样的内存,导出器返回描述内存的结构.

我对PyBUF_WRITABLE国旗特别感兴趣:

PyBUF_WRITABLE

控制只读字段.如果设置,导出器必须提供可写缓冲区或报告失败.否则,导出器可以提供只读或可写缓冲区,但选择必须对所有消费者都是一致的.

我的对象是可观察的,但这自然与将可写指针分配到原始内存相冲突,所以如果我有任何活动的观察者,我只能发出只读缓冲区,如果我有任何活动的可写缓冲区,我无法注册任何观察员.

我想默认发出只读缓冲区,并且只在被问到时才提供可写缓冲区,但我不确定这是否合法.我可以看到这句话有两种可能的解释:

  1. 所有没有通过旗帜的消费者应该收到同样的东西.为这些消费者提供只读缓冲区并给予传递标志可写缓冲区的消费者是合法的.
  2. 无论是否通过旗帜,所有消费者都应该收到相同的东西.如果可以返回可写缓冲区,则必须在每种情况下返回可写缓冲区.如果无法提供可写缓冲区,则标志的唯一目的是抛出错误.

哪种解释是正确的?

c python python-3.x

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

pytz.utc 和 dt.timezone.utc 有什么区别?

我正在编写一个库,我不想需要 pytz,因为库本身不知道或不关心时区(它以 Unix 时间戳的形式读取和写入数据,没有任何与它们相关的时区信息)。我总是使用dt.timezone.utc(即类似的东西dt.datetime(..., tzinfo=dt.timezone.utc))返回新的时间戳作为感知日期时间。

这些时间戳会与您从中获得的 pytz 时间戳进行明智的交互(例如,日期时间减法会产生正确的结果)pytz.localize(...),还是我需要使用它pytz.utc

python pytz python-3.x python-datetime

6
推荐指数
1
解决办法
1197
查看次数

ImportError:无法导入名称“ create_connection”

我正在使用Python 3.4和websocket-client 0.44。我正在尝试Python webscoket脚本 使用套接字从Bitfinex提取流数据。这是我写的脚本:

import json

from websocket import create_connection

ws = create_connection("wss://api.bitfinex.com/ws/2")
#ws.connect("wss://api2.bitfinex.com:3000/ws")
ws.send(json.dumps({
    "event": "subscribe",
    "channel": "book",
    "symbol": "tBTCUSD",
}))


while True:
    result = ws.recv()
    result = json.loads(result)
    xxx = result
    print(xxx)
    #print(result[1])

ws.close()
Run Code Online (Sandbox Code Playgroud)

而我得到的是,错误:

Traceback (most recent call last):
  File "D:/bitstamp/socket.py", line 3, in <module>
    from websocket import create_connection
  File "C:\Python34\lib\site-packages\websocket_client-0.44.0-py3.4.egg\websocket\__init__.py", line 23, in <module>
    from ._app import WebSocketApp
  File "C:\Python34\lib\site-packages\websocket_client-0.44.0-py3.4.egg\websocket\_app.py", line 35, in <module>
    from ._core import WebSocket, getdefaulttimeout
  File "C:\Python34\lib\site-packages\websocket_client-0.44.0-py3.4.egg\websocket\_core.py", line 24, …
Run Code Online (Sandbox Code Playgroud)

python-3.x

6
推荐指数
2
解决办法
4004
查看次数

POSIX在stdint.h中的"二进制补码表示"是什么意思?

众所周知,有符号整数溢出会调用未定义的行为,并且对有符号整数的按位操作最多也是不可靠的.因此,我发现POSIX标准这一行很奇怪:

type_f name int N _t指定一个有符号整数类型,其宽度为N,没有填充位和二进制补码表示.因此,int8_t表示具有正好8位宽度的有符号整数类型.

这是一个相当模糊的陈述,可能意味着这些事情的任何组合:

  1. 范围intN_t是从.INTN_MININTN_MAX.
  2. sizeof(intN_t) == N/8
  3. 按位运算的intN_t行为与二进制补码表示的预期相同. -1 ^ x == ~x在每个地方x插入intN_t演员之后.
  4. intN_t 不能有陷阱表示(并且优化编译器不得利用可能的陷阱).
  5. intN_t变量的溢出是定义的行为(并且从中换INTN_MAXINTN_MIN).

根据文件的其余部分,(1)和(2)对我来说似乎都很明显.(1)由INTN_MIN/ 的定义明确指定MAX.(2)暗示为"无填充位".

如果有的话,POSIX需要(3),(4)和(5)中的哪一个?

c posix language-lawyer

4
推荐指数
1
解决办法
240
查看次数

Python:别名为 python3

我尝试将 python 2.7 升级到 python 3 并修改了文件,~/.bash_aliases但是当我在基本终端中键入 python 时出现此错误

zsh: command not found: python3
Run Code Online (Sandbox Code Playgroud)

当我输入 which python

python: aliased to python3
Run Code Online (Sandbox Code Playgroud)

实际上我更喜欢回到 python 2.7 或者如果有人知道我该如何解决这个问题:c

python linux zsh zshrc

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

Python:.pop()在无序集上

我有一个关于.pop()方法的问题.在文档中,它说明了on sets:

从集合中删除并返回任意元素.

那么"武断"究竟是什么意思呢?比如,例如:如果我想从随机确定位置的用户列表中构建队列,我可以将所有用户输入到集合中,然后使用.pop()构建随机分配的队列吗?

所以代码看起来像

queue_set = {'bob','rachel','sara','david'}
queue = dequeue([])
while queue_set:
        queue.append(queue_set.pop())
Run Code Online (Sandbox Code Playgroud)

这是将成员随机分配到索引的合理方法吗?或者.pop()是否依赖于输入数据的某种方式?

谢谢!

python set

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