zoukankan      html  css  js  c++  java
  • chapter4.2、函数返回值

    函数返回值,作用域

      Python函数使用return语句返回“返回值”

      函数一定有返回值。没有return 语句,隐式调用return None

      一个函数可以存在多个return语句,但只执行一条,如果一条return都没有执行,就隐式调用return None

      如果有必要,可以调用return None,可以简写为return

      return直接返回函数,return之后的语句不再执行其他语句不再执行

      return 是函数结束标志,返回值只有一个,只返回一次,

      return的内容要包装在容器中,没有用元组包

    嵌套函数

      函数可见范围,就是作用域

      内部函数不能在外部使用,不可见,会抛NameError

      标识符的可见范围,就是作用域,一般说常量的作用域

    全局作用域  在整个程序运行环境中都可见

    局部作用域  在函数,类内可见,局部变量使用范围不能超过其所在的局部变量

    赋值即重新定义

    本地变量作用域作用于整个函数,函数内上方调用时受下方的x的重新定义的影响,不会去上一层函数引用

    global 全局变量,

      将当前作用域内的变量声明为使用外部的全局变量,全局变量中没有就新建变量,如果是引用没有就报错,

      只到全局寻找变量,不到enclosing,

      global放在局部作用域相当于全局作用域操作变量

      函数使用为了封装,尽量与外界隔离,如果需要使用全局变量,使用形参传参解决

    函数中少使用全局变量

    闭包:

    自由变量:未在本地作用域中定义的变量,例如定义在内层函数外的外层函数的作用域中的变量。

    闭包的概念:出现在嵌套函数中,指内层函数用到了外层函数的作用域中的自由变量,就形成了闭包

    nonlocal 在外层定义,不能是全局作用域。

    内层函数调用外层的自由变量,直接使用就形成闭包,重新定义就要使用nonlocal

    使用了nonlocal关键字,将变量标记为不在本地作用域,而在上级某一级的局部作用域中定义,但不能是全局作用域中

    默认值的作用域,

    函数也是对象,Python中 把函数的默认值放在了属性中,这个属性就伴随着这个函数对象的整个生命周期

    查看属性foo.__defaults__

    如果默认值是引用类型,变动其中的内容,不会改变引用类型的地址。

    属性保存在元组中保存位置参数的默认值,不会在函数体运行中改变。

    属性__default__中保存元组中的所有位置参数默认值,

    属性__kwdefault__中保存元组中的所有keyword-only参数默认值,

    使用可变类型做默认值,就能修改这个默认值,根据情况决定使用与否

    可以使用影子拷贝创建新对象,但不能改变传入的参数

    使用None作为默认缺省值。通过值得判断,就可以灵活创建或者修改传入的对象,较为常用

    变量名解析原则LEGB

      Local:本地作用域,局部作用域的 local 命名空间,函数调用时创建,调用结束消亡。

      Enclosing:python2.2 时引入了嵌套函数,实现了闭包,这个就是嵌套函数的外部函数的命名空间

      Global:全局作用域,即一个模块的命名空间,模块被import时创建,解释器退出时消亡

      Build-in:内置模块的命名空间,生命周期从python解释器启动时创建到解释器退出时消亡,如:print(open),printhe open都是内置的变量

    函数销毁

      全局函数:

         同名函数覆盖

         del 函数名 删除函数标识符,而非函数对象,引用计数减一。

         程序结束时

      局部函数:

          重新在上级作用域定义同名函数

          del 语句删除函数名称,函数对象的引用计数减一

          上级作用域销毁时

  • 相关阅读:
    【转】微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应
    解决vscode egg调试出现: this socket has been ended by other party【转】
    高仿Readhub小程序 微信小程序项目【原】
    git 解决二进制文件冲突
    webpack 打包编译-webkit-box-orient: vertical 后消失
    H5 history.pushState 在微信内修改url后点击用safari打开/复制链接是修改之前的页面
    vue 路由懒加载 使用,优化对比
    jq自定义多选下拉列表框
    System V IPC相关函数
    互斥锁和条件变量(pthread)相关函数
  • 原文地址:https://www.cnblogs.com/rprp789/p/9527184.html
Copyright © 2011-2022 走看看