小编The*_*att的帖子

open()中的整数文件描述符"0" - Python 3

在Python 3中,可以使用"整数文件描述符"打开文件对象,格式为:

stdout = open(1, "w")
stdout.write("Hello World") # Prints Hello World
stdout.close()
Run Code Online (Sandbox Code Playgroud)

虽然,有趣的是,我发现这0也是一个有效的流.

如果我把它放在文件中testio.py:

stdout = open(0, "w")
stdout.write("Foo Bar\n")
stdout.close()
Run Code Online (Sandbox Code Playgroud)

然后运行该代码输出是:

bash-3.2$ python3 testio.py
Foo Bar
Run Code Online (Sandbox Code Playgroud)

这似乎就像stdout.然而...

bash-3.2$ python3 testio.py > testio.txt
Foo Bar
bash-3.2$ cat testio.txt
Run Code Online (Sandbox Code Playgroud)

所以看起来这实际上不是stdout,而是其他东西.它似乎也不stderr是:

bash-3.2$ python3 testio.py 2> testio.txt
Foo Bar
bash-3.2$ cat testio.txt
Run Code Online (Sandbox Code Playgroud)

但是,我确实发现输出可以使用0>以下方式重定向:

bash-3.2$ python3 testio.py 0> testio.txt
bash-3.2$ cat testio.txt
Foo Bar
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,究竟到底open(0, "w")应有的是什么?什么是重定向的"0>"流?

Python …

python bash stdout python-3.x python-internals

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

找出是否在IDLE或终端/命令提示符下运行python脚本

有没有办法找出python脚本是否在IDLE解释器或终端中运行?

如果可能,跨平台工作,或者如果每个平台需要不同的方式.

如果可能,使用Python 2和Python 3,或者如果每个版本需要不同的方式.

我能想到的唯一方法是检查为IDLE运行的进程,但我不知道该怎么做.

如果IDLE对另一个脚本打开并且我的脚本在终端中运行,即使我的脚本没有在IDLE中运行,进程检查也会返回true.

我的脚本需要以不同的方式运行,具体取决于它是在IDLE还是终端中运行.

python terminal cross-platform python-idle python-3.x

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

在没有pygame的情况下下载pygame游戏?

这是一个简单的问题.我一直在制作游戏,我希望我的一些朋友能够在线下载.他们必须在那台计算机上安装pygame和python才能下载它.我问的原因是因为我还考虑将它发布给普通观众,如果他们因为没有pygame而无法下载,那么我可能不会得到很多反馈或成功.谢谢.

python pygame

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

Python 方法/函数链

在Python中,是否可以将类方法和函数链接在一起?例如,如果我想实例化一个类对象并调用它影响实例变量状态的方法,我可以这样做吗?这是一个例子:

class Test(object):
    def __init__(self):
        self.x = 'Hello'

    @classmethod
    def make_upper(y):
        y.x = y.x.upper()
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

h = Test().make_upper()

我想实例化一个类对象并在一行代码中影响变量的状态,但我也希望能够将多个可以影响状态或对对象执行其他操作的函数链接在一起。这在 python 中是否可能像在 jQuery 中一样?

python chaining

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

Python 3整数地址

x=300
y=300
print(id(x),id(y))
a=[300,300]
print(id(a[0]),id(a[1]))
Run Code Online (Sandbox Code Playgroud)

在上面的代码执行我得到不同的地址xy,但相同的地址a[0]a[1].谁能告诉我为什么会这样?

python integer python-3.x python-internals

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

C++ 安全高效地将 std::weak_ordering 转换为 int

C++20 引入了一种新的比较类型:std::weak_ordering

它允许表示小于、等于或大于。

然而,一些较旧的函数使用 anint来实现类似的目的。例如qsort,它使用签名

int compar (const void* p1, const void* p2);
Run Code Online (Sandbox Code Playgroud)

如何将std::weak_orderingto转换int为在诸如 之类的函数中使用qsort

下面是一个示例情况:

#include <compare>
#include <iostream>

int main() {
    long a = 2354, b = 1234;
    std::weak_ordering cmp = a <=> b;
    
    if (cmp > 0)  std::cout << "a is greater than b" << std::endl;
    if (cmp == 0) std::cout << "a is equal to b" << std::endl;
    if (cmp < 0)  std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ casting compare c++20

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