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

 

 

posted @ 2018-01-10 18:16  Deakin-DJ  阅读(100)  评论(0编辑  收藏  举报