小编2rs*_*2ts的帖子

类构造函数应该返回一个子类吗?

类构造函数应该返回一个子类吗?

这主要是关于OOP风格和python风格的问题.我有问题需要实现一般案例解决方案,出于性能原因,我需要为特定输入类型实现优化解决方案.输入类型取决于用户.目前,我已经通过对一般案例解决方案进行子类化来实现这一目标,以制定优化的解决方案.我想出了以下示例来帮助描述我的意思.

from collections import Counter

class MyCounter(object):
    """General Case Counter"""
    def __init__(self, seq):
        self.seq = seq

    def count(self, key):
        return sum(key == item for item in self.seq)


class OptimizedCounter(MyCounter):
    """Counter optimized for hashable types"""
    def __init__(self, seq):
        self.counter = Counter(seq)

    def count(self, key):
        return self.counter.get(key, 0)

counter = MyCounter(['a', 'a', 'b', [], [0, 1]])
counter.count([0, 1])
# 1

counter = OptimizedCounter(['a', 'a', 'b'])
counter.count('a')
# 2
Run Code Online (Sandbox Code Playgroud)

我的问题是如何设计一个流畅的界面,以便用户获得一个合适的实例,而不必担心它是如何实现的.我考虑过做类似下面的事情,但这对我来说很难看.是否有更规范或OOP的方式来做这样的事情?

class MyCounter(object):
    """General Case Counter"""
    def __new__(cls, seq):
        if hasOnlyHashables(seq):
            return object.__new__(OptimizedCounter) …
Run Code Online (Sandbox Code Playgroud)

python oop coding-style

4
推荐指数
1
解决办法
1257
查看次数

有条件地将两个函数之一应用于一个参数

我有两个函数,一个参数,一个String.我是基于一些应用其中一个或另一个condition.这就是我的尝试:

def foo(s: String) = { ... }
def bar(s: String) = { ... }
(if (condition) foo else bar)("baz")
Run Code Online (Sandbox Code Playgroud)

但我收到这样的错误:

<console>:10: error: missing arguments for method foo;
follow this method with `_' if you want to treat it as a partially applied function
              (if (true) foo else bar)("baz")
                         ^
Run Code Online (Sandbox Code Playgroud)

我试着写作,foo_但当然得到了error: not found: value foo_.在Scala中表达这个成语的正确方法是什么?

scala

4
推荐指数
1
解决办法
1000
查看次数

python中的龟 - 试图让乌龟移动到鼠标点击位置并打印其坐标

我正试图通过Python龟获得鼠标位置.一切正常,除了我不能让乌龟跳到鼠标点击的位置.

import turtle

def startmap(): #the next methods pertain to drawing the map
   screen.bgcolor("#101010")
   screen.title("Welcome, Commadore.")
   screen.setup(1000,600,1,-1)
   screen.setworldcoordinates(0,600,1000,0)
   drawcontinents()    #draws a bunch of stuff, works as it should but not really important to the question
   turtle.pu()
   turtle.onclick(turtle.goto)
   print(turtle.xcor(),turtle.ycor())
   screen.listen()
Run Code Online (Sandbox Code Playgroud)

据我所知,"turtle.onclick(turtle.goto)"这一行应该将乌龟发送到我点击鼠标的地方,但事实并非如此.打印线是一个测试,但它只返回我最后发送的位置,名义上(0,650)虽然这没有重大意义.

我尝试查找教程和pydoc,但到目前为止我还没能成功写出来.

我感谢您的帮助.谢谢.

编辑:我需要乌龟去点击位置(完成),但我还需要它来打印坐标.

python turtle-graphics python-3.x

3
推荐指数
1
解决办法
2万
查看次数

指针,铸造和不同的编译器

我现在正在学习ANSI C编程语言课程并尝试从讲师的幻灯片中运行此代码:

#include<stdio.h>

int main()
{
    int a[5] = {10, 20, 30, 40, 50};
    double *p;

    for (p = (double*)a; p<(double*)(a+5); ((int*)p)++)
    {
        printf("%d",*((int*)p));
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.在MacOS,XCode,Clang上我收到一个错误:"Assignment to cast is illegal, lvalue casts are not supported"在Ubuntu gcc上我得到了下一个错误:"lvalue required as increment operand"

我怀疑这个问题是编译器,因为我们学习了ANCI C,它有自己的要求,可以暴力其他标准.

c gcc pointers casting

3
推荐指数
1
解决办法
1701
查看次数

Python中的回归总结

我对 Python 很陌生。我想得到像 R 中的逻辑回归的摘要。我已经创建了变量 x_train 和 y_train,我正在尝试进行逻辑回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

clf = linear_model.LogisticRegression(C=1e5)
clf.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我得到的是:

LogisticRegression(C=100000.0, class_weight=None, dual=False,
    fit_intercept=True, intercept_scaling=1, max_iter=100,
    multi_class='ovr', n_jobs=1, penalty='l2', random_state=None,
    solver='liblinear', tol=0.0001, verbose=0, warm_start=False)
Run Code Online (Sandbox Code Playgroud)

我想要一个具有重要级别的摘要,R2 ecc。

python matplotlib scikit-learn logistic-regression

3
推荐指数
1
解决办法
2万
查看次数

基于内部对象的值等于外部对象的值来过滤对象数组

我有一些这样的数据:

{
  "foo": "bar",
  "stuff": [
    {
      "foo": "baz"
    },
    {
      "foo": "bar"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想得到与外部对象stuff具有相同值foo的对象.所以在这种情况下我想得到:

{
  "foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)

我该如何使用jq

select json jq

3
推荐指数
1
解决办法
38
查看次数

Pythonians:有没有更好的方法在Python中编写代码?

我是高级PHP和Perl老兄,但Python对我来说是新手.我很开心学习它!我编写了下面的代码,但是我无法摆脱那些具有"高级"Python技能的人更好地编写的感觉.你真正的Python人是一个有趣的挑战吗?

请注意:我希望代码可读.Python被认为是可读的 - 我们不是在这里写人Perl!(例如:我喜欢'工作日'是字符串而不是整数,非常清楚)

import datetime
today = datetime.datetime.now()
weekday = today.strftime("%a")
hourmin = int(today.strftime("%H%M"))
print "today here is: " + today.strftime("%c") # for debug
if weekday == "Sat" or \
   (weekday == "Sun" and hourmin < 2000) or \
   (weekday == "Fri" and hourmin > 1630) or \
   (hourmin >= 1630 and hourmin < 2000) :
    print "bad time"
else:
    print "good time"
Run Code Online (Sandbox Code Playgroud)

python datetime readability

2
推荐指数
1
解决办法
306
查看次数

python中“~”和“&amp;=”符号的含义是什么?

我在一个python组里看到了这样的内容:

>> bookStyle = aui.AUI_NB_DEFAULT_STYLE
>> bookStyle &= ~(aui.AUI_NB_CLOSE_ON_ACTIVE_TAB)
Run Code Online (Sandbox Code Playgroud)

你能解释一下第二个说法吗?做什么&=~做什么?

python notation

2
推荐指数
1
解决办法
191
查看次数

如果另一个子值匹配,则获取子值

我有一个需要从 shell 解析的 XML 文件。它看起来有点像这样:

<?xml version="1.0" encoding="UTF-8"?>
<things>
    <thing>
        <foo>123</foo>
        <bar>false</bar>
    </thing>
    <thing>
        <bar>true</bar>
        <foo>abc</foo>
    </thing>
</things>
Run Code Online (Sandbox Code Playgroud)

请注意,things的子节点的顺序是任意的。在我的真实数据中,每个thing.

现在, 的值foo是唯一的。我需要的子节点的值barthing其子foo的价值,比如说,abc。我尝试使用 XPath 查询,xmllint但没有运气。我找不到火柴;或者,如果我只是用更一般的查询进行测试,我会得到整个树。

$ xmllint --pattern //thing[foo='abc']/bar test.xml
xmllint: No match.
$ xmllint --pattern //thing/bar test.xml
(the whole tree)
Run Code Online (Sandbox Code Playgroud)

我希望只是得到true

我究竟做错了什么?我无法访问--xpath其他问题提到的标志,所以如果这是答案,那么我就不走运了。

xml xpath xmllint

2
推荐指数
1
解决办法
1372
查看次数

Python - 生成string.ascii_lowercase的紊乱

我在网上找到了一些算法来生成Python中的紊乱,但它们都是复杂的指数,因此我不能让它们与一组26个元素(字母表)汇聚!

所以我试图找到一种方法来改进以下代码(源代码在这里):

def derangement(vs):
    l = [None for x in vs]
    sol = set()
    sol.add(tuple(l))
    for v in vs:
        sol1 = set()
        for s in sol:
            for (i, v1) in enumerate(s):
                if not v1 and v != vs[i]:
                    s1 = list(s)
                    s1[i] = v
                    sol1.add(tuple(s1))
        sol = sol1
    return list(sol)
Run Code Online (Sandbox Code Playgroud)

如果有人好奇这是一个强力替代密码求解器.我想看看破解密码需要多长时间!

python encryption cryptography brute-force

1
推荐指数
1
解决办法
1042
查看次数