def hello(name): return "hello,"+name if sex=='men': def hello(): return "hello,Man" else: def hello(): return "hello,Woman"
def fun(a,b): print a,b fun(1,2) fun(a=2,b=1) # 指定参数名时就忽略参数顺序
def fun1(a,b=2,c=3): print a,b,c fun1(1) # 1,2,3 fun1(1,4) #1,4,3 fun1(1,c=4) #1,3,4
def fun2(*args): print type(args) # <type 'tuple'> print args #(1, 2, 3) fun2(1,2,3)
def fun3(**args): print type(args) # <type 'dict'> print args #{'a': 1, 'c': 3, 'b': 2} fun3(a=1,b=2,c=3)
def fun4(*args): print args a=[1,2,3] fun4(*a) #解包语法 × fun4(1,2,3) #与上面一句等效
def fun4(a,*args,**dict): print a,args,dict l=[1,2,3] fun4(1,*l,**{"name":1})
这个参数类型非常有用,可是在python3.0中才出现
keyword only参数可用于标准化传递的参数,提高函数调用时的可读性。或者当一个函数参数个数非常多时可以明确指定使用哪个参数
def fun5(*a,b,**c) #所有的keyword noly 参数必须位于 *xxx 之后,如果有 **xxx,则必须位于 **xxx之前 print c fun5(*(1,2),b=3,**{'age':10}) #这里必须指定 b=3,b是keyword only参数
函数中也可加注解,但只有Python3.0支持
添加一个属性count用于记录函数被调用的次数
def fun: try: bool(fun.count) #检查是否存在这个属性 fun.count+=1 #每次被调用都 + 1 except Exception, e: fun.count=1 #初始化这个属性 print "init fun.count" print "called:"+str(fun.count)+" times" fun() fun() fun() 结果: init fun.count called:1 times called:2 times called:3 times