zoukankan      html  css  js  c++  java
  • 函数

    一、函数的功能:

      1.增加代码的重用性;把代码用函数名装起来后,只需要在调用的地方,代用函数名即可。

      2.增加代码的可读性;

    二、函数的定义和调用

      遵循的原则:先定义、后调用

    #基本的格式
    #函数的定义
    def func():
        ‘’‘注释’‘’
        print('123')
        print('2351')
        return 'aaaa'
    
    函数的调用
    
    func()

     函数的返回值,关键字return

    1 函数的返回值,是return 后边的内容,可以是一个变量名,也可以是多个。
    2 此处需要注意,不管函数体内部有多复杂的运算,只要调用此函数,运算结果就是return 后边的内容。

    return 的用法
    1.没有返回值
        ①函数内部不写return  (默认返回None)
        ②函数最后只写return   (返回None,还有结束本函数的作用,不会再执行本函数后边的内容)
        ③函数最后写return None (一般不用这么写)
    
    2.返回1个值
        return xxx  
        可以返回任意数据类型的值,
    
    3.返回多个值    
        返回的多个值,如果只能一个变量来接收,会组成一个元祖的形式,也可以用多个变量来接收,有几个返回值,就需要有几个变量名。
    
    

     函数的参数

    分为形式参数(定义时)、实际参数(调用时) 
    
    形式参数:
    
    位置参数:调用时必须传参。
    默认参数:在定义时写上默认值,调用时,可以不传,则用默认值,如果传参数,则用传入的参数代替默认值。
    动态参数:
       *args  接收位置参数类型的参数,并打包成元祖形式。
        **kwargs  接收默认参数,并打包成字典的形式。
    
    顺序:位置参数、*args、默认参数、**kwargs
    
    实际参数:
        按位置传参,
        按关键字传参,
        位置、关键字混用,
        

    下图是老师总结的图,可用来回顾用,感谢美丽的老师~~


    函数的进阶知识点

    一、命名空间
    本质:存放名字与值的绑定关系

    内置空间:
    打开python解释器时,在内存创建的空间,存放了python解释器为我们提供的名字:input,print,str,list,tuple...
    全局空间:
    代码在运行伊始,创建的存储“变量名与值的关系”的空间
    局部空间:
    在函数的运行中开辟的临时的空间叫做局部命名空间

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

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

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

      用法:小范围的可以调用大范围的,但是不能修改,除非用global、nonlocal关键字。大范围的不能用小范围的。

        如果小范围要用一个变量,如果自己的范围内有,就用自己范围的,没有,则想更大一级的范围找,没找到,再去更大一级的范围,都没有,则报错。

      

     1 #作用域示例
     2 
     3 name = 'egon'
     4 
     5 def my_name():
     6     name = 'tom'
     7     print('my name is',name)
     8 
     9 my_name()
    10 print(name) 
    11 
    12 结果是:
    13 >>>my name is tom
    14 >>>egon

    因为函数调用执行的时候,name在自己的局部空间找到了name = ‘tom’,就用自己空间的。在10行中的name,自己的空间是全局,就在全局找到name = 'egon'.

      三、函数名的本质——————自己重点需要看

      函数名的本质,函数名本质上就是函数的内存地址,类似变量名,例如,x = 1 ,x指向内存中的1的地址。

      函数名可以作为参数,返回值(这时候不加括号,加括号是调用!!!)

     1 #函数做参数
     2 def func1():
     3     print('from func1')
     4 
     5 def func2(fun):
     6     fun()
     7     print('form func2')
     8 
     9 func2(func1)
    10 
    11 运算结果:
    12 >>>from func1
    13 >>>form func2
    14 
    15 调用func2时,把func1当成参数传入了。
     1 #函数作为返回值
     2 
     3 def func1():
     4     def func2():
     5         print('form func2')
     6     return func2
     7 
     8 res = func1()
     9 print(res)
    10 
    11 >>><function func1.<locals>.func2 at 0x000001C9637BC9D8>
    12 
    13 返回func2函数在内存中的地址,

      四、闭包(掌握装饰器的必备知识)

      定义:1.在函数内部定义的函数;

         2.内部函数包含对外部作用域而非全剧作用域变量的引用

    #定义一个闭包函数
    
    def outer():
        name = 'tom'
        def inner():
            print('my name is',name)
    
    
    
    #inner 函数满足闭包的两个要求,故是闭包函数。

     

     五、装饰器

      应用场景:为已经定义好的函数,增加额外的功能,但是不修改原来函数的源代码,并且不改变原函数的调用方式。

      装饰器的功能是将被装饰的函数当作参数传递给装饰器函数,并返回包装后的被装饰的函数”。

    ##装饰器格式   以及执行顺序
    
    def wrapper(func):     顺序1
        def inner(*args,**kwargs):顺序5
            ret  = func()     顺序7
            return ret        顺序10
        return inner  顺序3
    
    @wrapper     #本质是 func() 顺序4 = wrapper(func)顺序2
    def func(a,b):
        c = a+b   顺序8
        return c    顺序9
    
    res = func(1,2)   #调用函数  顺序6  本质是调用inner函数,传入的位置参数,传递到了inner函数的args中,












  • 相关阅读:
    Mybatis 用Demo去入门 (使用数据库的查询操作测试)
    Spring Mvc 用Demo去学习
    OGNL的学习
    hibernate 运用 中的 细节分析
    pip3问题pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail
    更换centos7源
    Centos7下python2.7升级至3.6
    service adminsetd start
    kali更新源
    redhat7 配置使用centos的yum源
  • 原文地址:https://www.cnblogs.com/fengqing89/p/7256373.html
Copyright © 2011-2022 走看看