小编Zau*_*bov的帖子

使用@property与getter和setter

这是一个纯Python特定的设计问题:

class MyClass(object):
    ...
    def get_my_attr(self):
        ...

    def set_my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

class MyClass(object):
    ...        
    @property
    def my_attr(self):
        ...

    @my_attr.setter
    def my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

Python让我们可以这样做.如果你要设计一个Python程序,你会使用哪种方法?为什么?

python properties getter-setter

711
推荐指数
13
解决办法
41万
查看次数

查询MongoDB中的内部数组大小

考虑users集合中的MongoDB文档:

{ username : 'Alex', tags: ['C#', 'Java', 'C++'] }
Run Code Online (Sandbox Code Playgroud)

有没有办法,tags从服务器端获取数组的长度(不将标签传递给客户端)?

谢谢!

mongodb nosql

40
推荐指数
5
解决办法
3万
查看次数

Python 3:使用%s和.format()

我最终切换%.format()2.x代码中的字符串格式化运算符,以便将来更容易迁移到3.x. 有一点令人惊讶的是,不仅%在Py3中保留了样式格式,而且它在标准库代码中被广泛使用.这似乎是合乎逻辑的,因为写作'(%s)' % variable有点短,也许比较容易理解'({})'.format(variable).但我仍有疑问.在代码中使用这两种方法是否合适(pythonic?)?谢谢.

python string string-formatting

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

Python,WSGI,多处理和共享数据

我对mod_wsgi的多重管理功能以及将在具有多处理能力的WSGI服务器上执行的WSGI应用程序的一般设计感到困惑.

请考虑以下指令:

WSGIDaemonProcess example processes=5 threads=1
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,mod_wsgi将生成5个Python(例如CPython)进程,并且这些进程中的任何一个都可以接收来自用户的请求.

文件说:

共享数据需要对所有应用程序实例可见,无论它们执行哪个子进程,并且一个应用程序对数据所做的更改都可以立即供另一个应用程序使用,包括在另一个子进程中执行的任何子进程,外部数据存储,如必须使用数据库或共享内存.普通Python模块中的全局变量不能用于此目的.

但是在这种情况下,当想要确定应用程序在任何WSGI条件(包括多处理条件)中运行时,它会变得非常沉重.

例如,一个包含当前连接用户数量的简单变量 - 它应该是从/向memcached进行过程安全读/写,还是DB或(如果有这样的标准库机制可用)共享记忆?

并且代码会像

counter = 0

@app.route('/login')
def login():
    ...
    counter += 1
    ...

@app.route('/logout')
def logout():
    ...
    counter -= 1
    ...

@app.route('/show_users_count')
def show_users_count():
    return counter
Run Code Online (Sandbox Code Playgroud)

在多处理环境中表现不可预测?

谢谢!

python mod-wsgi wsgi multiprocessing

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

通过CSS在图像上水平居中文本

考虑以下html:

<div class="image">
    <img src="sample.png"/>
    <div class="text">
       Text of variable length
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

哪里:

.image {
    position:relative;
    text-align:center; // doesn't work as desired :(
}

.text {
    position:absolute;
    top:30px;
}
Run Code Online (Sandbox Code Playgroud)

如果有办法在.imagediv 的中心水平对齐文本,你能告诉我吗?我不能使用该left属性,因为文本的长度是未知的,text-align属性不适用于.textdiv :(

谢谢.

html css image alignment

22
推荐指数
2
解决办法
8万
查看次数

C++ Protobuf到/从JSON转换

有人熟悉一个稳定的C++解决方案(库,代码片段等),它将protobuf消息转换成JSON或从JSON转换出来吗?

c++ serialization json protocol-buffers

18
推荐指数
3
解决办法
2万
查看次数

Clojure应用地图和关键字参数销毁

考虑具有以下签名的函数:

(defn make-widget [& {:keys [x y] :or {x 10 y 20}}]
 ...)
Run Code Online (Sandbox Code Playgroud)

将地图传递给函数的最佳方法是什么,例如:

(make-widget {:x 100})
Run Code Online (Sandbox Code Playgroud)

要么

(make-widget {:y 200 :x 0})
Run Code Online (Sandbox Code Playgroud)

目前有什么我想到的是通过vec,flattenapply如:

(apply make-widget (flatten (vec ({:x 100}))
Run Code Online (Sandbox Code Playgroud)

我坚信有更好的方法可以做到这一点.你能考虑一下吗?

clojure map destruction keyword-argument

13
推荐指数
3
解决办法
2447
查看次数

如何通过就地过滤来修改python集合?

我想知道,如果Python中有方法修改集合而不创建新集合.例如:

lst = [1, 2, 3, 4, 5, 6]
new_lst = [i for i in lst if i > 3]
Run Code Online (Sandbox Code Playgroud)

工作得很好,但创建了一个新的集合.是否有一个原因,Python集合缺少一个filter()可以修改集合对象的方法(或类似的)?

python collections

11
推荐指数
3
解决办法
5193
查看次数

Python继承,元类和type()函数

我无法理解为什么以下代码表现出特定的方式,如下所述:

from abc import ABCMeta   

class PackageClass(object):
    __metaclass__ = ABCMeta        

class MyClass1(PackageClass):
    pass

MyClass2 = type('MyClass2', (PackageClass, ), {})

print MyClass1
print MyClass2

>>> <class '__main__.MyClass1'> 
>>> <class 'abc.MyClass2'>
Run Code Online (Sandbox Code Playgroud)

为什么repr(MyClass2)abc.MyClass2(这是不正确的)?谢谢!

python class abc python-import

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

Python asyncio:读者回调和协同通信

我试图实现一个简单的想法,将数据从stdin传递到协程:

import asyncio
import sys

event = asyncio.Event()

def handle_stdin():
    data = sys.stdin.readline()
    event.data = data  # NOTE: data assigned to the event object
    event.set()

@asyncio.coroutine
def tick():
    while 1:
        print('Tick')
        yield from asyncio.sleep(1)

        if event.is_set():
            data = event.data  # NOTE: data read from the event object
            print('Data received: {}'.format(data))
            event.clear()

def main(): 
    loop = asyncio.get_event_loop()
    loop.add_reader(sys.stdin, handle_stdin)
    loop.run_until_complete(tick())    

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但是带有变量而不是Event对象的简化版本也适用:

data = None

def handle_stdin():
    global data
    data = sys.stdin.readline()

@asyncio.coroutine
def tick(): …
Run Code Online (Sandbox Code Playgroud)

python coroutine python-3.x python-3.4 python-asyncio

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