我试图理解上的差异之间__getattr__和__getattribute__,但是,我在它失败.
Stack Overflow问题的答案vs 之间的差异__getattr____getattribute__说:
__getattribute__在查看对象的实际属性之前调用,因此正确实现可能很棘手.您最终可以轻松地进行无限递归.
我完全不知道这意味着什么.
然后继续说:
你几乎肯定想要
__getattr__.
为什么?
我读到如果__getattribute__失败,__getattr__就会被调用.那么为什么有两种不同的方法做同样的事情呢?如果我的代码实现了新的样式类,我应该使用什么?
我正在寻找一些代码示例来清除这个问题.我已经用Google搜索了我的能力,但我找到的答案并没有彻底讨论这个问题.
如果有任何文档,我准备阅读.
对于C++,我们可以使用OpenMP进行并行编程; 但是,OpenMP不适用于Python.如果我想并行我的python程序的某些部分,我该怎么办?
代码的结构可以被认为是:
solve1(A)
solve2(B)
Run Code Online (Sandbox Code Playgroud)
哪里solve1和solve2是两个独立的功能.如何并行运行这种代码而不是按顺序运行以减少运行时间?希望可以有人帮帮我.首先十分感谢.代码是:
def solve(Q, G, n):
i = 0
tol = 10 ** -4
while i < 1000:
inneropt, partition, x = setinner(Q, G, n)
outeropt = setouter(Q, G, n)
if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
break
node1 = partition[0]
node2 = partition[1]
G = updateGraph(G, node1, node2)
if i == 999:
print "Maximum iteration reaches"
print inneropt
Run Code Online (Sandbox Code Playgroud)
setinner和setouter是两个独立的函数.这就是我要平行的地方......
我有一个像这样的URL模式:
urlpatterns = (
url(r'^$', list_titles, name='list'),
url(r'^(?P<tag>[a-z\-0-9]+?)/$', list_titles, name='filtered-list'),
url(r'^(?P<title>\S+?)/$', show_title, name='title'),
)
Run Code Online (Sandbox Code Playgroud)
在filtered-list与title匹配同样的事情.
如果有事情匹配的可用列表tag中filtered-list,我要list_titles火了.但是,如果没有匹配tag,我想将其重新发送回URL处理器,以便show_title激活.
如果没有匹配的标题,我会在那里提出一个合适的404.
我知道我可以从视图中做到这一点......但是有点臭,不得不将进程硬连接到视图中.我希望通过URL命令来决定首先选择哪些内容以及它的内容.
我有一个同意写的ODE系统:
from sympy.parsing.sympy_parser import parse_expr
xs = symbols('x1 x2')
ks = symbols('k1 k2')
strs = ['-k1 * x1**2 + k2 * x2', 'k1 * x1**2 - k2 * x2']
syms = [parse_expr(item) for item in strs]
Run Code Online (Sandbox Code Playgroud)
我想这转换成向量量值函数,接受的x值,第k值的1D numpy的阵列的一维阵列numpy的,返回在那些点评估的方程的一个一维阵列numpy的.签名看起来像这样:
import numpy as np
x = np.array([3.5, 1.5])
k = np.array([4, 2])
xdot = my_odes(x, k)
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西的原因是给这个功能scipy.integrate.odeint,所以它需要快.
尝试1:潜艇
当然,我可以写一个包装器subs:
def my_odes(x, k):
all_dict = dict(zip(xs, x))
all_dict.update(dict(zip(ks, k)))
return np.array([sym.subs(all_dict) for sym in syms])
Run Code Online (Sandbox Code Playgroud)
但这是超级慢的,特别是对于我的真实系统,它更大,并且运行了很多次.我需要将此操作编译为C代码.
尝试2:theano
我可以通过sympy …
如果我有一个 Polars 文字,如何提取该值?
import polars as pl
expr = pl.lit(0.5)
val = float(expr)
# TypeError: float() argument must be a string or a real number, not 'Expr'
Run Code Online (Sandbox Code Playgroud) 这是一个带有两个特征的简单设置,一个具有由前一个特征限定的协变类型参数的类,另一个类具有由另一个类限定的类型参数.对于这两个类,只有当两个特征中的一个作为类型参数的基础时,才能使用特定方法(通过隐式证据).编译好:
trait Foo
trait ReadableFoo extends Foo {def field: Int}
case class Bar[+F <: Foo](foo: F) {
def readField(implicit evidence: F <:< ReadableFoo) = foo.field
}
case class Grill[+F <: Foo, +B <: Bar[F]](bar: B) {
def readField(implicit evidence: F <:< ReadableFoo) = bar.readField
}
Run Code Online (Sandbox Code Playgroud)
但是,由于Bar是协变的F,我不应该需要F参数Grill.我应该要求它B是一个子类型Bar[ReadableFoo].但是,这失败了:
case class Grill[+B <: Bar[_]](bar: B) {
def readField(implicit evidence: B <:< Bar[ReadableFoo]) = bar.readField
}
Run Code Online (Sandbox Code Playgroud)
有错误:
error: Cannot prove that Any …Run Code Online (Sandbox Code Playgroud) 我最近在SO上发布了几个关于Scala 特征,表示类型,成员类型,清单和隐式证据的问题.这些问题背后是我为生物蛋白质网络构建建模软件的项目.尽管有非常有用的答案,这让我比我自己更接近,但我仍然没有找到我的项目的解决方案.有几个答案表明我的设计存在缺陷,这就是为什么解决Foo问题的方法在实践中不起作用的原因.在这里,我发布了一个更复杂(但仍然大大简化)的问题版本.我希望问题和解决方案对于尝试在Scala中构建复杂的特征和类层次结构的人来说将是广泛有用的.
我项目中的最高级别是生物反应规则.规则描述了如何通过反应转化一种或两种反应物.每个反应物是具有称为单体和边缘的节点的图,所述节点连接在单体上的命名位点之间.每个站点也都有一个可以处于的状态.编辑:边缘的概念已从示例代码中删除,因为它们使示例复杂化而不会对问题做出太多贡献.规则可能是这样的:有一种由单体A制成的反应物分别通过位点a1和b1与单体B结合; 债券被规则打破,使得网站a1和b1不受约束; 同时在单体A上,站点a1的状态从U变为P.我将其写为:
A(a1~U-1).B(b1-1) -> A(a1~P) + B(b1)
Run Code Online (Sandbox Code Playgroud)
(在Scala中解析这样的字符串非常简单,它使我的头旋转.)-1表示债券#1在这些网站之间 - 数字只是一个任意标签.
这是我到目前为止的原因以及为什么我添加每个组件的原因.它编译,但只有无偿使用asInstanceOf.如何摆脱asInstanceOfs以使类型匹配?
我用基本类代表规则:
case class Rule(
reactants: Seq[ReactantGraph], // The starting monomers and edges
producedMonomers: Seq[ProducedMonomer] // Only new monomers go here
) {
// Example method that shows different monomers being combined and down-cast
def combineIntoOneGraph: Graph = {
val all_monomers = reactants.flatMap(_.monomers) ++ producedMonomers
GraphClass(all_monomers)
}
} …Run Code Online (Sandbox Code Playgroud) 如何使用 pickle 冻结数据类的实例__slots__?例如,以下代码在 Python 3.7.0 中引发异常:
import pickle
from dataclasses import dataclass
@dataclass(frozen=True)
class A:
__slots__ = ('a',)
a: int
b = pickle.dumps(A(5))
pickle.loads(b)
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 3, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'a'
Run Code Online (Sandbox Code Playgroud)
如果我删除frozen或__slots__. 这只是一个错误吗?
案例类copy()方法应该生成实例的相同副本,并且按名称替换任何字段.当case类具有带有清单的类型参数时,这似乎失败了.该副本失去了对其参数类型的所有知识.
case class Foo[+A : Manifest](a: A) {
// Capture manifest so we can observe it
// A demonstration with collect would work equally well
def myManifest = implicitly[Manifest[_ <: A]]
}
case class Bar[A <: Foo[Any]](foo: A) {
// A simple copy of foo
def fooCopy = foo.copy()
}
val foo = Foo(1)
val bar = Bar(foo)
println(bar.foo.myManifest) // Prints "Int"
println(bar.fooCopy.myManifest) // Prints "Any"
Run Code Online (Sandbox Code Playgroud)
为什么会Foo.copy丢失参数上的清单以及如何保留它?
如何获得与用户输入相对应的列表.如果我有一个列表如下:
month_lst = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December']
Run Code Online (Sandbox Code Playgroud)
如何输入1作为答案返回"1月"?
input('Enter the number to be converted: ')
Run Code Online (Sandbox Code Playgroud)
此外,输入需要检查列表以确保它在1-12之内,因此输入15将读取错误消息.
python ×4
scala ×3
django ×1
django-urls ×1
django-views ×1
getattr ×1
getattribute ×1
list ×1
manifest ×1
numbers ×1
numpy ×1
oop ×1
pickle ×1
python-3.2 ×1
scipy ×1
slots ×1
sympy ×1
type-erasure ×1