目录


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})   

KeyWord Noly 函数

这个参数类型非常有用,可是在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

lambda