【问题】
Python中,希望实现一个可变参数的函数。
【解决过程】
相关代码如下:(extractOK, extractedBlogUser, generatedBlogEntryUrl) = callCommonBlogFunc(extractBlogUser, inputUrl=inputUrl);
#------------------------------------------------------------------------------
def callCommonBlogFunc(funcToCall, **paraDict):
blogProvider = "BlogNetease";
paras = "";
for i, para in enumerate(paraDict):
if ( i == 0) :
paras += para + "=" + paraDict[para];
#print dir(para);
#paras += para.__str__;
else :
paras += " ," + para + "=" + paraDict[para];
#paras += " ," + para.__name__;
print dir(funcToCall);
print "funcToCall.func_name=",funcToCall.func_name;
#print funcToCall.__dict__;
funcCallStr = blogProvider + "." + funcToCall.func_name + "(" + paras + ")";
print "funcCallStr=",funcCallStr;
return;
【总结】
1. 可变参数是一个星号*的,那么传入的是List类型变量;
注意:调用者,必须用直接给参数,即"hello", 123等形式的调用。
2. 可变参数是两个星号**的,那么传入的是Dictionary类型变量;
注意:调用者,必须用b="hello", c=123的形式调用。
看下面代码,就很容易懂了:def funcParaList(a, *paraList) :
print "paraList=",paraList; # paraList= ('hello', 123)
def funcParaDict(a, **paraDict) :
print "paraDict=",paraDict; # paraDict= {'c': 123, 'b': 'hello'}
def testFuncPara():
funcParaList('abc', "hello", 123);
funcParaDict('abc', b="hello", c=123);