小编red*_*dow的帖子

Python 3.7:检查类型注释是否是泛型的"子类"

我正在尝试找到一种可靠/跨版本(3.5+)方法来检查类型注释是否是给定泛型类型的"子类"(即从类型注释对象中获取泛型类型).

在Python 3.5/3.6上,它可以轻松实现,正如您所期望的那样:

>>> from typing import List

>>> isinstance(List[str], type)
True

>>> issubclass(List[str], List)
True
Run Code Online (Sandbox Code Playgroud)

在3.7上,看起来泛型类型的实例不再是实例type,因此它将失败:

>>> from typing import List

>>> isinstance(List[str], type)
False

>>> issubclass(List[str], List)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.7/typing.py", line 716, in __subclasscheck__
    raise TypeError("Subscripted generics cannot be used with"
TypeError: Subscripted generics cannot be used with class and instance checks
Run Code Online (Sandbox Code Playgroud)

想到的其他想法是检查实际的实例类型,但是:

Python 3.6/3.5:

>>> type(List[str])
<class 'typing.GenericMeta'>
Run Code Online (Sandbox Code Playgroud)

Python 3.7:

>>> type(List[str])
<class 'typing._GenericAlias'>
Run Code Online (Sandbox Code Playgroud)

但这并没有真正给出任何进一步的指示,即哪个是实际的泛型类型(可能不是List); …

python type-annotation python-3.7

16
推荐指数
2
解决办法
1231
查看次数

将"原始"搜索过滤器传递给ldap_search()函数是否安全?

我正在编写一个管理一些LDAP条目的PHP应用程序.我有一个页面显示来自给定分支的条目并过滤一些objectClasses(仅限某些授权用户等).

我想知道将'原始'url定义的过滤器传递给ldap_search()函数是否安全,或者这可能带来任何类型的安全问题.

将要设置的过滤器将类似于:

"(&(&(objectClass=myClass1)(objectClass=myClass2))". $_GET['filter'] .")"
Run Code Online (Sandbox Code Playgroud)

当然,我永远不会在SQL中写这样的东西,但使用LDAP函数?我没有看到这样做的任何风险,我错了吗?

注意:我不关心错误的过滤器语法等问题,因为我在生成URL时正在逃避其他地方.如果手动定义的过滤器有错误,可以向用户显示错误.

php ldap

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

Pygame - 表面淡入/淡出

我正在编写一个应用程序,显示PyGame窗口中出现的消息列表; 为了让事情变得更漂亮,我决定为文本添加一个很好的淡入/淡出效果.

问题是:SDL只允许每像素或每表面alpha,而不是两者.所以我编写了一个函数,根据所需的"图层"不透明度重新计算像素alpha,但它当然非常非常非常慢(即使在核心i7 @ 2.7GHz上,它也会下降到~10FPS):

def apply_alpha(surface, alpha):
    for x in xrange(surface.get_width()):
        for y in xrange(surface.get_height()):
            color = surface.get_at((x, y))
            color.a = int(color.a * alpha)
            surface.set_at((x, y), color)
    return surface
Run Code Online (Sandbox Code Playgroud)

这里有完整的例子:https://gist.github.com/rshk/5072173(不是真正的应用程序,只是一个相关的例子)

有什么方法可以加快速度吗?我看到可以直接访问底层缓冲区,避免实例化Color对象,但是以这种方式更新alphas似乎更慢,调用BufferProxy.write()方法.

也许使用硬件加速的东西有帮助吗?我认为这里的理想是在将表面涂抹到背景上时应用alpha,但我对这种事情并不是很专业.

注意:更改文本颜色不是机会,因为背景可能不总是黑色..

python pygame sdl

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

标签 统计

python ×2

ldap ×1

php ×1

pygame ×1

python-3.7 ×1

sdl ×1

type-annotation ×1