在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脚本是否在IDLE解释器或终端中运行?
如果可能,跨平台工作,或者如果每个平台需要不同的方式.
如果可能,使用Python 2和Python 3,或者如果每个版本需要不同的方式.
我能想到的唯一方法是检查为IDLE运行的进程,但我不知道该怎么做.
如果IDLE对另一个脚本打开并且我的脚本在终端中运行,即使我的脚本没有在IDLE中运行,进程检查也会返回true.
我的脚本需要以不同的方式运行,具体取决于它是在IDLE还是终端中运行.
这是一个简单的问题.我一直在制作游戏,我希望我的一些朋友能够在线下载.他们必须在那台计算机上安装pygame和python才能下载它.我问的原因是因为我还考虑将它发布给普通观众,如果他们因为没有pygame而无法下载,那么我可能不会得到很多反馈或成功.谢谢.
在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 中一样?
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)
在上面的代码执行我得到不同的地址x和y,但相同的地址a[0]和a[1].谁能告诉我为什么会这样?
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)