我试图创建一个用于记录的自定义属性(调用者的类名,模块名称等),并遇到一个奇怪的异常,告诉我在进程中创建的LogRecord实例没有必要的属性.经过一些测试,我最终得到了这个:
import logging
class MyLogger(logging.getLoggerClass()):
value = None
logging.setLoggerClass(MyLogger)
loggers = [
logging.getLogger(),
logging.getLogger(""),
logging.getLogger("Name")
]
for logger in loggers:
print(isinstance(logger, MyLogger), hasattr(logger, "value"))
Run Code Online (Sandbox Code Playgroud)
这段看似正确的代码产生:
False False
False False
True True
Run Code Online (Sandbox Code Playgroud)
错误或功能?
我正在写一个Cython 0.23程序,我无法弄清楚如何使用cdef class
我从类型声明中的不同模块导入的程序.这是一个重现问题的片段.
test.py
:
import pyximport
pyximport.install()
from mymodule import *
obj = MyClass(42)
print(obj.field)
print(identity(obj).field)
Run Code Online (Sandbox Code Playgroud)
这按预期工作并打印42
两次:
mymodule.pyx
:
cdef class MyClass:
cdef readonly int field
def __init__(self, field):
self.field = field
cpdef MyClass identity(MyClass obj):
return obj
Run Code Online (Sandbox Code Playgroud)
这会因编译器错误而失败:
mymodule.pyx
:
from utils import MyClass
cpdef MyClass identity(MyClass obj):
return obj
Run Code Online (Sandbox Code Playgroud)
utils.pyx
:
cdef class MyClass:
cdef readonly int field
def __init__(self, field):
self.field = field
Run Code Online (Sandbox Code Playgroud)
错误:
Error compiling Cython file:
------------------------------------------------------------
...
from utils …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为内部监控实现一个非常简单的网页。它应该显示一些数据,这些数据通过 socketio 实时更新。服务器在后台运行一个线程,该线程获取数据并将其中继到客户端。
我想用登录表单保护页面。为了简单起见,我选择了 HTTP Basic Auth,主要是因为我不想设计登录表单。
我做了以下工作:
@login_manager.request_handler
,我检查request.authorization
. 如果它有效,我将返回一个经过身份验证的User
对象。@login_manager.unauthorized_handler
,我触发了身份验证对话框。'/'
页面受保护@login_required
。socketio.on('connect')
事件并在current_user
那里检查。如果未通过身份验证,我将断开连接。 这是整个工作示例:
## Standard imports, disregard them
import functools
import gevent
## Otherwise I'm getting KeyError on shutdown
import gevent.monkey
gevent.monkey.patch_all()
from flask import Flask, request, Response
from flask.ext.login import LoginManager, UserMixin, login_required, current_user
from flask.ext.socketio import SocketIO
## To see the logging.debug call in socketio.on('connect')
import logging
logging.getLogger().setLevel(logging.DEBUG)
## …
Run Code Online (Sandbox Code Playgroud) 我想用二元运算(Tensor
)执行计算,该运算带有两个非交换参数,将它们转换成类似对的东西,然后当我乘以这些对时做有趣的事情.
# a, b, c, d are non-commutative
Tensor(a, b) * Tensor(c, d) == Tensor(a*c, d*b) # yes, in this order
Run Code Online (Sandbox Code Playgroud)
此外,我希望所有整数常量取模2.
-Tensor(a, b) == Tensor(a, b)
2*Tensor(a, b) == 0
Tensor(2*a, b) == 0
Run Code Online (Sandbox Code Playgroud)
我这样做了:
import sympy as sp
from sympy.core.expr import Expr
class Tensor(Expr):
__slots__ = ['is_commutative']
def __new__(cls, l, r):
l = sp.sympify(l)
r = sp.sympify(r)
obj = Expr.__new__(cls, l, r)
obj.is_commutative = False
return obj
def __neg__(self):
return self
def __mul__(self, other):
if isinstance(other, …
Run Code Online (Sandbox Code Playgroud) tl; dr:如果前面带有复制构造函数,则不会调用它template<typename Something>
,并且Something
在构造函数签名中使用它.
概念验证(ideone):
#include <cstdio>
template<typename T>
class Test {
private:
T value_;
public:
mutable bool has_copies;
Test(const T& value) : value_(value), has_copies(false) {}
template<typename Related> // remove template here to fix behavior
Test(const Test<Related>& t) {
printf("In copy constructor\n");
value_ = t.value_;
has_copies = true;
t.has_copies = true;
}
};
int main() {
Test<int> t1(42);
printf("Before constructor\n");
Test<int> t2(t1);
printf("After constructor:\n");
printf(" t1 thinks it %s copies\n", t1.has_copies ? …
Run Code Online (Sandbox Code Playgroud) 我试图做这样的事情:
module.py
def __getitem__(item):
return str(item) + 'Python'
Run Code Online (Sandbox Code Playgroud)
test.py
import module
print module['Monty']
Run Code Online (Sandbox Code Playgroud)
我希望打印出"MontyPython".但是,这不起作用:
TypeError: 'module' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
是否可以在纯Python中创建一个可订阅模块(即不修改其源代码,猴子修补等)?
我在我的项目中使用自定义日志记录模块.如果它不可用,我想用假人代替它而不是提高ImportError
.
这是当前执行此操作的代码:
try:
import logger
except ImportError:
print 'Couldn\'t load logger'
class DummyLogger(object):
def __init__(self):
pass
def log(self, image):
pass
logger = DummyLogger()
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个优雅的解决方案.它确实有效,但它并不好.有没有更好的办法?
我正在编写一个程序,该程序使用动态编程来解决一个难题。DP 解决方案需要存储一个大表。整个表占用大约 300 Gb。物理上它存储在 40 ~7Gb 文件中。我用 byte 标记未使用的表条目\xFF
。我想快速为这张桌子分配空间。该程序必须同时在 Windows 和 Linux 下运行。
简而言之,我想以跨平台的方式有效地创建填充特定字节的大文件。
这是我目前使用的代码:
def reset_storage(self, path):
fill = b'\xFF'
with open(path, 'wb') as f:
for _ in range(3715948544 * 2):
f.write(fill)
Run Code Online (Sandbox Code Playgroud)
创建一个 7 Gb 文件大约需要 40 分钟。我如何加快速度?
我查看了其他问题,但似乎没有一个是相关的:
\0
或解决方案仅适用于 Windows代码
import array, itertools
a = array.array('B', itertools.repeat(0, 3715948544))
Run Code Online (Sandbox Code Playgroud)
在我的机器上运行大约需要7分钟(6分44秒).该计算机具有8 Gb的RAM,并使用CPython 3.4.3运行Linux.如何更快地获得具有1字节unsigned int条目的类数组对象,最好使用Python标准库?Numpy可以立即分配(不到1毫秒).