小编Jam*_*lls的帖子

覆盖实例上的特殊方法

我希望有人可以回答这个对Python有深刻理解的:)

请考虑以下代码:

>>> class A(object):
...     pass
...
>>> def __repr__(self):
...     return "A"
...
>>> from types import MethodType
>>> a = A()
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>> setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>>
Run Code Online (Sandbox Code Playgroud)

注意repr(a)如何不产生"A"的预期结果?我想知道为什么会这样,如果有办法实现这个目标......

我对比一下,下面的例子可行(也许是因为我们没有尝试覆盖特殊方法?):

>>> class A(object):
...     def foo(self):
...             return "foo"
...
>>> def bar(self):
...     return "bar"
...
>>> from types import …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming

21
推荐指数
2
解决办法
6259
查看次数

这两个python语句是一样的吗?

我有这两个陈述

return self.getData() if self.getData() else ''
Run Code Online (Sandbox Code Playgroud)

return self.getData() or ''
Run Code Online (Sandbox Code Playgroud)

我想知道它们是相同还是有任何区别

python operators

19
推荐指数
4
解决办法
1512
查看次数

Python:将同一个键的多个实例转换为多行

我正在尝试处理一个看起来或多或少像这样的文件:

f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Python shlex来解析那些没有重大问题的东西:

entry = "f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12"

line = shlex.split(entry)
Run Code Online (Sandbox Code Playgroud)

然后我可以执行for循环并迭代键值对.

row = {}
for kvpairs in line:
    key, value = kvpairs.split("=")
    row.setdefault(key,[]).append(value)
print row
Run Code Online (Sandbox Code Playgroud)

结果是:

{'id': ['1221AB12'], 's': ['Party!'], 'flag': ['urgent', 'english'], 't': ['0523456789', '0301234567'], 'f': ['0412345678']}
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好,但我找不到输出原始行的有效方法,以便输出看起来像:

id=1221AB12 f=0412345678 t=0523456789 s=Party! flag=urgent 
id=1221AB12 f=0412345678 t=0523456789 s=Party! flag=english
id=1221AB12 f=0412345678 t=0301234567 s=Party! flag=urgent 
id=1221AB12 f=0412345678 t=0301234567 s=Party! flag=english
Run Code Online (Sandbox Code Playgroud)

python

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

在类instanciation上导入

我正在创建一个包含多个类的模块.我的问题是这些类中的一些需要导入需要手动编译或需要特定硬件才能工作的非常具体的模块.

没有兴趣预先导入每个特定模块,并且由于某些模块需要特定的硬件才能工作,它甚至可能引发错误.

我想知道是否有可能只在需要时导入这些模块,即实例化一个精确的类,如下所示:

class SpecificClassThatNeedRandomModule(object):
    import randomModule
Run Code Online (Sandbox Code Playgroud)

此外,我不确定这将是一个很好的pythonic方式来做这个技巧,所以我愿意建议一个正确的方法.

python python-2.7

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

使用sed编辑PDF属性

我正在尝试为blender开发一个python脚本,以将渲染的图像序列输出到PDF.我正在使用Imagemagick转换为PDF,该部分工作正常,但是,我希望缩略图预览也包含在PDF中.

PDF格式对我来说有点混乱,但我找到了/PageMode/UseThumbs标签以及如何将它们正确地插入到文件中.我可以手动完成这项工作,效果非常好.但是我一直试图获得类似的结果,而不需要手动完成,毕竟我正在写一个脚本.以下是PDF中标题数据的示例摘录,其中添加了标记:

%PDF-1.3 
1 0 obj
<<
/Pages 2 0 R
/PageMode
/UseThumbs
/Type /Catalog
>>
endobj
2 0 obj
<<
/Type /Pages
/Kids [ 3 0 R 17 0 R 31 0 R ]
/Count 3
>>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用sed在第4行和第5行根据需要插入标签,这也有效,但是当我打开PDF时,图像已损坏.加密地,当我将手动编辑的PDF(未损坏的PDF)与记事本++中的sed编辑的PDF(已损坏的)进行比较时,我可以找到的文件没有区别.有一个不同的字符数,但我找不到差异的位置

我知道PDF有一个偏移的交叉引用表,但我觉得手工做它不会破坏任何东西似乎很奇怪,但用sed做它会造成腐败

我究竟做错了什么?

python pdf sed notepad++ blender

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

什么是'for x in list:'和'for x in list [:]:'之间的区别

我正在关注一本pygame书,这两种符号都会出现:

for x in xs:
    # do something with x

for x in xs[:]:
    # do something with x
Run Code Online (Sandbox Code Playgroud)

它们有相同的含义吗?

python list

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

为用户输入递归调用函数

我正在尝试制作石头剪刀布游戏,并尝试验证输入。

def player1():
    x = (raw_input("please select: Rock(r)/Paper(p)/Scissors(s): ")).lower()
    if x == 'r' or x == 'p' or x == 's' or x == 'rock' or x == 'paper' or x == 'scissors':
        return x[0]
    else:
        print "Error - wrong input!"
        player1() #I know I can run a While loop, but I need to run it this way.

print(player1())
Run Code Online (Sandbox Code Playgroud)

如果我在第一次尝试时输入正确的输入,一切正常。但是如果我第一次输入错误的输入,第二次输入正确的输入,我会得到None输出,而不是 RPS 选项的第一个字母。

我错过了什么?

python recursion input function python-2.7

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

如何获得测试功能的pytest标记的名称?

import pytest
class TestSomething(object):

    @pytest.mark.somethinga
    def test_something(self):
Run Code Online (Sandbox Code Playgroud)

在函数test_something中,我要检查给函数赋予的标记,如果是某某,则该函数的行为与某某不同(例如,某某b)

我认为我应该使用inspect.py(自省),但是我还没有找到如何做的方法。非常感谢你们!

python pytest

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

Python Generator 内存对大量读取的好处?

我想知道 python 生成器在这个用例中的内存优势(如果有的话)。我希望读入一个必须在所有对象之间共享的大文本文件。因为它只需要使用一次,一旦列表用完,程序就会结束,所以我打算使用生成器。

我相信生成器的“保存状态”可以让它跟踪下一个要传递给调用它的对象的值是什么。我读过生成器还可以通过不立即返回所有值而是即时计算它们来节省内存使用量。如果我在这个用例中得到任何好处,我有点困惑。

示例代码:

def bufferedFetch():
    while True:
        buffer = open("bigfile.txt","r").read().split('\n')
        for i in buffer:    
            yield i
Run Code Online (Sandbox Code Playgroud)

考虑到缓冲区无论如何都会读取整个“bigfile.txt”,这不会存储在生成器中,没有内存好处吗?有没有更好的方法来返回可以在所有对象之间共享的列表的下一个值?

谢谢。

python generator

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

python json转储可写性“不可写”

所以这是我的程序的第二个问题,但是一个完全不同的问题,感谢有帮助的人建议 JSON 作为做我想做的更好的方法......

反正...

JSON 取得了一些成功。该程序也更改了主题,我绝对不是要制作游戏,只是获得灵感来了解更多有关 python 中“保存”概念的信息。 .. 但我遇到了另一个问题,当我尝试使用 JSON 的 .dump 方法时它报告了这个错误

错误:

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 32, in <module>
File "/data/data/com.hipipal.qpy3/files/lib/python3.2/python32.zip/json/__init__.py", line 177, in dump
io.UnsupportedOperation: not writable
Run Code Online (Sandbox Code Playgroud)

代码:

import os
import random
import json
with open("/storage/emulated/0/com.hipipal.qpyplus/scripts3/newgame2.txt") as data_file:
    data = json.load(data_file) 
save=data
print(save)
hero=dict(save)
print(hero)
level=int(0) 
job=str("none")
experience=int(0)
strength=int(0)
intelligence=int(0)
dexterity= int(0)
health= int(0)
magic= int(0)
luck= int(0)
if hero["level"]==0:
    level=int(0)
    job=str("none")
    experience=int(0)
    strength=int(0)
    intelligence=int(0)
    dexterity= …
Run Code Online (Sandbox Code Playgroud)

python string tuples stringio python-3.x

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