[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'}