小编Noc*_*wer的帖子

构建自引用元组

在多年前在一个论坛中看到一个从未解决过的对话之后,它让我想知道如何正确地创建一个引用自身的元组.从技术上讲,这是一个非常糟糕的主意,因为元组应该是不可变的.一个不可变对象怎么可能包含自己呢?但是,这个问题不是关于最佳实践,而是关于Python中可能的内容的查询.

import ctypes

def self_reference(array, index):
    if not isinstance(array, tuple):
        raise TypeError('array must be a tuple')
    if not isinstance(index, int):
        raise TypeError('index must be an int')
    if not 0 <= index < len(array):
        raise ValueError('index is out of range')
    address = id(array)
    obj_refcnt = ctypes.cast(address, ctypes.POINTER(ctypes.c_ssize_t))
    obj_refcnt.contents.value += 1
    if ctypes.cdll.python32.PyTuple_SetItem(ctypes.py_object(array),
                                            ctypes.c_ssize_t(index),
                                            ctypes.py_object(array)):
        raise RuntimeError('PyTuple_SetItem signaled an error')
Run Code Online (Sandbox Code Playgroud)

前一个函数旨在访问Python的C API,同时牢记内部结构和数据类型.但是,运行该函数时通常会生成以下错误.通过未知的过程,之前可以通过类似的技术创建自引用元组.

问题:如何self_reference修改功能以始终如一地工作?

>>> import string
>>> a = tuple(string.ascii_lowercase)
>>> self_reference(a, 2)
Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python ctypes tuples creation self-reference

14
推荐指数
3
解决办法
1242
查看次数

如何保护我在应用程序中进行的REST调用?

我有一个具有"私有"REST API的应用程序; 从我自己的网页进行Ajax调用时,我使用RESTful URL.但是,这是不安全的,如果他们知道URL模式,任何人都可以进行相同的调用.

保护这些电话的最佳(或标准)方法是什么?如果我打算在将来发布API,或者我将两个单独的策略混合在一起,是否值得看看OAuth之类的东西?

我正在使用Google App Engine for Python和Tipfy.

python rest google-app-engine restful-authentication tipfy

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

Python SocketServer:发送到多个客户端?

好吧,我正在尝试用一个SocketServer构建一个小的python prgram,它应该将它收到的消息发送给所有连接的客户端.我卡住了,我不知道如何在服务器端存储客户端,我不知道如何发送给多个客户端.哦,我的程序每次超过1个客户端连接失败,每次客户端发送多个消息...

这是我的代码,直到现在:

        print str(self.client_address[0])+' connected.'
    def handle(self):
        new=1
        for client in clients:
            if client==self.request:
                new=0
        if new==1:
            clients.append(self.request)
        for client in clients:
            data=self.request.recv(1024)
            client.send(data)

class Host:
    def __init__(self):
        self.address = ('localhost', 0)
        self.server = SocketServer.TCPServer(self.address, EchoRequestHandler)
        ip, port = self.server.server_address
        self.t = threading.Thread(target=self.server.serve_forever)
        self.t.setDaemon(True)
        self.t.start()
        print ''
        print 'Hosted with IP: '+ip+' and port: '+str(port)+'. Clients can now connect.'
        print ''
    def close(self):
        self.server.socket.close()

class Client:
    name=''
    ip=''
    port=0
    def __init__(self,ip,port,name):
        self.name=name
        self.hostIp=ip
        self.hostPort=port
        self.s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.connect((self.hostIp, self.hostPort))
    def …
Run Code Online (Sandbox Code Playgroud)

python sockets networking socketserver python-2.7

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

使用专有数据库系统构建应用程序的优缺点

我很长一段时间以来一直对4D SAS的数据库产品感兴趣,但几乎没有触及它.

在考虑用于应用程序开发的工具,特别是需要数据库组件的工具时,在考虑MySQL和PostgreSQL等开源工具与4D或Pervasive SQL等专有解决方案时应该注意什么?

SO社区对4D,Pervasive,FilemakerPro等各种数据库工具有什么好的(和坏的!)体验?

任何糟糕的经历?

4d-database

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

有没有更快的方法将数字转换为名称?

以下代码定义了映射到数字的名称序列.它旨在获取一个数字并检索特定名称.该类通过确保名称存在于其缓存中来运行,然后通过索引将其返回到其缓存中来返回名称.问题在于:如何在不存储缓存的情况下根据数量计算名称?

该名称可以被认为是基数63,除了始终在基数53的第一个数字.

class NumberToName:

    def __generate_name():
        def generate_tail(length):
            if length > 0:
                for char in NumberToName.CHARS:
                    for extension in generate_tail(length - 1):
                        yield char + extension
            else:
                yield ''
        for length in itertools.count():
            for char in NumberToName.FIRST:
                for extension in generate_tail(length):
                    yield char + extension

    FIRST = ''.join(sorted(string.ascii_letters + '_'))
    CHARS = ''.join(sorted(string.digits + FIRST))
    CACHE = []
    NAMES = __generate_name()

    @classmethod
    def convert(cls, number):
        for _ in range(number - len(cls.CACHE) + 1):
            cls.CACHE.append(next(cls.NAMES))
        return cls.CACHE[number]

    def __init__(self, *args, …
Run Code Online (Sandbox Code Playgroud)

python namespaces converter

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

用Python打印的三种方法 - 何时使用?

根据蒂姆·彼得斯的说法,"应该有一个 - 最好只有一个 - 显而易见的方法." 在Python中,似乎有三种打印信息的方法:

print('Hello World', end='')
sys.stdout.write('Hello World')
os.write(1, b'Hello World')
Run Code Online (Sandbox Code Playgroud)

问题:是否有最佳实践政策说明何时应在程序中使用这三种不同的打印方法?

python printing policy python-3.x

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

PyQt文档

我已经安装了Pyqut GPL v4.6.2 for Python v3.1Qt by Nokia v4.6.0(OpenSource),但是PyQt中的文档还没有出现.示例文档也都是空白的.

有人会介意一步一步指导访问哪些链接以及必须执行哪些程序才能获得PyQt文档的文本?

编辑:程序在Windows上运行,文档没有出现在PyQt GPL v4.6.2 for Python v3.1>示例> PyQt示例和演示以及PyQt GPL v4.6.2 for Python v3.1>助手.需要做些什么来让两个程序访问文档?

python qt pyqt

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

有人知道这个Python数据结构吗?

Python类有六个要求,如下所示.只有粗体术语才能被视为要求.


  1. 对于以下四个操作中的许多操作,接近O(1)性能.
  2. 在将对象插入容器维护已排序的顺序.
  3. 能够查看对象中包含的最后值(最大值).
  4. 允许双方弹出(获得最小或最大值).
  5. 获取存储的对象的总大小或数量的能力.
  6. 像Python的标准库中的代码一样成为现成的解决方案.

由于历史原因,这里留下了什么(帮助好奇并证明进行了研究).


在查看Python的标准库(特别是关于数据类型的部分)之后,我仍然没有找到满足碎片表要求要求的类.collections.deque接近所需,但它不支持保持其中包含的数据排序.它提供:

  1. 在具有O(1)性能的双端队列的高效附加和弹出.
  2. 双方都弹出对象中包含的数据.
  3. 获取其中包含的对象的总大小或数量.

使用列表实现低效的解决方案将是微不足道的,但找到一个表现良好的类将更加可取.在不增加上限的增长内存模拟中,这样的类可以保留空(已删除)单元格的索引并保持碎片级别下降.该bisect模块可能有所帮助:

  1. 在数组中插入新对象时,帮助按排序顺序保持数组.
  2. 添加了用于保持列表作为对象排序的现成解决方案.
  3. 允许执行array[-1]查看数组中的最后一个值.

最终候选人未能完全满足要求并且看起来最不乐观的是heapq模块.虽然支持看似有效的插入并确保它array[0]是最小值,但数组并不总是处于完全排序状态.没有其他任何东西被发现有帮助.


有没有人知道Python中的类或数据结构是否接近这六个要求?

python sorting performance insert deque

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

TypeError:*之后的function()参数必须是序列,而不是生成器

在尝试编写一个模糊的,模糊的类型检查器时,发现了一种不可接受的代码模式.但是,它不一致地无法正常工作.这是最初用于测试它的代码.

def statictypes(a):
    def b(a, b, c):
        if b in a and not isinstance(c, a[b]): raise TypeError('{} should be {}, not {}'.format(b, a[b], type(c)))
        return c
    return __import__('functools').wraps(a)(lambda *c: b(a.__annotations__, 'return', a(*(b(a.__annotations__, *d) for d in zip(a.__code__.co_varnames, c)))))

@statictypes
def isallinstance(iterable: object, class_or_type_or_tuple: (type, tuple)) -> bool:
    """isallinstance(iterable, class_or_type_or_tuple) -> bool

    Return whether all items in an iterable are instances of a class or of a
    subclass thereof. With a type as second argument, return whether that is
    all items' …
Run Code Online (Sandbox Code Playgroud)

python typeerror

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

如何从不同的子模块导入一个子模块?

我的项目具有以下结构:

DSTC/
    st/
        __init__.py
        a.py
        g.py
        tb.py
    dstc.py
Run Code Online (Sandbox Code Playgroud)

这是a.py部分:

import inspect
import queue
import threading
Run Code Online (Sandbox Code Playgroud)

这是tb.py部分:

import functools
from . import a
Run Code Online (Sandbox Code Playgroud)

直接运行时,a.py不会产生任何错误,并且很容易验证没有SyntaxErrors。但是,运行tb.py会导致以下错误:

"C:\Program Files\Python36\python.exe" C:/Users/user/PycharmProjects/DSTC/st/tb.py
Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/DSTC/st/tb.py", line 15, in <module>
    from . import a
ImportError: cannot import name 'a'

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

我应该如何重写afrom的导入,tb以便tb可以直接运行而不会导致错误?

python reference exception python-import python-3.x

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