码迷,mamicode.com
首页 > 其他好文 > 详细

(五)函数

时间:2018-06-06 23:45:18      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:*args   glob   全局   没有   lan   类型   无法   ffffff   必须   

函数的参数

形参与实参

def test(a,b):
    print(a,b)
test(1,2)

a,b为形参 1,2为实参 形参只有在被调用时才分配内存,在调用结束时即刻释放所分配的内存,因此形参只有在函数内部有效

 

参数的几种类型

①位置参数,必须一一对应,缺一不行多一也不行 

 test(1,2,3)

②关键字参数,无须一一对应,缺一不行多一也不行 

test(y=1,x=3,z=4)

③默认参数,可传可不传

def test(a,b,c=1):
    print(a,b,c)
test(1,2)
结果:1 2 1

④参数组

def test(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
test(1,2,3,4,5,a = 1,b = 2)
test(1,*[2,3,4],**{a:1})
结果:1
   (2, 3, 4, 5)
   {‘a‘: 1, ‘b‘: 2}
   1
   (2, 3, 4)
   {‘a‘: 1}

大原则:位置参数必须在关键字参数的左边,*args就是把多余的位置参数放在一个元组里,**kwargs就是把关键字参数放在一个字典里

全局变量与局部变量(全局变量变量名大写;局部变量变量名小写)

无global关键字的情况:优先读取局部变量,能读取全局变量,但无法对全局变量重新赋值

name = xulan‘  //全局变量
def test():
    print(name)
test()
结果:xulan
name = xulan
def test():
    name = aaa‘  //局部变量
    print(name)
test()
结果:aaa
name = xulan
def test():
    name = aaa
    print(name)
test()
print(name)
结果:aaa
   xulan

但是对于可变类型,可以对内部元素进行操作

name = [a,b]
def test():
    name.append(c)
    print(name)
test()
print(name)
结果:[‘a‘, ‘b‘, ‘c‘]
   [‘a‘, ‘b‘, ‘c‘]

有global关键字的情况:变量本质上就是全局的那个变量,可读取可赋值

name = [a,b]
def test():
    global name
    name = 123
    print(name)
test()
print(name)

结果:123
   123

函数的嵌套(#为执行顺序)

NAME = ABC         #1
def a():
    name = a       #3
    print(name)      #4
    def b():
        name = b   #6
        print(name)  #7
    b()              #5
    print(name)      #8
a()                  #2

结果: a b a
name = ABC         
def a():
    name = a      
    def b():
        global name
        name = b   
    b()              
    print(name)      ---- a,这里不是b,b()函数改变的是全局变量,这里还是a()函数的局部变量name = ‘a‘
print(name) ---- ABC 
a()
print(name) ---- b
结果:ABC
   a
   b

nonlocal,指定上一级变量,如果没有就继续往上直到找到为止

name = ABC
def a():
    name = a
    def b():
        nonlocal name
        name = b
    b()
    print(name)    ----b,a()函数中的局部变量被b()函数修改
print(name)  ---- ABC
a()
print(name)  ---- ABC,全局变量并未修改

结果:ABC
   b
   ABC

 

(五)函数

标签:*args   glob   全局   没有   lan   类型   无法   ffffff   必须   

原文地址:https://www.cnblogs.com/xulan0922/p/9136647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!