在Python 2.x中,当您想要将方法标记为抽象时,您可以像这样定义它:
class Base:
def foo(self):
raise NotImplementedError("Subclasses should implement this!")
Run Code Online (Sandbox Code Playgroud)
然后,如果您忘记覆盖它,您会收到一个很好的提醒异常.是否有相同的方法将字段标记为抽象?或者在类docstring中说明它你能做什么?
起初我以为我可以将字段设置为NotImplemented,但是当我查看它的实际内容(丰富的比较)时,它似乎是侮辱性的.
是否可以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语句兼容?
我正在检查是否有两个字符串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,还是平均更快的意义上)的方式呢?或者我应该从这两个中选择,具体取决于我期望最常见的情况?
我很难在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()
.
我正在尝试从管道中读取线条并处理它们,但我正在做一些愚蠢的事情,我无法弄清楚是什么.生产者将无限期地继续生产生产线,如下所示:
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++程序.
我想做这样的事情:
c:\data\> python myscript.py *.csv
Run Code Online (Sandbox Code Playgroud)
并将目录中的所有.csv文件传递给我的python脚本(sys.argv
包含["file1.csv", "file2.csv"]
等等)
但sys.argv
只是收到["*.csv"]
表明通配符没有扩展,所以这不起作用.
我觉得有一种简单的方法可以做到这一点,但无法在Google上找到它.有任何想法吗?
在pandas.DataFrame
0.19有两种方法HIST:
起初我以为他们是一样的,但实际上他们采取了不同的论点。是否会在未来的版本中被弃用,每个都有不同的用例,或者故事是什么?
我有一个OpenCL Windows程序,可以进行大量的运算,并且很乐意消耗100%的GPU.我希望能够在正常使用计算机的同时在后台运行它,但是现在它会导致相当大的桌面延迟并使任何3d应用程序无法使用.
有没有办法在OpenCL中设置优先级,以便它可以为其他进程提供GPU电源并且只使用备用周期?
我有以下格式的时间序列数据,其中值表示自上次记录以来的累计量.我想要做的是"传播"包含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
检查下值等,但我看不出如何把拼在一起.
我正在尝试编写一个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) 我正在尝试用Python 实现一个相当简单的纸牌游戏,以便两个玩家可以在互联网上一起玩.我没有使用GUI的问题,但我不知道如何做网络部分的第一件事.到目前为止我找到的几个图书馆:
任何人都可以为我的游戏推荐最合适的一个(不一定在这个列表中,我可能错过了很多好的)