三行代码实现python版本的sprintf函数

 sprintf是c语言里面的一个函数,调用方式为sprintf(char *dest_str, char *format_str, arg1, arg2),可以将格式化之后的字符串存到dest_str,dest_str是需要实现声明的,例如下面的程序:

#include 

int main(int argnum, char *args[])
{
    char s[100];
    sprintf(s, "%i + %i is %i", 1, 2, 3);
    return 0;
}

运行结果是s的内容为字符串“1 + 2 is 3”,如果要用python实现一个相同版本的函数该如何做呢?要求python版本的函数和c版本函数的参数要一致。当然可以有很多种做法,但是下面这种只用了三行代码,简单容易理解:

def sprintf(s, fs, *args):
    global s
    s = fs % args

if __name__=="__main__":
    s = ""
    sprintf(s, "%i + %i is %i", 1, 2, 3)

上面代码运行后s的内容和c语言版本是一致的,有几个知识点需要注意下,一是函数里面用了global声明s是一个全局变量,如果不声明,那么s只是在函数内有效,对s的改动不会对原来的值有影响,这是python里面没有引用和指针的功能,传入函数的参数,如果是不可变对象,传递的是拷贝的值,不可变对象包括int、float、string、tuple等类型,而如果是可变对象,传递的是引用,对参数的修改会影响原来的对象,list是可变对象。

你可能感兴趣的:(python)