在Python中,如何将列表转换为*args?
我需要知道因为功能
scikits.timeseries.lib.reportlib.Report.__init__(*args)
Run Code Online (Sandbox Code Playgroud)
想要传递几个time_series对象*args,而我有一个时间序列对象列表.
如果有人能用一个简单的例子说明这一点会有所帮助吗?
此外,在哪里使用parent.frame()而不是parent.env()反之亦然.
我读了关于属性的这个问题noreturn,它用于不返回调用者的函数.
然后我用C做了一个程序.
#include <stdio.h>
#include <stdnoreturn.h>
noreturn void func()
{
printf("noreturn func\n");
}
int main()
{
func();
}
Run Code Online (Sandbox Code Playgroud)
并使用以下代码生成代码的汇编:
.LC0:
.string "func"
func:
pushq %rbp
movq %rsp, %rbp
movl $.LC0, %edi
call puts
nop
popq %rbp
ret // ==> Here function return value.
main:
pushq %rbp
movq %rsp, %rbp
movl $0, %eax
call func
Run Code Online (Sandbox Code Playgroud)
为什么函数func()在提供noreturn属性后返回?
自从我上次编写手臂汇编程序以来已经有一段时间了,我对细节有点生疏.如果我从arm调用C函数,我只需要担心保存r0-r3和lr,对吧?
如果C函数使用任何其他寄存器,它是否负责保存堆栈中的那些并恢复它们?换句话说,编译器会生成代码来为C函数执行此操作.
例如,如果我在汇编程序函数中使用r10,我不必将其值放在堆栈或内存中,并在C调用后弹出/恢复它,是吗?
这是针对arm-eabi-gcc 4.3.0.
我理解语句和表达式之间的区别,我理解Python3将print()转换为函数.
但是我在各种Python2.x解释器上运行了一个用括号括起来的print()语句,它运行完美,我甚至不需要导入任何模块.
我的问题:以下代码print("Hello SO!")是否作为Python2.x中的语句或表达式进行了评估?
现在,我知道这是因为没有调用函数的开销,但是调用函数的开销真的那么重(并且值得让它内联的膨胀)?
根据我的记忆,当一个函数被调用时,比如说f(x,y),x和y被压入堆栈,堆栈指针跳转到一个空块,然后开始执行.我知道这有点过于简单了,但我错过了什么吗?一些推送和跳转来调用一个函数,真的有那么多的开销吗?
如果我忘了什么,请告诉我,谢谢!
该函数memmove定义如下:
void *memmove(void *dest, const void *src, size_t n);
Run Code Online (Sandbox Code Playgroud)
在Linux手册页中,它说:
返回值
memmove()函数返回指向dest的指针.
为什么函数只是定义为void memmove(…)总是返回其中一个输入参数?返回值可以与dest?不同?
或者返回值是否总是dest如此,只是能够以某种创造性的方式组合功能?
通过使用Java Scripting API,我可以在Java中执行JavaScript.但是,有人可以解释我需要添加到此代码中的内容,以便能够调用C中的函数:/Scripts/Jsfunctions.js
import javax.script.*;
public class InvokeScriptFunction {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// JavaScript code in a String
String script1 = (String)"function hello(name) {print ('Hello, ' + name);}";
String script2 = (String)"function getValue(a,b) { if (a===\"Number\") return 1;
else return b;}";
// evaluate script
engine.eval(script1);
engine.eval(script2);
Invocable inv = (Invocable) engine;
inv.invokeFunction("hello", "Scripting!!" ); //This one works.
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一些类似的东西
struct Foo {
void goo() {printf("Test");}
}
external void _ZN3Foo3gooEv(Foo *f);
int main() {
Foo f;
_ZN3Foo3gooEv(&f);
}
Run Code Online (Sandbox Code Playgroud)
是否可以在这里通过函数的名称修改版本调用 Foo::goo() ?
编辑:
作为澄清,这只是一个实验,看看是否可以显式调用名称损坏的函数。这里没有进一步的目标。
我认为所有成员函数基本上都将 this 指针作为它们的第一个参数。
我知道这不会链接,但我不明白为什么。我认为名称修改发生在编译时,当链接器运行时,它会解析对名称修改函数的调用。(这就是为什么我想如果我们将 _ZN3Foo3gooEv 保留为 extern,它会去符号表中查找)。
我在这里误解了什么吗?
我想不出函数调用中多个星号的任何实际用法:
void foo(int a, char b)
{
}
int main(void)
{
(**************foo)(45, 'c');
//or with pointer to function:
void (*ptr)(int, char) = foo;
(******ptr)(32, 'a');
}
Run Code Online (Sandbox Code Playgroud)
为什么在C和C++中都允许这个东西?
function-call ×10
c ×4
c++ ×3
assembly ×2
python ×2
arguments ×1
arm ×1
c11 ×1
compilation ×1
dereference ×1
environment ×1
inline ×1
java ×1
javascript ×1
list ×1
memmove ×1
noreturn ×1
optimization ×1
printing ×1
python-2.x ×1
r ×1
return-value ×1
rhino ×1
stack-frame ×1