zoukankan      html  css  js  c++  java
  • 函数,装饰器函数

    函数定义:     def 函数名() :                              函数名的命名规范跟变量一样

                             函数体(平时写的小程序)

                             return  'a','b'                           return的返回值可以有多个,字符串格式用逗号隔开,可以存在小程序中,程序中遇到return会中止执行代码

                                                                        如果return什么都不写 或者 干脆不写return .那么返回的就是None

                                                                        如果return后面写了一个值. 则调用者可以接收一个结果

                                                                        如果return后面写了多个结果, 则调用者可以接收一个tuple, 调用者可以直接解构成      a,b,c = yue()  结构元素添加到列表中

                        函数名()                                    调用函数.函数体会执行

     函数的参数:           参数写在括号内,封装函数括号内变量叫形参,  调用函数括号内叫实参                        碰到实参里面加**号时,先将**号内元素打散成关键字参数数量要与形参一致   

          从实参出发:    位置参数:        一个萝卜一个坑,在传参过程中. 系统会默认按照位置把实参赋值到形参.,碰到实参里面加*号时,先将*号内元素打散成位置参数数量要与形参一致

                               关键字参数:     只要记住每个参数的名字就可以,括号内位置可无序   如:yue(chat="微信", age=18, address="北京") 

                               混合参数:        在使用混合参数的时候, 关键字参数必须在位置参数后面,否则容易出现混乱

          从形参出发:    位置参数:        同上一样

                                默认值参数:     函数声明时候,给出函数参数的默认值    如:def stu_info(name, age, sex='男'):   sex就是默认值

                                                      必须先声明位置参数, 才能声明默认值参数  默认参数的值在定义阶段就定死了,只能定义一次

                                                      在调用的时候可以给出具体的值, 也可以不给值, 使用默认值

          

         可变长度的参数:   会将溢出的位置参数全部接受,然后保存成元组的形式复值给变量,约定俗成都是赋值给args     如:def info(x,y,z,*args)        info(1,2,3,4,5,6,)

                                      会将溢出的关键字实参全部接受,然后保存成字典的形式赋值给变量.约定俗称赋值给kwargs     如:def info(x,y,z,**kwargs)        info(x=1,y=2,z=3,a=4,b=5,c=6)

                                     

    def func(*args, **kwargs):      万能接收模式
          print(args, kwargs)

      

         命名空间和作用域:   

    1. 内置命名空间: python解释内部运行时的变量函数,                包括int.str.float,list,dic等一些内置好的函数
    2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数     
    3. 局部命名空间: 在函数内部声明的变量和函数.                        

         作用域:         全局作用域:  包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循从上到下逐行执行)

                                  局部作用域:  在函数内部可以使用.

                                   globals() 查看全局作用域中的名字                    locals() 查看当前作用域中的名字

         global和nonlocal  

                                    global: 把已经解释执行后的全局变量拿到局部来用,变量若发生改变,全局变量也跟着改变,

                                                 若全局变量不存在,则会在函数体内就近找到变量升级为全局变量,

                                    nonlocal: 把离他最近的一层的变量拿过来,变量发生改变,局部变量也跟着改变

                                                    如果变量不存在,则会去找上一层中去找变量,不会找全局

                                    

            装饰器函数;

    # 需求:1,不改变主程序和调用方式
    # 2,为主程序拓展一个打印大家好的功能,放在主程序的前面,后面均可
    # 程序拓展的原则:开放封闭原则
    # 开放:对功能拓展开放
    # 封闭:对修改代码封闭


    # 方式一:
    # def foo(arg):
    # def inn():
    # print('你好啊!')
    # arg()
    # return inn
    # func=foo(func)
    # func()



    # 方式二
    # def foo(func):
    # def inn(*args,**kwargs):
    # print('你好啊!')
    # res = func()
    # return res
    # return inn
    # @foo 注意: 装饰器函数要写在主函数的上面,语法糖要写在主函数的上面
    # def func():
    # # 主程序前可以添加逻辑
    # print('这个是主程序!')
    # # 主程序后可以添加逻辑
    # return '不错'
    # ret = func('hah',b=3)
    # print(ret)

    # 理解:
    # 1,调用关系
    # 主程序函数名作为参数传入foo函数中,得到的返回值func,
    # 这个func指向inn函数的名称空间,其中原主程序函数被封装到inn中,
    # func调用时相当于inn调用自身的函数,这样就完成了主程序的封装

    # 2,返回值问题
    # 主程序的返回值就是inn的返回值,inn的返回值就是func的返回值

                            

                                     

         

  • 相关阅读:
    PHP7.27: connect mysql 5.7 using new mysqli
    PHP: Browser, Operating System (OS), Device, and Language Detect
    PHP 在WIN10 下配置
    MySQL chartset
    學習Echart 2.2.7
    The open source JavaScript graphing library that powers Plotly
    D3.js 制作中国地图
    FastReport.Net
    CSS 3D transforms
    SparkCore的调优之开发调优
  • 原文地址:https://www.cnblogs.com/laogao123/p/9299725.html
Copyright © 2011-2022 走看看