小编Kiv*_*Kiv的帖子

Python中字段的NotImplementedError等效项

在Python 2.x中,当您想要将方法标记为抽象时,您可以像这样定义它:

class Base:
    def foo(self):
        raise NotImplementedError("Subclasses should implement this!")
Run Code Online (Sandbox Code Playgroud)

然后,如果您忘记覆盖它,您会收到一个很好的提醒异常.是否有相同的方法将字段标记为抽象?或者在类docstring中说明它你能做什么?

起初我以为我可以将字段设置为NotImplemented,但是当我查看它的实际内容(丰富的比较)时,它似乎是侮辱性的.

python abstract-class

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

在Python中使用CSV文件的"with"语句

是否可以with直接在CSV文件中使用该语句?能够做这样的事情似乎很自然:

import csv
with csv.reader(open("myfile.csv")) as reader:
    # do things with reader
Run Code Online (Sandbox Code Playgroud)

但是csv.reader没有提供__enter____exit__方法,所以这不起作用.但是,我可以分两步完成:

import csv
with open("myfile.csv") as f:
    reader = csv.reader(f)
    # do things with reader
Run Code Online (Sandbox Code Playgroud)

第二种方式是理想的做法吗?为什么不让csv.reader直接与with语句兼容?

python csv with-statement

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

检查两个字符串是否是Python中彼此的排列

我正在检查是否有两个字符串a并且b是彼此的排列,我想知道在Python中执行此操作的理想方法是什么.从Python的禅宗,"应该有一个 - 最好只有一个 - 显而易见的方式",但我看到至少有两种方式:

sorted(a) == sorted(b)
Run Code Online (Sandbox Code Playgroud)

all(a.count(char) == b.count(char) for char in a)
Run Code Online (Sandbox Code Playgroud)

但是第一个是慢的时候(例如)第一个char a无处可去b,而第二个是实际排列时更慢.

有更好的方法(无论是更多的Pythonic,还是平均更快的意义上)的方式呢?或者我应该从这两个中选择,具体取决于我期望最常见的情况?

python algorithm

19
推荐指数
5
解决办法
2万
查看次数

Java:非静态嵌套类和instance.super()

我很难在Java中围绕非静态嵌套类.请考虑以下示例,其中打印"内部",然后打印"子".

class Outer {
    class Inner {
        Inner() { System.out.println("Inner"); }
    }
}

public class Child extends Outer.Inner {
    Child(Outer o) {
        o.super();
        System.out.println("Child");
    }
    public static void main(String args[]) {
        new Child(new Outer());
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解Inner的实例总是必须与外部实例相关联,并且这也适用于Child,因为它扩展了Inner.我的问题是o.super()语法的含义 - 为什么它会调用Inner构造函数?

我只看到一个普通的super(args)用于调用超类构造函数并super.method()调用重写方法的超类版本,但从来没有形式的东西instance.super().

java inner-classes

17
推荐指数
3
解决办法
4125
查看次数

游戏设计的协同程序?

我听说协同程序是构建游戏的好方法(例如,PEP 342:"协同程序是表达许多算法的自然方式,例如模拟,游戏......")但是我很难包装我的了解这将如何实现.

我从本文中看到,协同程序可以表示状态机中的状态,它们使用调度程序相互转换,但我不清楚这是如何适用于游戏状态根据多个玩家的移动而改变的游戏.

是否有任何使用协同程序编写的游戏的简单示例?或者有人可以提供如何完成的草图吗?

python coroutine

16
推荐指数
3
解决办法
3401
查看次数

Python - 来自管道的简单读取线

我正在尝试从管道中读取线条并处理它们,但我正在做一些愚蠢的事情,我无法弄清楚是什么.生产者将无限期地继续生产生产线,如下所示:

producer.py

import time

while True:
    print 'Data'
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

消费者只需要定期检查线路:

consumer.py

import sys, time
while True:
    line = sys.stdin.readline()
    if line:
        print 'Got data:', line
    else:
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

当我在Windows shell中运行它时python producer.py | python consumer.py,它只是永远睡觉(似乎永远不会得到数据?)似乎问题是生产者永远不会终止,因为如果我发送有限数量的数据然后它工作正常.

如何获取数据并显示给消费者?在实际应用程序中,生产者是一个我无法控制的C++程序.

python pipe producer-consumer

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

将带有通配符的参数传递给Python脚本

我想做这样的事情:

c:\data\> python myscript.py *.csv
Run Code Online (Sandbox Code Playgroud)

并将目录中的所有.csv文件传递给我的python脚本(sys.argv包含["file1.csv", "file2.csv"]等等)

sys.argv只是收到["*.csv"]表明通配符没有扩展,所以这不起作用.

我觉得有一种简单的方法可以做到这一点,但无法在Google上找到它.有任何想法吗?

python windows command-line arguments

14
推荐指数
2
解决办法
7464
查看次数

pandas.DataFrame:.hist() 与 .plot.hist() 方法

pandas.DataFrame0.19有两种方法HIST:

数据框.hist

数据框.plot.hist

起初我以为他们是一样的,但实际上他们采取了不同的论点。是否会在未来的版本中被弃用,每个都有不同的用例,或者故事是什么?

python pandas

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

可以以低优先级运行OpenCL程序("很好")?

我有一个OpenCL Windows程序,可以进行大量的运算,并且很乐意消耗100%的GPU.我希望能够在正常使用计算机的同时在后台运行它,但是现在它会导致相当大的桌面延迟并使任何3d应用程序无法使用.

有没有办法在OpenCL中设置优先级,以便它可以为其他进程提供GPU电源并且只使用备用周期?

windows opencl

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

Pandas惯用的方式来定制fillna

我有以下格式的时间序列数据,其中值表示自上次记录以来的累计量.我想要做的是"传播"包含NaN的过去时期的累积金额,以便输入:

s = pd.Series([0, 0, np.nan, np.nan, 75, np.nan, np.nan, np.nan, np.nan, 50],
              pd.date_range(start="Jan 1 2016", end="Jan 10 2016", freq='D'))

2016-01-01      0.0
2016-01-02      0.0
2016-01-03      NaN
2016-01-04      NaN
2016-01-05     75.0
2016-01-06      NaN
2016-01-07      NaN
2016-01-08      NaN
2016-01-09      NaN
2016-01-10     50.0
Run Code Online (Sandbox Code Playgroud)

成为这个输出:

2016-01-01     0.0
2016-01-02     0.0
2016-01-03    25.0
2016-01-04    25.0
2016-01-05    25.0
2016-01-06    10.0
2016-01-07    10.0
2016-01-08    10.0
2016-01-09    10.0
2016-01-10    10.0
Run Code Online (Sandbox Code Playgroud)

有没有惯用的Pandas方法来做到这一点,而不仅仅是对数据进行for循环?我已经尝试了各种涉及的东西fillna,dropna,isnull,做shift检查下值等,但我看不出如何把拼在一起.

python pandas

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

Prolog - 递归家谱

我正在尝试编写一个Prolog程序,该程序将依次打印出英国版税的男性继承人.我到目前为止的尝试:

son(elizabeth, charles).
son(charles, william).
son(charles, henry).
son(elizabeth, andrew).
son(elizabeth, edward).
son(edward, severn).
successor(X, Y) :- son(X, Y).
successor(X, Y) :- son(X, C), successor(C, Y).
Run Code Online (Sandbox Code Playgroud)

后继功能并不能完全符合我的要求:当前输出为:

successor(elizabeth, Y).
Y = charles ;
Y = andrew ;
Y = edward ;
Y = william ;
Y = henry ;
Y = severn ;
false.
Run Code Online (Sandbox Code Playgroud)

第一个规则使所有三个直接子节点打印出来,然后第二个规则打印出所有后代.但是第一个孩子的后代应该来到第二个直系孩子面前,如下:

successor(elizabeth, Y).
Y = charles ;
Y = william ; % william and henry should come before andrew
Y = henry ;
Y = andrew ; …
Run Code Online (Sandbox Code Playgroud)

tree prolog

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

用于简单纸牌游戏的Python网络库

我正在尝试用Python 实现一个相当简单的纸牌游戏,以便两个玩家可以在互联网上一起玩.我没有使用GUI的问题,但我不知道如何做网络部分的第一件事.到目前为止我找到的几个图书馆:

  • PyRO:看起来不错,似乎通过在各种状态下共享Card对象来很好地解决问题.

  • 扭曲pyglet扭曲:这看起来强大,但复杂的; 我之前使用过Pyglet,所以也许不会太糟糕.

任何人都可以为我的游戏推荐最合适的一个(不一定在这个列表中,我可能错过了很多好的)

python networking

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

Windows XP - 在Python中以编程方式静音/取消静音

我的机器有两个音频输入:一个用于游戏的麦克风,以及一个用于吉他的线路.当使用一个时,重要的是另一个被静音以移除嘶嘶声/静态,所以我希望写一个小脚本来切换哪一个被静音(点击托盘图标,切换到我的输入设备,静音是相当不方便的和取消静音).

我想也许我可以用pywin32做到这一点,但我能找到的一切似乎都特定于设置输出音量而不是输入,而我对win32不太熟悉,甚至不知道在哪里寻找更好的信息.

有人能指出我正确的方向吗?

python windows audio winapi pywin32

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