小编AXO*_*AXO的帖子

为什么`__iter__`在定义为实例变量时不起作用?

如果我__iter__按如下方式定义方法,它将无法工作:

class A:

    def __init__(self):
        self.__iter__ = lambda: iter('text')


for i in A().__iter__():
    print(i)

iter(A())
Run Code Online (Sandbox Code Playgroud)

结果:

t
e
x
t
Traceback (most recent call last):
  File "...\mytest.py", line 10, in <module>
    iter(A())
TypeError: 'A' object is not iterable
Run Code Online (Sandbox Code Playgroud)

如您所见,调用A().__iter__()工作,但A()不可迭代.

但是,如果我__iter__为类定义,那么它将工作:

class A:

    def __init__(self):

        self.__class__.__iter__ = staticmethod(lambda: iter('text'))
        # or:
        # self.__class__.__iter__ = lambda s: iter('text')


for i in A():
    print(i)

iter(A())

# will print:
# t
# e
# x
# …
Run Code Online (Sandbox Code Playgroud)

python iteration iterable

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

使用wxPython从用户那里获取输入

假设我需要raw_input用wxPython对话框替换下面代码中的函数,该对话框要求用户输入并将值返回给程序:

...
x = raw_input("What's your name?")
print 'Your name was', x
...
Run Code Online (Sandbox Code Playgroud)

我只是在寻找一种简单的方法来做到这一点。谢谢

python wxpython user-input raw-input

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

为什么有些字符不能在Python的IDLE中输入?

我不知道如何解释这个,实际上我正在寻找解释,所以我只想提一些步骤来重现这个问题.希望有人能够理解和阐述:

  1. Windows 8.1上的Python 3.5.0.(但无论Python和Windows版本如何,这都应该是可重现的.)
  2. 安装波斯标准键盘.(它可以从这里下载.再次我确定问题不仅限于这个特定的键盘,并且在其他一些语言中有一些字符具有相同的问题.只是为了重现性.)
  3. 打开IDLE,将键盘的布局设置为波斯语并键入一些字符.
  4. 对于某些字符,如'Â'(Shift + h).它们打字非常好.
  5. 对于其他一些角色,比如'ی'(d).它们被转换为类似的字符,在本例中为'ي'(注意字形下的小点).
  6. 有些字符无法输入.例如'﷼'(Shift + 4).这些输入为'?' 在IDLE.
  7. 以上所有字符都可以在我安装的几乎任何其他程序中输入.其中一个最简单的是notepad.exe.
  8. 我们可以在另一个程序中输入相同的字符,例如notepad.exe,然后将它们复制并粘贴到IDLE中.这表明IDLE支持unicode字符,只是不能输入它们.

我是IDLE的粉丝.它是标准Python安装附带的轻量级IDE,我不想因此而切换到另一个IDE.但对于我来说,以上是最讨厌IDLE的事情.每当我需要编写一个包含波斯语字符的程序时,我不能相信IDLE正确输入它们,我必须打开其他程序并使用复制粘贴方法.

我正在寻找的是:

  • 为什么会这样?问题出在哪儿?
  • 有没有解决方法?
  • 与此问题直接相关的任何文档或错误报告.

此信息也可能有所帮助:

>>> import locale
>>> locale.getdefaultlocale()
('en_US', 'cp1256')
>>> locale.getpreferredencoding()
'cp1256'
>>> locale.getlocale()
('English_United States', '1252')
>>> 
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
Run Code Online (Sandbox Code Playgroud)

谢谢.

更新:

请参阅下面的前三条评论.似乎这个问题是由在tkinter应用程序中键入时使用WindowsBestFit映射引起的.

为了测试它是否在python/tkinter绑定或tcl/tk本身中的一些错误配置,我下载并安装了Tkabber.这是一个用Tcl/Tk编写的应用程序.那么,存在完全相同的问题,即我不能输入上面的字符,但可以复制和粘贴它们.所以我的结论是问题的根源在于tcl/tk本身而不是IDLE/Python/tkinter.

我的问题仍然存在.

unicode tk-toolkit tkinter codepages python-idle

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

setup.py:在尝试安装之前需要最新版本的 setuptools

我创建了一个包'typing;python_version<"3.5"'在里面的install_requires。显然,这种依赖规范只在最近版本的setuptools. 如果setuptools用户机器上的 旧的,他们会得到:

'install_requires' 必须是包含有效项目/版本要求说明符的字符串或字符串列表;键入中的预期版本规范;python_version<"3.5" at ;python_version<"3.5"

简单的解决方案是告诉用户pip install 'setuptools>=36.2.1'之前pip install my-package。(请注意,这36.2.1只是我知道的一个版本,不一定是绝对最低要求)

但是有没有什么方法可以指定这个要求setup.py,让它自动完成?添加setuptools>=36.2.1install_requiressetup_requires没有工作。它说Installed /tmp/pip-si2fqg-build/.eggs/setuptools-38.2.5-py3.3.egg然后给出与上面相同的错误。

python setuptools setup.py install-requires

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

git grep &lt;包含换行符的正则表达式&gt;

我正在尝试在 Windows 机器上使用 git bash 的项目中的某些二进制运算符之后grep 所有换行符

尝试了以下不起作用的命令:

$ git grep "[+-*\|%]\ *\n"
fatal: command line, '[+-*\|%]\ *\n': Invalid range end

$ git grep "[+\-*\|%]\ *\n"
fatal: command line, '[+\-*\|%]\ *\n': Invalid range end
Run Code Online (Sandbox Code Playgroud)

好的,我不知道如何在字符集中包含“-”,但是在删除它之后仍然可以从字面上\n匹配字符n

$ git grep "[+*%] *\n"
somefile.py:            self[:] = '|' + name + '='
                                      ^^^
Run Code Online (Sandbox Code Playgroud)

转义反斜杠一次 ( \\n) 无效,转义两次 ( \\\n) 会导致正则表达式匹配\n(字面意思)。

在这里 grep 的正确方法是什么?

regex git git-grep

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