为什么Python 3允许"00"作为0的文字而不允许"01"作为1的文字?有充分的理由吗?这种不一致令我感到困惑.(我们正在讨论Python 3,它故意破坏向后兼容性以实现一致性等目标.)
例如:
>>> from datetime import time
>>> time(16, 00)
datetime.time(16, 0)
>>> time(16, 01)
File "<stdin>", line 1
time(16, 01)
^
SyntaxError: invalid token
>>>
Run Code Online (Sandbox Code Playgroud) 在Python 3.4+中,我们可以做到
class Foo(abc.ABC):
...
Run Code Online (Sandbox Code Playgroud)
或者我们可以做到
class Foo(metaclass=abc.ABCMeta):
...
Run Code Online (Sandbox Code Playgroud)
我应该注意两者之间是否有任何差异?
我正在使用Python 3(最近从Python 2切换).我的代码通常在Linux上运行,但有时(不常见)在Windows上运行.根据Python 3文档open(),locale.getpreferredencoding()如果encoding未提供arg,则文本文件的默认编码来自.我希望这个默认值适用于我utf-8的项目,无论它运行的是什么操作系统(目前,它始终是Linux的UTF-8,但不适用于Windows).该项目有很多次调用open(),我不想添加encoding='utf-8'到所有这些调用.因此,我想在Windows中更改区域设置的首选编码,就像Python 3看到的那样.
我发现了之前的问题" 更改"区域设置首选编码" ",它有一个已接受的答案,所以我觉得我很高兴.但不幸的是,该答案中的建议命令及其第一条评论都不适用于Windows.具体而言,公认的答案和它的第一个意见建议运行chcp 65001和set PYTHONIOENCODING=UTF-8,我都试过.请从我的cmd窗口查看下面的脚本:
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> chcp 65001
Active code page: 65001
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> set PYTHONIOENCODING=UTF-8
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> …Run Code Online (Sandbox Code Playgroud) 我正在编写一个接收文件对象的函数,例如
def my_fn(file_obj):
assert <what expression here?>, "file_obj must be opened with newline=''."
...
Run Code Online (Sandbox Code Playgroud)
我想在函数中做的第一件事就是确保传入的文件对象是用它打开的newline=''.我该怎么做呢?谢谢.
PS.我相信这个问题仅适用于Python 3,因为newline=''它只存在于Python 3中(注意它与默认值不同newline=None).
我正在输出到终端,但是Git没有正确地检测到我正在输出到终端,以便为输出着色.我的问题是,当git-config(1)表示"仅在输出到终端时才使用颜色"时,git-config(1)的含义是什么(此短语出现在多个配置描述的末尾,例如color.ui和color .科)?换句话说,Git如何决定它是否输出到终端,以及如何更改我的环境设置以告知Git我的终端确实是终端?
细节:
我在Windows上使用带有Cygwin的rxvt终端.我也安装了MSysGit.当我进行Git配置设置时:
[color]
ui = auto
branch = auto
status = auto
Run Code Online (Sandbox Code Playgroud)
我的终端输出中仍然没有颜色.但是,当我切换到
[color]
ui = always
branch = always
status = always
Run Code Online (Sandbox Code Playgroud)
然后有正确的彩色输出.但是,为了正确处理实际的非终端案例,我需要切换回"auto"而不是"always".因此,为了使"自动"正常工作:如何更改我的环境以使Git认识到我的rxvt + Cygwin是一个能够支持颜色的终端?
(PS.由于比这个相对较小的颜色问题更大的问题,我不能使用Cygwin版本的Git.请不要回复告诉我切换到Cygwin版本.)
谢谢你的帮助!
次要问题:我不明白为什么Python的namedtuple类型具有_make()函数。据我所知,如果T是使用namedtuple创建的类型,那么
T._make(iterable) and T(* iterable)
Run Code Online (Sandbox Code Playgroud)
是同一回事。那么为什么要使用_make()函数呢?有什么我想念的吗?
python ×5
python-3.x ×4
cygwin ×1
encoding ×1
git ×1
git-config ×1
integer ×1
leading-zero ×1
literals ×1
msysgit ×1
namedtuple ×1
rxvt ×1
utf-8 ×1
windows ×1