我正在尝试使用pkgutil.get_data从包中获取资源。我已经阅读了这个 API 的文档,其中说
要使用
pkgutil.get_data(package, resource)....package参数应该是包的名称,采用标准模块格式 (foo.bar)。参数resource应采用相对文件名的形式,使用 / 作为路径分隔符。
我对术语标准模块格式(foo.bar)的理解感到困惑。假设我们有下面的例子,我想获取资源collection_effects.csv,我该如何调用这个API?
sound/ Top-level package
__init__.py Initialize the sound package
effects/ Subpackage for sound effects
__init__.py
echo.py
reverse.py
cool_effects/
collection_effects.csv
...
Run Code Online (Sandbox Code Playgroud)
从文档中,我想我可以通过以下方式调用资源:
import pkgutil
res = pkg.util.get_data("sound.effects", "/cool_effects/collection_effects.csv")
Run Code Online (Sandbox Code Playgroud)
,但是,似乎下面使用也会返回一个字节码(从文档中,无法获取资源将返回None):
res = pkg.util.get_data("sound/effects", "/cool_effects/collection_effects.csv")
我对标准模块格式的含义感到困惑,以及调用此 API 的正确方法是什么?
我试图利用Python @property来修改类属性的类属性List.大多数在线示例假设@property修饰的属性是一个奇异值,而不是可以通过setter扩展的列表.
稍微澄清一下问题:我不只是想为属性s分配一个值(int列表的值),而是需要修改它(将新的int附加到当前列表).
我的目的是期望:
c = C()
c.s # [1,2,3] is the default value when instance c initiated.
c.s(5)
c.s # [1,2,3,5]
Run Code Online (Sandbox Code Playgroud)
给出C如下的实施:
class C:
def __init__(self):
self._s = [1,2,3]
@property
def s(self):
return self._s
@s.setter
def s(self, val):
self._s.append(val)
Run Code Online (Sandbox Code Playgroud)
如果我这样做c.s(5),我会得到的
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-99-767d6971e8f3> in <module>()
----> 1 c.s(5)
TypeError: 'list' object is not callable
Run Code Online (Sandbox Code Playgroud)
我已经阅读了最相关的帖子: 列表上的Python属性 和 带有列表的Python装饰属性setter
但两者都不适合我的情况:
__setitem__可以修改列表的元素,但我想扩展列表.
对于我当前的任务,不能使用全局属性.
在这方面,什么是最好的解决方案?(或者我不应该从一开始就期望@property在可变数据结构上?)谢谢!
------ -----编辑
@Samuel Dion-Girardeau建议
子类列表并定义其 …
我正在学习C中与自定义结构相关的malloc和free堆内存。
对于下面的代码,我不断得到segment fault. 使用valgrind分析显示:==12999== Address 0x108b4b is in a r-x mapped file <folder_path> segment
==12999==
完整输出:
Name : Amy
Date of Birth: 1989 9 21
Name : echo
Date of Birth: 1989 9 21
Name : echo
Date of Birth: 1989 9 21
Name : echo Address 0x5580be70e270
Date of Birth: 1989 9 21
Their address : 0x5580be70e260 0x5580be70e264 0x5580be70e268
Name : echo Address 0x5580be70e270
Date of Birth: 1989 9 21
Their address : …Run Code Online (Sandbox Code Playgroud) 我正在阅读“第2部分急躁的scala”第14.4节,对上下文感到困惑:
您可以匹配表达式的类型,例如:
obj match {
case x:Int => x
case s:String => Integer.parseInt(s)
case _:BigInt => Int.MaxValue
case _ => 0
}
Run Code Online (Sandbox Code Playgroud)
与类型匹配时,必须提供变量名称。否则,您匹配对象:
obj match {
case _:BigInt => Int.MaxValue // Matches any object of type BigInt
case BigInt => -1 // Matches the BigInt object of type Class
}
Run Code Online (Sandbox Code Playgroud)
我很困惑的是,如果我进行如下测试,那么如何理解obj哪个请求是expression:
val x = 121
val obj : Any = x
obj == 121 // true
obj match {
case x:Int => x
case s:String => …Run Code Online (Sandbox Code Playgroud) 我很难理解Scala中使用for-compression的机制。例如,如果我有
val x = for {
i <- Option(1)
j <- Option(2)
k <- Option(3)
} yield (i,j,k)
Run Code Online (Sandbox Code Playgroud)
x是x: Option[(Int, Int, Int)] = Some((1,2,3))。但是,例如,如果组件中的至少一个为“无”,
val x = for {
i <- Option(1)
j <- Option(2)
k <- None
} yield (i,j,k)
Run Code Online (Sandbox Code Playgroud)
然后x是的x: Option[(Int, Int, Nothing)] = None,而我实际上希望看到这样的东西:x: Option[(Int, Int, Nothing)] = Some((1,2,None))。
我已经检查了从Scala的官方文档常见问题在那里特别指出for-comprehension的组合flatmap和map。但我还是有难度的理解是,x是None。
我想我错过了一些重要的概念flatmap和map区别。
python-3.x ×2
scala ×2
c ×1
expression ×1
flatmap ×1
gcc ×1
memory-leaks ×1
oop ×1
package ×1
properties ×1
valgrind ×1