小编Jea*_* T.的帖子

第二个较短的压缩 Python 生成器:如何检索静默消耗的元素

我想解析 2 个(可能)不同长度的生成器zip

for el1, el2 in zip(gen1, gen2):
    print(el1, el2)
Run Code Online (Sandbox Code Playgroud)

但是,如果gen2元素较少,gen1则“消耗”一个额外的元素。

例如,

def my_gen(n:int):
    for i in range(n):
        yield i

gen1 = my_gen(10)
gen2 = my_gen(8)

list(zip(gen1, gen2))  # Last tuple is (7, 7)
print(next(gen1))  # printed value is "9" => 8 is missing

gen1 = my_gen(8)
gen2 = my_gen(10)

list(zip(gen1, gen2))  # Last tuple is (7, 7)
print(next(gen2))  # printed value is "8" => OK
Run Code Online (Sandbox Code Playgroud)

显然,缺少一个值(8在我之前的示例中),因为在它意识到没有更多元素之前gen1被读取(从而生成值8) …

python zip generator python-itertools python-3.x

66
推荐指数
7
解决办法
4440
查看次数

如何在python中为类动态创建类方法

如果我定义一个小python程序

class a():
    def _func(self):
        return "asdf"

    # Not sure what to resplace __init__ with so that a.func will return asdf
    def __init__(self, *args, **kwargs):
         setattr(self, 'func', classmethod(self._func))

if __name__ == "__main__":
    a.func
Run Code Online (Sandbox Code Playgroud)

我收到回溯错误

Traceback (most recent call last):
  File "setattr_static.py", line 9, in <module>
    a.func
AttributeError: class a has no attribute 'func'
Run Code Online (Sandbox Code Playgroud)

我想弄清楚的是,如何在不实例化对象的情况下动态地将类方法设置为类?


编辑:

这个问题的答案是

class a():
    pass

def func(cls, some_other_argument):
    return some_other_argument

setattr(a, 'func', classmethod(func))

if __name__ == "__main__":
    print(a.func)
    print(a.func("asdf"))
Run Code Online (Sandbox Code Playgroud)

返回以下输出

<bound method type.func of <class '__main__.a'>> …
Run Code Online (Sandbox Code Playgroud)

python static-methods metaprogramming class setattr

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

用于 google colab 的代码格式化程序,如 nb_black

我知道对于 jupyter notebooks 和 jupyter lab,有可用的代码格式化程序扩展,例如nb_blackblackcellmagic. 但是,当我安装它们时,它似乎不适用于 google colab。

您知道 colab 中是否有任何本机选项或格式化代码的扩展程序(符合 pep8)?

pep8 google-colaboratory python-black

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

Python - 像对象这样的字节是必需的,而不是str

我正在将我的Twitch bot从Python 2.7移植到Python 3.5.我一直收到错误: a bytes like object is required not 'str'在下面的代码的第二行.

twitchdata = irc.recv(1204)
    data = twitchdata.split(":")[1]
    twitchuser = data.split("!")[0]
    twitchmsg = twitchdata.split(":")[2]
    chat = str(twitchuser) +": "+ str(twitchmsg)
    print(chat) #prints chat to console
Run Code Online (Sandbox Code Playgroud)

python irc python-3.x twitch

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

Python模拟keydown

搜索了几个小时后,我想知道是否有可能模拟键盘上的keydown按键.例如,我希望我的程序按住x键五秒钟,所以当我在记事本中运行时,它看起来像是这样的:xxxxxxxxxxxxx.我在互联网上尝试了不同的代码,到目前为止我能找到的最好的东西是:

import ctypes
import time
user32 = ctypes.windll.user32
inputhex = raw_input("Please enter your desired key's code (HEX): ")
keycode = int(inputhex, 16)
time.sleep(1)
#VOID keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, PTR dwExtraInfo);
user32.keybd_event(keycode,0,2,0) #is the code for KEYDOWN
time.sleep(5)
#user32.keybd_event(keycode,0,0,0) #is the code for KEYDUP[/code]
Run Code Online (Sandbox Code Playgroud)

Sendkey模块无法解决我的问题,因为它只允许您发送单个按键而不是保持按键事件.我知道autoit,在过去使用它,但我真的想知道这是否可能与python和如何.PS我正在使用python for windows

python windows keypress keydown simulate

29
推荐指数
4
解决办法
9万
查看次数

Python字符串格式:'%'比'format'函数效率更高?

我想比较不同以在Python中用不同的变量构建一个字符串:

  • 使用+来连接(被称为"加号")
  • 运用 %
  • 运用 "".join(list)
  • 使用format功能
  • 运用 "{0.<attribute>}".format(object)

我比较了3种类型的情景

  • 带2个变量的字符串
  • 4个变量的字符串
  • 带有4个变量的字符串,每个变量两次使

我每次测量100万次操作并且平均执行超过6次测量.我想出了以下时间:

计时

在每个场景中,我得出以下结论

  • 连接似乎是最快的方法之一
  • 使用格式化%比使用format函数格式化要快得多

我相信format%(例如在这个问题中)要好得多,并且%几乎被弃用了.

因此,我有几个问题:

  1. %真的比快format
  2. 如果是这样,为什么呢?
  3. 为什么"{} {}".format(var1, var2)效率更高"{0.attribute1} {0.attribute2}".format(object)

作为参考,我使用以下代码来测量不同的时序.

import time
def timing(f, n, show, *args):
    if show: print f.__name__ + ":\t",
    r = range(n/10)
    t1 = time.clock()
    for i in r:
        f(*args); f(*args); f(*args); f(*args); f(*args); f(*args); f(*args); …
Run Code Online (Sandbox Code Playgroud)

python performance

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

更改StaticText的颜色,wxPython

我需要将StaticText设为红色,我应该使用什么?

wxpython static-text

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

使用minidom.toprettyxml时空行

我一直在使用minidom.toprettyxml来美化我的xml文件.当我创建XML文件并使用这个方法时,所有工作都很好,但是如果我在修改了xml文件之后使用它(例如我添加了一个额外的节点)然后我将它写回XML ,我得到空行,每次我更新它,我越来越空行......

我的代码:

file.write(prettify(xmlRoot))


def prettify(elem):
    rough_string = xml.tostring(elem, 'utf-8') //xml as ElementTree
    reparsed = mini.parseString(rough_string) //mini as minidom
    return reparsed.toprettyxml(indent=" ")
Run Code Online (Sandbox Code Playgroud)

结果:

<?xml version="1.0" ?>
<testsuite errors="0" failures="3" name="TestSet_2013-01-23 14_28_00.510935" skip="0"     tests="3" time="142.695" timestamp="2013-01-23 14:28:00.515460">




    <testcase classname="TC test" name="t1" status="Failed" time="27.013"/>




    <testcase classname="TC test" name="t2" status="Failed" time="78.325"/>


    <testcase classname="TC test" name="t3" status="Failed" time="37.357"/>
</testsuite>
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

谢谢.

python xml pretty-print minidom

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

xlwings 与 openpyxl 阅读 Excel 工作簿之间的差异

我大多只使用 xlwings 打开 ( read-write) 工作簿(因为我阅读的工作簿有复杂的宏)。但是我最近开始使用 openpyxl 打开 ( read-only) 工作簿,因为我需要阅读数千个工作簿来抓取一些数据。

我注意到 xlwings 和 openpyxl 读取工作簿的方式有很大的不同。我相信 xlwings 依赖于pywin32阅读工作簿。当您阅读工作簿时xlwings.Book(<filename>),实际工作簿会打开。我有一种感觉,这是一个结果pywin32

但是,使用openpyxl.load_workbook(<filename>)工作簿时不会出现窗口。我有一种感觉,这是不使用pywin32.

除此之外,我没有进一步了解后端如何为每个库工作。有人可以对此有所了解吗?依赖xlwingspywin32阅读工作簿是否有好处/成本,而openpyxl不是似乎没有使用pywin32

python excel openpyxl xlwings

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

熊猫从列表列中获取唯一值

我如何在 pandas 或 numpy 中获取一列列表的唯一值,以便第二列来自

在此处输入图片说明

会导致'action', 'crime', 'drama'.

我能想出的最接近(但非功能性)的解决方案是:

 genres = data['Genre'].unique()
Run Code Online (Sandbox Code Playgroud)

但这可以预见地导致 TypeError 说明列表如何不可散列。

TypeError: unhashable type: 'list'

Set 似乎是个好主意,但是

genres = data.apply(set(), columns=['Genre'], axis=1)

但也会导致 TypeError: set() takes no keyword arguments

python numpy unique pandas

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