python学习笔记(函数)

#1
#参数仅包含必选参数
def func(x,y):
    y.append(x)
    print("%s" % y)
func(1,[])
#>>[1]
func(2,[])
#>>[2]


#2
#参数包含必选和可选参数,带默认值的参数为可选参数
#若参数默认值为可变对象,默认参数保留了每次函数调用的修改
def func(x,y=[]):
    y.append(x)
    print("%s" % y)
func(1)
#>>[1]
func(2)
#>>[1, 2]
#为了防止以上情况发生,默认值改为none,并在函数体内加入检查代码
def func(x,y=None):
    if y is None:
        y=[]
    y.append(x)
    print("%s" % y)
func(1)
#>>[1]
func(2)
#>>[2]


#3
#函数参数调用,有两种方法,一种是使用位置参数,一种是使用关键字参数
def foo(w,x,y,z):
    pass
foo(1,2,3,4)
foo(1,2,z=4,y=3) #使用关键字参数时,参数的顺序并不重要


#4
#可变长参数列表,在定义函数时,使用*和**

#使用*,将所有余下参数作为元组放入args变量,在函数内调用别的函数时,使用*args,将args元组重新转为参数列表,传递给被调用函数
def foo1(x,*args):
    print("foo1: p1=%s,p2=%s" % (x,args))
def foo(w,x,*args):
    print("foo: p1=%s,p2=%s,p3=%s" % (w,x,args))
    foo1(x,*args)
foo(1,2,3,4,5,6)
#>>foo: p1=1,p2=2,p3=(3, 4, 5, 6)
#>>foo1: p1=2,p2=(3, 4, 5, 6)

#使用**,将所有余下的关键字参数作为字典放入kwargs变量
def foo(w,x,**kwargs):
    print("foo: p1=%s,p2=%s,p3=%s" % (w,x,kwargs))
foo(1,x=2,y=3,z=4)
#>>foo: p1=1,p2=2,p3={'y': 3, 'z': 4}

#同时使用*和**
def foo(w,*args,**kwargs):
    print("foo: p1=%s,p2=%s,p3=%s" % (w,args,kwargs))
foo(1,2,3,y=4,z=5)
#>>foo: p1=1,p2=(2, 3),p3={'y': 4, 'z': 5}

闭包和装饰器的两篇不错的文章

https://foofish.net/understand-decorator.html

https://foofish.net/python-decorator.html

 

posted @ 2018-01-21 09:47  凡心已炽  阅读(127)  评论(0编辑  收藏  举报