我正在编写一个由两部分组成的小型Python模块:
起初,我决定通过使用它在函数内部定义它来"隐藏"这个实现类,但这妨碍了可读性,如果多个函数重用同一个类,则不能使用它.
那么,除了评论和文档字符串之外,是否有一种机制将类标记为"私有"或"内部"?我知道下划线机制,但据我所知它只适用于变量,函数和方法名称.
我正在寻找一个Python 的UPnP客户端的开源实现,更具体地说是它的Internet网关设备(IGD)部分.
目前,我只能在PyMediaServer,PyMedS,BRisa或Coherence等项目中找到UPnP媒体服务器实现.
我确信我可以使用这些代码库作为开始,但媒体服务器部分将引入不必要的复杂性.
那么你能推荐一个客户端UPnP(希望是IGD)Python库吗?另一种方法是将调用调用到诸如MiniUPnP之类的C库,但我更喜欢纯Python实现.
更新:StackOverflow上提供了一个有趣的SSDP和UPnP相关讨论.
许多python库,即使是最近编写的,也使用httplib2或套接字接口来执行网络任务.
由于它们的阻塞特性,这些显然比Twisted更容易编码,但我认为将它们与其他代码(尤其是GUI代码)集成时这是一个缺点.如果您想要可扩展性,并发性或GUI集成,同时避免多线程,那么Twisted是一个自然的选择.
所以我对这些问题的意见感兴趣:
编辑:请让我用另一种方式说出来.您是否觉得使用Twisted编写新的库代码可能会增加其采用的障碍?Twisted有明显的好处(特别是gimel所说的可移植性和可伸缩性),但是它不是一个核心python库的事实可能会被一些人认为是一个缺点.
我通过artima" Scala编程 "一书来体验Scala.
在介绍Map
特征时,作者会花一些时间将->
语法描述为可以应用于任何类型以获取元组的方法.
事实上:
scala> (2->"two")
res1: (Int, String) = (2,two)
scala> (2,"two")
res2: (Int, String) = (2,two)
scala> (2->"two") == (2, "two")
res3: Boolean = true
Run Code Online (Sandbox Code Playgroud)
但那些不等同于:
scala> Map(1->"one") + (2->"two")
res4: scala.collection.immutable.Map[Int,String] = Map(1 -> one, 2 -> two)
scala> Map(1->"one") + (2, "two")
<console>:8: error: type mismatch;
found : Int(2)
required: (Int, ?)
Map(1->"one") + (2, "two")
Run Code Online (Sandbox Code Playgroud)
为什么会如此,因为我的第一次测试似乎表明两个"对"语法都构建了一个元组?
问候.
python ×3
networking ×2
httplib2 ×1
nat ×1
scala ×1
scala-2.10 ×1
sockets ×1
twisted ×1
upnp ×1