为什么这样呢
l = [1,2,3]
l += 4,5,6
Run Code Online (Sandbox Code Playgroud)
工作,而这
l = [1,2,3] + (4,)
Run Code Online (Sandbox Code Playgroud)
才不是?
如果我尝试第二个,我得到一个TypeError: can only concatenate list (not "tuple") to list
,这是有道理的.
但第一个版本应该做同样的事情.在第二行中,4,5,6
应该创建一个元组,如下例所示:
>>> t = 4,5,6
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
创建元组后,+ =应该只添加到列表中l
.所以这里也应该抛出某种错误,但事实并非如此.
有谁知道这里发生了什么?
这种行为在Python 2.7.11和Python 3.5.1之间是一致的.
我在这里得到了另一个问题的答案:
这是一个很好的答案,但我不了解有关引用的一点.我可以做SQL语句,但我从未使用过引用.
在我目前的项目中,我有一个Web服务器,它调用Linux命令来获取随后显示在网站上的信息.我遇到的问题是网络服务器运行在一个微型嵌入式设备上(它基本上是设备的配置工具),只有256 MB的RAM.网络服务器本身确实占用了我在该设备上的一半以上的空闲RAM.
现在,当我尝试使用subprocess.check_output()来调用命令时,fork很快就会使RAM使用率增加一倍(因为它根据我的理解克隆了父进程或其他内容),从而使整个内容崩溃"内存不足" "虽然被叫过程非常微小.
由于该设备使用非常便宜的闪存芯片,如果过度使用已证明失败,我不想使用任何基于增加虚拟内存的交换解决方案或其他解决方案.
到目前为止我尝试做的是在程序开始时打开一个sh会话,当时内存使用率仍然很低,然后将命令写入该sh会话并读取输出.这种方法有效,但它非常不稳定,因为错误的"退出"或类似的东西会导致整个事情崩溃.
有没有类似于subprocess.check_output()的解决方案,它不会使我的内存使用量增加一倍?
我正在一个带有很少 RAM(只有 256 MB)的嵌入式 Linux 设备上构建一个网络服务器。该网络服务器应该能够使用 发出 shell 命令subprocess.check_output
,但是由于每个check_output
似乎都需要与父进程消耗的 RAM 一样多的可用 RAM,因此当 Python 仍然没有消耗太多内存时,我正在使用多处理在开始时创建第二个进程。然后,此进程使用 amultiprocessing.Queue
从主进程接收命令,执行它们并使用另一个 返回输出multiprocessing.Queue
。这曾经有效,但我似乎有某种竞争条件导致整个事情陷入困境。
这是我复制问题的最小测试用例:
# shwrapper.py
from multiprocessing import Process, Queue
def f(iq,oq):
oq.put("Ready")
while True:
oq.put(iq.get()+" out")
def init():
iq = Queue()
oq = Queue()
p = Process(target=f, args=(iq,oq,))
p.start()
print oq.get()
iq.put("test")
print(oq.get())
init()
Run Code Online (Sandbox Code Playgroud)
如果我尝试导入它,我会得到这个结果:
>>> import shwrapper
Ready
Run Code Online (Sandbox Code Playgroud)
在这里它卡住了。现在我发出一个KeyboardInterrupt:
^CProcess Process-1:
Traceback (most recent call last):
File "/usr/lib/python27.zip/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud) shell_exec("touch /Users/Nerses/Downloads/ads.txt 2>&1")
我有PHP exec(shel_exec)函数的问题.它说我没有执行命令的权限.
我该如何打开这些权限?
我想在我的html页面中设置背景图像.
所以我有这个代码:
body{
background: url("background_image.jpg") no-repeat scroll center center / 100% auto;
}
Run Code Online (Sandbox Code Playgroud)
这是我的HTML页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link type="text/css" rel="stylesheet" href="css/style.css" />
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
因此,使用此代码,背景图像不会填满屏幕.
我想以全宽和高度显示图像
我在预处理器语句中定义了一个数组,如下所示:
#define myArray {0,1,2,3}
Run Code Online (Sandbox Code Playgroud)
当我尝试从该数组获取值而不先将其实际分配给变量时,如下所示:
myArray[0];
Run Code Online (Sandbox Code Playgroud)
编译器抱怨并且不允许我这样做。
这可能是,因为这也不起作用:
{0,1,2,3}[0]
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我不想使用多个#define
语句,也不想先将数组分配给内存中的变量。
语境
我想为开源微控制器项目实现一个补丁。RAM空间是有限的,并且这里的整个数据流是静态的。
我想遵循配置文件中的代码风格,它使用了很多像上面这样的数组定义。
另一方面,当可以直接完成时,我不想为无用的变量浪费 RAM 空间。
python ×2
arrays ×1
c ×1
css ×1
exec ×1
foreign-keys ×1
html ×1
linux ×1
list ×1
memory ×1
mysql ×1
php ×1
python-2.7 ×1
queue ×1
shell-exec ×1
sql ×1
subprocess ×1