我想在我的开源库中支持Python的新功能。Python的新类型提示使用户更容易使用我的软件。
但是它带有一个障碍-它依赖于一个typing需要一些更有趣的类型注释的库。该库在Python <3.5中不存在。
通常,我会使用兼容性库(例如six)来处理该问题,但是目前尚不支持该typing模块six。
另一个可以接受的解决方案可能是类似于3to2转换器的东西,可以剥离不支持的功能。不幸的是,我还没有看到3.5到3.(x <5)的转换器。
看来,目前唯一可用的替代方法是将我所有的typedef导入包装到try块中,并为该语言的旧版本提供伪造的typedef。这很丑陋,而不是我想要承担我的项目的方式。
有什么建议么?
我正在Scala中编写一个小型MUD风格的游戏.我想允许用户远程登录游戏(就像过去一样).这真的只是一场比赛.它将在专用网络上运行.安全性(尚未)是一个考虑因素.
"协议"由用户发送的文本行(以CR终止)组成.在等待下一行用户输入之前,服务器将使用它自己的文本行进行回复.实际上,这是一个REPL样式的文本界面.
有没有一个方便的库,可以为我做网络的东西?我只是想让它打开一个端口并允许用户连接到该服务并开始从游戏发送和接收文本.
有很多功能齐全的服务器库(例如TwitterServer)似乎面向Thrift和HTTP.我实际上是在追求更简单的事情.我只想接收文本行,并用文本行回复.
关于如何以最简单的方式实现这一目标的任何想法?
这段代码实现了一个迷你字符串匹配语言 - 它理解两个符号(?=匹配任何字符,*=匹配一个或多个字符).这段代码似乎工作正常,但似乎有点不优雅.
object Re {
def check(search: String, input: String):Boolean = {
search match {
case `input` => true
case x if x.startsWith("?") =>
check(x.stripPrefix("?"), input.tail)
case x if x.startsWith("*") => input match {
case "" => false
case i => check(x.stripPrefix("*"), i.tail) | check(x, i.tail)
}
case _ => false
}
}
}
Run Code Online (Sandbox Code Playgroud)
具体来说,我不喜欢我说x如果x.startswith(某事)然后必须删除那些东西的情况.
scala是否有更惯用的方法来做到这一点?关于Seq匹配器的工作原理,以便我不需要startsWith或stripPrefix.
在此代码示例中,“teaches_for”是将 Performer 模型与 School 模型相关联的多对多字段的名称。只有在 Performer 和 Teacher 模型之间至少存在一种关系时,我才想包含这个特定块。
这是我的非工作代码:
{% if performer.teaches_for.exists %}
<h3>{{performer.first_name}} teaches at these schools...</h3>
<ul>
{% for school in performer.teaches_for.all %}
<li><a href="/schools/{{school.id}}">{{ school.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
错的那一行是{% if performer.teaches_for.exists %}。如果至少存在一种关系,我可以用什么来替换它,如果存在,则为 True,否则为 False?
我的 Performer 模型中的相关字段如下所示:
teaches_for = models.ManyToManyField(
School,
verbose_name="Teaches at this school",
blank=True,
related_name="teachers",
)
Run Code Online (Sandbox Code Playgroud) 在我正在开发的程序中,我必须显式设置包含布尔数据的列的类型。有时,此列中的所有值都是“无”。除非我提供明确的类型信息,否则 Pandas 会推断出该列的错误类型信息。
是否有代表 nullable-bool 的 pandas 兼容类型?我想做这样的事情,但保留 Nones:
s = pandas.Series([True, False, None]).astype(bool)
print([v for v in s])
Run Code Online (Sandbox Code Playgroud)
给出:
[True, False, False]
Run Code Online (Sandbox Code Playgroud)
Python 的内置 bool 类不能有 Null 值。它只能是 True 或 False。而在这种情况下,因为bool(None)==False最终的 Null 丢失了。
但是如果我想保留空值怎么办?是否有一种类型可以为列提供允许 True、False 和 None 的类型?
我已经解决了数字列的类似问题:对于这些,我可以使用 Numpy Int64,它是与 pandas 兼容的可空整数类型:
s = pandas.Series([1, 2, None, numpy.NaN]).astype("Int64")
print([v for v in s])
Run Code Online (Sandbox Code Playgroud)
给出:
[1, 2, <NA>, <NA>]
Run Code Online (Sandbox Code Playgroud)
这对于可为空整数来说是完全正确的行为,我只需要一个可用于我的可为空布尔值的类型。
我使用 Docker Compose 来配置一些 Dockerized 批处理作业。这些作业从外部数据库中提取一些数据,然后将数据保存回其他数据库。这些工作从不直接相互影响。它们不公开任何端口或运行任何服务器。
我想关闭 Docker 网络。
默认情况下,docker-compose为每个配置创建一个网络。有没有办法抑制这种情况,以便 compose 开始运行容器而无需创建任何网络?
我正在尝试从Jekins服务器获取URL.直到最近,我才能使用此页面上描述的模式(HOWTO使用urllib2获取Internet资源)来创建一个密码管理器,该管理器使用用户名和密码正确响应BasicAuth挑战.一切都很好,直到Jenkins团队改变他们的安全模型,并且该代码不再有效.
# DOES NOT WORK!
import urllib2
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://localhost:8080"
password_mgr.add_password(None, top_level_url, 'sal', 'foobar')
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
a_url = 'http://localhost:8080/job/foo/4/api/python'
print opener.open(a_url).read()
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Traceback (most recent call last):
File "/home/sal/workspace/jenkinsapi/src/examples/password.py", line 11, in <module>
print opener.open(a_url).read()
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, …Run Code Online (Sandbox Code Playgroud) 我想写一个函数模糊地像:
def doubleit[A](a: A): A = {a + a}
Run Code Online (Sandbox Code Playgroud)
但我希望'A'代表任何一种Int,但不是任何东西.有没有办法让Scala知道我想要'A'的意思?
def doubleit[A <: Int](a: A): A = {a + a}
Run Code Online (Sandbox Code Playgroud)
被编译器拒绝.
我想复制一个对象,以使我拥有两个具有两个不同内存地址的相同对象。我对此的第一次尝试失败了:
aa := a
assert.NotEqual(t, &a, &aa, "Copied items should not be the same object.") // Test fails
Run Code Online (Sandbox Code Playgroud)
我可以解决这个问题,使其真正复制该结构吗?这个结构没有什么特别的。
我正在按照手册中描述的方式启动 Celery 工人......
$ stoneid salimfadhley$ celery worker
-------------- celery@TCR-C02X29QPJHC9.local v4.2.1 (windowlicker)
---- **** -----
--- * *** * -- Darwin-18.2.0-x86_64-i386-64bit 2018-11-13 14:00:20
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: default:0x10fb4ee48 (.default.Loader)
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues] …Run Code Online (Sandbox Code Playgroud)