我在Tkinter中放入了一个部分透明的PNG图像,我得到的就是这个
替代文字http://i26.tinypic.com/aelh82.jpg
如何使右侧的黑色三角形清晰?(就像它应该的那样)
这是Windows 7上的python 2.6,顺便说一句.
我试图SIGINT在Python 2.7程序中捕获(或键盘中断).这就是我的Python测试脚本的test外观:
#!/usr/bin/python
import time
try:
time.sleep(100)
except KeyboardInterrupt:
pass
except:
print "error"
Run Code Online (Sandbox Code Playgroud)
接下来我有一个shell脚本test.sh:
./test & pid=$!
sleep 1
kill -s 2 $pid
Run Code Online (Sandbox Code Playgroud)
当我使用bash或sh或其他东西运行脚本时,bash test.shPython进程test保持运行并且无法使用SIGINT.而当我复制test.sh命令并将其粘贴到(bash)终端时,Python进程test将关闭.
我不知道发生了什么,我想了解.那么,差异在哪里,为什么?
这不是关于如何捕获SIGINTPython!根据文档 - 这是应该工作的方式:
Python默认安装少量信号处理程序:SIGPIPE ...和SIGINT转换为KeyboardInterrupt异常
这的确是追赶KeyboardInterrupt时SIGINT被发送kill,如果该程序是由外壳直接启动,但是当程序从后台运行bash脚本开始,似乎KeyboardInterrupt永远不会提高.
我无法解释这个程序的执行行为:
#include <string>
#include <cstdlib>
#include <stdio.h>
typedef char u8;
typedef unsigned short u16;
size_t f(u8 *keyc, size_t len)
{
u16 *key2 = (u16 *) (keyc + 1);
size_t hash = len;
len = len / 2;
for (size_t i = 0; i < len; ++i)
hash += key2[i];
return hash;
}
int main()
{
srand(time(NULL));
size_t len;
scanf("%lu", &len);
u8 x[len];
for (size_t i = 0; i < len; i++)
x[i] = rand();
printf("out %lu\n", f(x, len));
}
Run Code Online (Sandbox Code Playgroud)
因此,当使用带有gcc的-O3编译并使用参数25运行时,它会引发段错误.没有优化它工作正常.我已经对它进行了反汇编:它正在进行矢量化,并且编译器假定 …
我看到人们经常编写C代码,例如:
char *ptr = malloc(sizeof(char)*256);
Run Code Online (Sandbox Code Playgroud)
这真的有必要吗?标准说,sizeof(char)==1根据定义,只写这样有意义:
char *ptr = malloc(256);
Run Code Online (Sandbox Code Playgroud)
谢谢,Boda Cydo.
可能重复:
我们可以给静态数组的大小一个变量
我在其中一个子文件中定义一个数组,如下所示.
static int arr[siz];
Run Code Online (Sandbox Code Playgroud)
这siz是子文件可用的全局变量.但是gcc编译器会产生以下错误:
<filename>: <line_num> : error : storage size of ‘arr’ isn’t constant
Run Code Online (Sandbox Code Playgroud)
为什么我不能定义一个static可变大小的数组?
编辑:这似乎只是static int类型的问题.如果我将变量类型arrfrom 更改static int为int,则错误消失,即使数组的大小仍依赖于变量siz.
可能重复:
如何在C中将函数作为参数传递?
假设我有一个叫做的函数
void funct2(int a) {
}
void funct(int a, (void)(*funct2)(int a)) {
;
}
Run Code Online (Sandbox Code Playgroud)
调用此函数的正确方法是什么?我需要设置什么才能让它工作?
如果dir()在CPython 3.4上对某些内置可调用对象(类构造函数,方法等)进行处理,则会发现其中许多通常具有一个特殊属性__text_signature__,例如:
>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None
Run Code Online (Sandbox Code Playgroud)
但是,此文档不存在.此外,谷歌搜索属性名称表明还有另一个可能的特殊属性__signature__,但我没有找到任何内置函数.
我知道它们与函数参数签名有关,但除此之外,它们的值表示什么以及它们的用途是什么?
我找到了一些有趣的东西,这里有一段代码:
class A(object):
def __init__(self):
print "A init"
def __del__(self):
print "A del"
class B(object):
a = A()
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,我会得到:
A init
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改class B(object)到class B(),我会得到:
A init
A del
Run Code Online (Sandbox Code Playgroud)
我在__del__ doc中找到了一个注释:
无法保证为解释器退出时仍然存在的对象调用del()方法.
然后,我想这是因为当解释器存在时B.a仍然引用(由类引用B).
所以,我del B在解释器手动存在之前添加了一个,然后我发现它a.__del__()被调用了.
现在,我对此感到有些困惑.为什么a.__del__()在使用旧样式时调用?为什么新旧风格的行为有不同的行为?
我在这里发现了类似的问题,但我认为答案还不够明确.
我的磁盘上有几个虚拟环境(几十个),由venvPython 3.6 模块制作。现在我匆忙升级到 Ubuntu 19.10,后来才注意到 Ubuntu 19.10 根本不可用 3.6 从公认的来源。通过定位在我的主目录下并在包含的文件夹上运行,我设法升级了这些虚拟环境的Python 版本。bin/python3python3.7 -mvenv --upgrade
现在,虽然python3.7 -mvenv --upgrade在虚拟环境中升级 Python,但lib/python3.7/site-packages在venv. 我想我可以通过安装Python 3.6,已经这样做了pip freeze荷兰国际集团从需求venv,然后VENV升级到Python 3.7,pip install -r荷兰国际集团-只要有Python的3.6安装可用于我的新的操作系统。
有没有其他方法可以以相当自动化的方式(也许主要是pip freeze使用旧lib/python3.6目录)来做到这一点,而我不必从源代码安装 Python 3.6、使用 conda 或从一些随机 PPA 安装 3.6?我想整体升级所有环境,以便将来当我需要对随机环境执行某些操作时,它将继续使用 Python 3.7。
我已经查看了ANSI转义码,但看起来只支持下划线.
我想念一些东西还是有其他选择?
如果不可能,那么"这是否已被弃用"的含义是否相同?
python ×5
c ×3
gcc ×2
python-3.x ×2
ansi-escape ×1
arrays ×1
bash ×1
c++ ×1
console ×1
malloc ×1
png ×1
pointers ×1
python-2.x ×1
python-3.4 ×1
python-venv ×1
shell ×1
sigint ×1
signature ×1
sizeof ×1
static ×1
terminal ×1
text ×1
tkinter ×1
transparency ×1