[Python]函数小结

默认参数的内存分配在函数一开始的时候就已经完成 所以后面多次调用的默认参数其实是同一个参数 所以多次调用也只是对同一个默认参数进行修改

def addNumber(L=[]):
    L.append(3)
    return L
print addNumber()
print addNumber()

[3]
[3, 3]

 

所以空的默认参数可以用None

def addEnd(L= None):
    if L == None:
        L = []
        L.append(3)
    return L
print addEnd()
print addEnd()

[3]
[3]

 

关键字参数

其实就是把最后一个参数当作为dict吧

下面方法1是直接在调用的时候在参数列表里面直接把dict的元素分别当作一个个独立的参数传入

方法2是在外面构造好一个dict后再整体传入 就像声明的时候一样 dict参数要在参数名前加**才可以

 

 1 def displayName(name, gender, **others):
 2     print 'Here comes the result of the method 1:'
 3     print 'Name: ',name,' Gender: ',gender,' Other Information: ',others
 4 displayName('Bob','Male',Age=30,Address='None',State='Undergraduated')
 5 
 6 
 7 def displayName(name, gender, **others):
 8     print 'Here comes the result of the method 2:'
 9     print 'Name: ',name,' Gender: ',gender,' Other Information: ',others
10 
11 others = {'Age':30,'Address':'None','State':'Undergraduated'}
12 displayName('Bob','Male',**others)

结果:

1 Here comes the result of the method 1:
2 Name:  Bob  Gender:  Male  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}
3 Here comes the result of the method 2:
4 Name:  Bob  Gender:  Male  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}

 

参数组合

最后一个位置的优先顺序来排 

关键字参数>可变参数>默认参数>必选参数

也就是像下面都出现的情况 

注意每次调用函数时里面参数的不同

 

def displayName(name, gender,registered=False,*phoneNumber, **others):
    print 'Here comes the result:'
    print 'Name: ',name,' Gender: ',gender,' Registered: ',registered,' Phone Number: ',phoneNumber,' Other Information: ',others

others = {'Age':30,'Address':'None','State':'Undergraduated'}
displayName('Bob','Male',(1,2,3),**others)
    #输出 Name:  Bob  Gender:  Male  Registered:  (1, 2, 3)  Phone Number:  ()  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}

displayName('Bob','Male',*(1,2,3),**others)
    #输出 Name:  Bob  Gender:  Male  Registered:  1  Phone Number:  (2, 3)  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}

displayName('Bob','Male',False,(1,2,3),**others)
   #输出 Name:  Bob  Gender:  Male  Registered:  False  Phone Number:  ((1, 2, 3),)  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}

displayName('Bob','Male',False,*(1,2,3),**others)
   # 输出 Name:  Bob  Gender:  Male  Registered:  False  Phone Number:  (1, 2, 3)  Other Information:  {'Age': 30, 'State': 'Undergraduated', 'Address': 'None'}

 

posted @ 2015-03-10 12:38  baaingSheep  阅读(194)  评论(0编辑  收藏  举报