• day17 函数学习


    python中函数定义:函数是逻辑结构化和过程化的一种编程方法。  
    函数的使用必须遵循:先定义后使用的原则
     
    函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用
    就相当于在引用一个不存在变量名 
    总结使用函数的好处:
    1.代码重用
    2.保持一致性,易维护
    3.可扩展性
    函数分: 无参函数 ,有参函数,空函数
    函数的返回值 使用return
    返回值:可以返回任意类型
    没有return:None
    return value: value
    return val1,val2,val3 :(val1,val2,val3)
     
    return的效果:只能返回一次值,终止函数的执行
    定义函数时,需要确定函数名和参数个数;
    如果有必要,可以先对参数的数据类型做检查;
    函数体内部可以用return随时返回函数结果;
    函数执行完毕也没有return语句时,自动return None。
    函数可以同时返回多个值,但其实就是一个tuple。
     
    函数参数
    形参与实参:
    位置参数:按照从左到右的顺序依次定义的参数
    按位置定义的形参,必须被传值,多一个不行,少一个也不行
    按位置定义的实参,与形参一一对应
    关键字参数:实参在定义时,按照key=value形式定义
    关键字参数可以不用像位置实参一样与形参一一对应,指名道姓地传值
    注意的问题一:位置实参必须在关键字实参的前面
    注意的问题二:实参的形式既可以用位置实参又可以是关键字实参,但是一个形参不能重复传值
    默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段可以不用传值
    形参的应用:值经常变化的需要定义成位置形参,
     值大多数情况下都一样,需要定义成默认参数
    默认参数需要注意的问题一:必须放在位置形参后面
    默认参数需要注意的问题二:默认参数通常要定义成不可变类型
    默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次
    可变长参数:可变长指的是实参的个数不固定
    按位置定义的可变长度的实参:*
     def func(x,y,*args): #x=1,y=2,args=(3,4,5,6)
         print(x,y)
         print(args)
     func(1,2,3,4,5,6)
    按关键字定义的可变长度的实参:**
     def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3}
         print(x,y)
         print(kwargs)
     func(1,y=2,z=3,a=1,b=3)
    def wrapper(*args,**kwargs): #可以接受任意形式,任意长度的参数
    形参:位置形参,默认参数,*args,命名关键字参数,**kwargs
     
    函数是第一类对象: 指的是函数可以被当做数据传递
     
    名字空间:存放名字与值的绑定关系
     
    名称空间分为三种
     
    内置名称空间:python解释器自带的名字,python解释器启动就会生成
     
    全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生
    局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效
    三者的加载顺序:内置名称空间->全局名称空间->局部名称空间
     
    取值:局部名称空间->全局名称空间->内置名称空间
    作用域:作用范围
    全局作用域:内置名称空间与全局名称空间的名字属于全局范围,
                # 在整个文件的任意位置都能被引用,全局有效globals
    局部作用域:局部名称空间的名字属于局部范围,
                #只在函数内部可以被引用,局部有效locals
  • 相关阅读:
    JDK动态代理源码分析
    使用docker-compose快速搭建本地ElasticSearch7和Elastichd环境
    IDEA导入SVN项目提示HTTPS:Server SSL certificate verification failed
    双重校验锁为什么要用volatile修饰
    Ribbon的基础知识
    Eureka的基础知识
    JDK1.8 JVM内存模型个人理解
    OAuth2+Zuul报RedisConnection.set([B[B)V解决方案
    Spring aop @aspect不生效问题
    教你使用markdown画程序流程图
  • 原文地址:https://www.cnblogs.com/lizhaoyu/p/7049077.html
Copyright © 2020-2023  润新知