Python之函数总结

 

一,函数的定义与调用

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

   def 是固定的,不能变,必须是连续的def三个字母,不能分开

def 函数名(参数):
        """注释:函数功能和参数说明"""
        函数体
        ……
        return 返回值

调用:函数名+()

函数的返回值:return+返回值 ,结束函数

       return不带返回值相当于None

无返回值,返回一个值,返回多个值

二,函数的参数

 

 三,函数对象

  函数是第一类对象,即函数可以当做数据传递

  1,可以被引用

  2,可以当做参数被传递

def func():
      print('func')
def func2(f):
      print(f)
      f()
      print('func2')

 

  3,返回值可以是函数

def func():
    print('func')

def func2(f):
    print('func2')
    return f

fu = func2(func)

 

  4,可以当做容器类型的元素

四,函数的嵌套

为了保护内部函数,确定内部函数只能在外部函数中被调用

def animal():
    def tiger():
        print('bark')
    print('eat')
    tiger()
# animal()

函数名的本质:就是一个变量,保存了函数所在的内存地址

五,作用域

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域

  全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

  局部作用域:局部名称空间,只能在局部范围内生效

闭包:内部函数包含了对外部作用域而非全局作用域名字的引用,该内部函数称为闭包函数

 

六,装饰器

  1,装饰器的本质 :闭包函数

 2,功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能
 3,装饰器的固定格式
def timer(func):
    def inner(*args,**kwargs):
        '''执行函数之前要做的'''
        re = func(*args,**kwargs)
        '''执行函数之后要做的'''
        return re
    return inner

4,带参数的装饰器

def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print('''执行函数之前要做的''')
            re = func(*args,**kwargs)
            if flag:
                print('''执行函数之后要做的''')
            return re
        return inner
    return timer

@outer(False)
def func():
    print(111)

func()
View Code

5,多个装饰器装饰同一个函数

def qqxing(func):  #func = pipixia_inner
    def qqxing_inner(*args,**kwargs):
        print('in qqxing:before')
        ret = func(*args,**kwargs)  #pipixia_inner
        print('in qqxing:after')
        return ret
    return qqxing_inner

def pipixia(func):  #dapangxie
    def pipixia_inner(*args,**kwargs):
        print('in pipixia:before')
        ret = func(*args,**kwargs)      #dapangxie
        print('in pipixia:after')
        return ret
    return pipixia_inner

#qqxing(pipixia_inner)  -->dapangxie = qqxing_inner()
@qqxing    #dapangxie = qqxing(dapangxie)  -->dapangxie = qqxing(pipixia(dapangxie)) -->
@pipixia   #dapangxie = pipixia(dapangxie)
def dapangxie():
    print("饿了么")
dapangxie()
View Code

 

 
posted @ 2017-07-29 16:12  NeitherCandidate  阅读(309)  评论(0)    收藏  举报