是否有语法允许您将列表扩展为函数调用的参数?
例:
# Trivial example function, not meant to do anything useful.
def foo(x,y,z):
return "%d, %d, %d" %(x,y,z)
# List of values that I want to pass into foo.
values = [1,2,3]
# I want to do something like this, and get the result "1, 2, 3":
foo( values.howDoYouExpandMe() )
Run Code Online (Sandbox Code Playgroud) 在python中,是否有内置的方法在字符串上执行readline()?我有大量的数据,并且想要剥离第一对没有在整个字符串上执行split()的几行.
假设的例子:
def handleMessage(msg):
headerTo = msg.readline()
headerFrom= msg.readline()
sendMessage(headerTo,headerFrom,msg)
msg = "Bob Smith\nJane Doe\nJane,\nPlease order more widgets\nThanks,\nBob\n"
handleMessage(msg)
Run Code Online (Sandbox Code Playgroud)
我希望这导致:
sendMessage("Bob Smith", "Jane Doe", "Jane,\nPlease order...")
我知道编写一个这样做的类会很容易,但是如果可能的话,我正在寻找内置的东西.
编辑:Python v2.7
我期待这段简单的代码
printf("foo\b\tbar\n");
Run Code Online (Sandbox Code Playgroud)
用"\ t"替换"o"并产生以下输出
fo bar
Run Code Online (Sandbox Code Playgroud)
(假设每8个字符发生制表位).相反,我得到了
foo bar
Run Code Online (Sandbox Code Playgroud)
似乎我的shell将\ b解释为"将游标移回一个位置"并将\ t解释为"将光标移动到下一个制表位".这种行为是否特定于我正在运行代码的shell?我应该期望不同系统有不同的行为吗?
我在Python中编写了一个简单的上下文管理器来处理单元测试(并尝试学习上下文管理器):
class TestContext(object):
test_count=1
def __init__(self):
self.test_number = TestContext.test_count
TestContext.test_count += 1
def __enter__(self):
pass
def __exit__(self, exc_type, exc_value, exc_traceback):
if exc_value == None:
print 'Test %d passed' %self.test_number
else:
print 'Test %d failed: %s' %(self.test_number, exc_value)
return True
Run Code Online (Sandbox Code Playgroud)
如果我按如下方式编写测试,一切正常.
test = TestContext()
with test:
print 'running test %d....' %test.test_number
raise Exception('this test failed')
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用... as,我不会获得对TestContext()对象的引用.运行这个:
with TestContext() as t:
print t.test_number
Run Code Online (Sandbox Code Playgroud)
引发异常'NoneType' object has no attribute 'test_number'.
我哪里错了?
究竟问题是什么.在C++中,理想情况下是11,但是对于14及更高版本也很好奇,有一个简写语法:
std::mutex someMutex;
std::lock_guard<std::mutex> lg(someMutex);
Run Code Online (Sandbox Code Playgroud)
理想情况下,如果我想要更改为a,则可以推断出互斥体的类型以避免重构std::recursive_mutex.
换句话说,一种方法:
std::mutex someMutex;
std::lock_guard lg(someMutex);
Run Code Online (Sandbox Code Playgroud)
要么
auto lg = make_lock_guard(someMutex);
Run Code Online (Sandbox Code Playgroud)
对于现代C++的所有类型演绎功能,std::lock_guard<std::mutex>每次我想制作一个类型时,进行打字似乎都是多余的.
什么是普通的纯javascript(即不是JQuery)将参数传递给匿名onreadystatechange回调的方法?
例如:
function doRequest(){
/* Get an XMLHttpRequest in a platform independent way */
var xhttp = getXmlHttpRequestObject();
var msg="show this message when done"; /* another variable to pass into callback */
/* How do I pass 'msg' and 'xhttp' into this anonymous function as locals
named 'x' and 'm'??? */
xhttp.onreadychangestate=function(x,m)
{
if( x.readyState == 4 )
{
alert(m);
}
}
/* do the open() and send() calls here.... */
}
Run Code Online (Sandbox Code Playgroud) 看来,当我使用html表单制作"Content-Type:multipart/form-data"POST请求时,这些字段始终按照HTML中列出的顺序显示.在实践中,所有浏览器都这样做吗?
希望了解这一点的主要动机是,我可以对表单数据进行服务器端验证,而不需要将整个 HTTP请求缓存在RAM中.磁盘第一.
我知道CGI,PHP等通常不会做任何事情直到上传完成.可能是因为RFC 2388第5.5节通过说订单没有定义来解决这个问题.我正在使用高度自定义的thttpd分支,并处理内置于服务器内置的C代码.所以我不关心大多数服务器做什么.
我想知道的是,如果我走出困境并下订单,我会被这个假设烧掉吗?
以此表格为例:
<form id="formUpload"
target = "uploadTarget"
method = "post"
action = "/bin/upload"
enctype= "multipart/form-data" >
<input type="hidden" id="inUser" name="user" />
<input type="hidden" id="inDest" name="dest"/>
<input type="file" id="inFile" name="file" />
<input type="button" value="Upload" onclick="uploadFile();" />
<iframe id="uploadTarget" name="uploadTarget" src="" style="width:0;height:0;border:0px"/>
</form>
Run Code Online (Sandbox Code Playgroud)
'uploadFile()'函数将在调用submit()之前填写user和dest字段.我想recv()在整个HTTP请求体之前验证用户和dest服务器端.
在C中,我正在研究一个管理字节缓冲区的"类",允许将任意数据附加到结尾.我现在正在调查自动调整大小,因为底层数组使用调用填充realloc.这对任何使用过Java或C#的人都有意义StringBuilder.我知道如何调整大小.但是,没有任何人有任何建议,与理规定,关于有多少成长与每个调整缓冲区?
显然,在浪费的空间和过多的realloc调用之间存在折衷(这可能导致过度复制).我已经看过一些建议加倍的教程/文章.如果用户设法提供良好的初始猜测,这似乎是浪费.是否值得尝试在平台上舍入到两个或多个对齐大小的幂?
有没有人知道Java或C#在幕后做了什么?
我有一个库函数(用C编写),通过写输出来生成文本FILE *.我想在Python(2.7.x)中使用创建临时文件或管道的代码将其包装,将其传递给函数,从文件中读取结果,并将其作为Python字符串返回.
这是一个简化的例子来说明我的目标:
/* Library function */
void write_numbers(FILE * f, int arg1, int arg2)
{
fprintf(f, "%d %d\n", arg1, arg2);
}
Run Code Online (Sandbox Code Playgroud)
Python包装器:
from ctypes import *
mylib = CDLL('mylib.so')
def write_numbers( a, b ):
rd, wr = os.pipe()
write_fp = MAGIC_HERE(wr)
mylib.write_numbers(write_fp, a, b)
os.close(wr)
read_file = os.fdopen(rd)
res = read_file.read()
read_file.close()
return res
#Should result in '1 2\n' being printed.
print write_numbers(1,2)
Run Code Online (Sandbox Code Playgroud)
我想知道我最好的选择是什么MAGIC_HERE().
我很想使用ctypes并创建一个libc.fdopen()返回Python c_void_t 的包装器,然后将其传递给库函数.我觉得理论上应该是安全的 - 只是想知道这种方法是否存在问题,或者现有的Python主题是否存在解决这个问题的问题.
此外,这将进入一个长期运行的过程(让我们假设"永远"),所以任何泄露的文件描述符将是有问题的.
我正在使用STR32(Cortex-M3)上的FreeRTOS,并使用ST的CMSIS库来引导所有内容.
CMSIS库SVC_Handler在启动".s"文件中定义弱符号.必须在某处重写它才能将ISR置于中断向量表中.FreeRTOS定义vPortSVCHandler,这是我想要处理SVC中断的ISR.
我想使用我的应用程序代码(即没有修改FreeRTOS或CMSIS源代码)将两者"粘合"在一起.我认为别名是工作的正确工具,所以我尝试了这个(在一个单独的源文件main.c中):
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
Run Code Online (Sandbox Code Playgroud)
这导致: error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'
事实证明,根据GCC文档http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html,为了使用该alias属性,您不能在翻译单元之外别名.所以我想我会尝试extern将符号转换为main.c,如下所示:
extern void vPortSVCHandler( void ) __attribute__ (( naked ));
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
Run Code Online (Sandbox Code Playgroud)
这会产生相同的错误.有什么建议???
我真的想避免修改任何一个库.我知道我可以编写一个SVC_Handler简单调用的函数vPortSVCHandler,但这可能会给ISR增加不必要的开销(可能取决于优化设置).注意:FreeRTOS示例通过自定义启动文件实现此目的.我正在寻找一种方法来从C 或我的链接器脚本执行此操作.