小编Rel*_*roC的帖子

Python - 对继承感到困惑

我用3个类编写测试代码,并使用Chain of Responsibility设计模式,下面的代码

我打印print(c._abc is b._abc),答案是真的,但我原来认为两者是不同的.

然后,在第2轮,我取消注释self._abc = kwargs并评论其他3行,答案变为False.

为什么会这样?

import abc

class A:
    __metaclass__ = abc.ABCMeta

    _abc = {}

    def __init__(self,successor=None,**kwargs):
        self._successor = successor

    @abc.abstractmethod
    def handlerRequest(self):
        pass

class B(A):

    def __init__(self,successor=None,**kwargs):
        self._successor = successor
        print(kwargs)
        # self._abc = kwargs                 # round 2<---uncomment here
        self._abc['a'] = kwargs['a']         # round 2<---comment here
        self._abc['b'] = kwargs['b']         # round 2<---comment here
        self._abc['Hello'] = 'World'         # round 2<---comment here

    def handlerRequest(self):
        if (self._successor is not None):
            self._successor.handlerRequest()

        print(self._abc)

class …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

[Pandas]如何在每个组中获得前n%的记录

这是我的dataFrame

df = pd.DataFrame([['@1','A',40],['@2','A',60],['@3','A',47],['@4','B',33],['@5','B',69],['@6','B',22],['@7','B',90],['@8
','C',31],['@9','C',78],['@10','C',12],['@11','C',89],['@12','C',88],['@13','C',99]],columns=['id','channel','score'])

     id channel  score
0    @1       A     40
1    @2       A     60
2    @3       A     47
3    @4       B     33
4    @5       B     69
5    @6       B     22
6    @7       B     90
7    @8       C     31
8    @9       C     78
9   @10       C     12
10  @11       C     89
11  @12       C     88
12  @13       C     99
Run Code Online (Sandbox Code Playgroud)

每个频道都有自己的总数,我设置百分比= 80%

我想取int(channel'num*0.8)nlargest,所以它会

A channel take int(3*0.8) = 2
B channel take int(4*0.8) = 3
C channel take int(6*0.8) = …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何从PyQt正确执行多处理?

我创建一个按钮,并在单击按钮时尝试运行多处理,

但是UI被阻止了.我希望进程能够在backgorund中运行.

我该如何解决?

from PySide2 import QtCore,QtGui,QtWidgets
import sys
import multiprocessing
from threading import Timer
class TTT(multiprocessing.Process):
    def __init__(self):
        super(TTT, self).__init__()
        self.daemon = True
    def run(self):
        while True:
            t = Timer(5, self.doSomething)
            t.start()
            t.join()

    def doSomething(self):
        try:
            print('123')
        except Exception as e:
            print(e)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        btn = QtWidgets.QPushButton('run process')
        btn.clicked.connect(self.create_process)
        self.setCentralWidget(btn)

    def create_process(self):
        QtWidgets.QMessageBox.information(self,'hhh','hhh')
        t = TTT()
        t.start()
        t.join()

if __name__=="__main__":
    app=QtWidgets.QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

python - 如何正确使用 asyncio 并使用 pandas 读取 csv

我的路径中有很多csv文件,我希望使用pandas read_csv来读取,然后使用pandas.concat合并所有返回的dataframe,

但我认为我没有正确使用asyncio,因为消耗的时间并没有缩短。

import asyncio
import time
import pandas as pd
import glob2
import os

async def read_csv(filename):
    df = pd.read_csv(filename, header=None)
    return df
t = time.time()
path = r'C:\LRM_STGY_REPO\IB_IN'

tasks = [asyncio.ensure_future(read_csv(i)) for i in list(glob2.iglob(os.path.join(path, "*.txt")))]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

df = pd.concat([t.result() for t in tasks],ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))

t = time.time()
def read_csv2(filename):
    return pd.read_csv(filename, header=None)
df = pd.concat(map(read_csv2,glob2.iglob(os.path.join(path, "*.txt"))),ignore_index=True)
# print(df)
print( '%.4f' %(time.time()-t))
Run Code Online (Sandbox Code Playgroud)

read_csv 和 read_csv2 的消耗时间相似。

或者还有其他方法来减少连接时间。

python

5
推荐指数
0
解决办法
2482
查看次数

python - 快速搜索列表中的dict

我在列表中有很多字典,如下所示:

mylist = [{'name': 'Delivered-To', 'value': '123'},
          {'name': 'Received', 'value': 'abc'},
          {'name': 'Payload', 'value': 'xxxxxx'}]
Run Code Online (Sandbox Code Playgroud)

如何快速获取name的值是一个参数.

例如:如果我希望得到名字是'收到',并获得字典:

{'name': 'Received', 'value': 'abc'}
Run Code Online (Sandbox Code Playgroud)

python dictionary list

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

标签 统计

python ×5

dictionary ×1

list ×1

multiprocessing ×1

pandas ×1

python-3.x ×1