我正在尝试使用此命令安装Python包
pip install <name of package>
Run Code Online (Sandbox Code Playgroud)
我收到了许可错误,我不知道为什么.我可以运行它sudo
,但有人告诉我这是一个坏主意,我应该使用virtualenv代替.
什么是virtualenv?它对我有什么用?
在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]
?).我的理解是新的Read The Docs主题从toctree生成侧边栏,深度为2.我的文档相对较深,深度为2并不足以使其有用.如何增加此限制,或者最好将其完全删除?
如果这不合理,我怎样才能使用本地ToC而不是全局toctree?
在我的存储库中,我有表单的标签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()
而不是::
语法,但仍然有语法错误.这可能吗?
我正在实现Python C扩展,我希望我的自定义对象支持缓冲协议.缓冲区协议实质上允许容器对象以受控且明确定义的方式将原始指针暴露给它们的内存.消费者传递了许多标志,指示它准备处理什么样的内存,导出器返回描述内存的结构.
我对PyBUF_WRITABLE
国旗特别感兴趣:
PyBUF_WRITABLE
控制只读字段.如果设置,导出器必须提供可写缓冲区或报告失败.否则,导出器可以提供只读或可写缓冲区,但选择必须对所有消费者都是一致的.
我的对象是可观察的,但这自然与将可写指针分配到原始内存相冲突,所以如果我有任何活动的观察者,我只能发出只读缓冲区,如果我有任何活动的可写缓冲区,我无法注册任何观察员.
我想默认发出只读缓冲区,并且只在被问到时才提供可写缓冲区,但我不确定这是否合法.我可以看到这句话有两种可能的解释:
哪种解释是正确的?
我正在编写一个库,我不想需要 pytz,因为库本身不知道或不关心时区(它以 Unix 时间戳的形式读取和写入数据,没有任何与它们相关的时区信息)。我总是使用dt.timezone.utc
(即类似的东西dt.datetime(..., tzinfo=dt.timezone.utc)
)返回新的时间戳作为感知日期时间。
这些时间戳会与您从中获得的 pytz 时间戳进行明智的交互(例如,日期时间减法会产生正确的结果)pytz.localize(...)
,还是我需要使用它pytz.utc
?
我正在使用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) 众所周知,有符号整数溢出会调用未定义的行为,并且对有符号整数的按位操作最多也是不可靠的.因此,我发现POSIX标准中的这一行很奇怪:
type_f name int N _t指定一个有符号整数类型,其宽度为N,没有填充位和二进制补码表示.因此,int8_t表示具有正好8位宽度的有符号整数类型.
这是一个相当模糊的陈述,可能意味着这些事情的任何组合:
intN_t
是从.INTN_MIN
到INTN_MAX
.sizeof(intN_t) == N/8
intN_t
行为与二进制补码表示的预期相同. -1 ^ x == ~x
在每个地方x
插入intN_t
演员之后.intN_t
不能有陷阱表示(并且优化编译器不得利用可能的陷阱).intN_t
变量的溢出是定义的行为(并且从中换INTN_MAX
行INTN_MIN
).根据文件的其余部分,(1)和(2)对我来说似乎都很明显.(1)由INTN_MIN
/ 的定义明确指定MAX
.(2)暗示为"无填充位".
如果有的话,POSIX需要(3),(4)和(5)中的哪一个?
我尝试将 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
我有一个关于.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()是否依赖于输入数据的某种方式?
谢谢!