study note10
参数组:
def test(*args): print(args) test(1,2,3,4,5,6) test(*[1,2,3])#转成元祖 def test1(a,*args): #args只能接收位置参数,不能接受关键字参数 print(a) print(args) test1(1,2,3,4,5) #1会传给a,2345传给args def test2(**kwargs): #kwargs接收关键字参数,转成字典 print(kwargs) print(kwargs['name']) print(kwargs['age']) test2(name='deakin',age=28)#字典 test2(**{'name':'deakin','age':28}) def test3(name,**kwargs): print(name) print(kwargs) test3('john',age=10,sex='M') def test4(name,age=18,**kwargs): print(name) print(age) print(kwargs) test4('deakin',job='IT') def test5(name,age=28,*args,**kwargs): print(name) print(age) print(args) print(kwargs) test5('amy',20,2,3,4,5,'deakin',job='IT') #2345,deakin都是位置参数,传给args转为元祖 打印结果: test: (1, 2, 3, 4, 5, 6) (1, 2, 3) test1:
1 (2, 3, 4, 5) test2: {'age': 28, 'name': 'deakin'} deakin 28 {'age': 28, 'name': 'deakin'} deakin 28 test3: john {'sex': 'M', 'age': 10} test4: deakin 18 {'job': 'IT'} test5: amy 20 (2, 3, 4, 5, 'deakin') {'job': 'IT'}
局部变量与全局变量:首先只有字符串,整数这种比较简单的数据类型是不能在函数内局部改全局的,但是像字典、列表在函数中局部变量更改,都会影响全局。global尽量不要用!!!
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
def change_name(name): print('namebefore',name) name='Dea' #局部变量,只在函数里生效 print('nameafter',name) change_name(name) print('outside',name) 打印结果: namebefore deakin nameafter Dea outside deakin
对于列表:
name=['deakin','john','amy'] def change_name(): print('namebefore', name) name[0]="ddd" print('nameafter',name) change_name() print(name) 打印结果: namebefore ['deakin', 'john', 'amy'] nameafter ['ddd', 'john', 'amy'] ['ddd', 'john', 'amy'] #外面也改了
递归:
def calc(n): print(n) if int(n/2)>0: return calc(int(n/2)) print(n) calc(10) 打印结果: 10 5 2 1 1
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10) 输出: 10 5 2 1