我正在尝试找到一种可靠/跨版本(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); …
我正在编写一个管理一些LDAP条目的PHP应用程序.我有一个页面显示来自给定分支的条目并过滤一些objectClasses(仅限某些授权用户等).
我想知道将'原始'url定义的过滤器传递给ldap_search()函数是否安全,或者这可能带来任何类型的安全问题.
将要设置的过滤器将类似于:
"(&(&(objectClass=myClass1)(objectClass=myClass2))". $_GET['filter'] .")"
Run Code Online (Sandbox Code Playgroud)
当然,我永远不会在SQL中写这样的东西,但使用LDAP函数?我没有看到这样做的任何风险,我错了吗?
注意:我不关心错误的过滤器语法等问题,因为我在生成URL时正在逃避其他地方.如果手动定义的过滤器有错误,可以向用户显示错误.
我正在编写一个应用程序,显示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,但我对这种事情并不是很专业.
注意:更改文本颜色不是机会,因为背景可能不总是黑色..