博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chapter4.2、函数返回值
阅读量:5884 次
发布时间:2019-06-19

本文共 1607 字,大约阅读时间需要 5 分钟。

函数返回值,作用域

  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 语句删除函数名称,函数对象的引用计数减一

      上级作用域销毁时

转载于:https://www.cnblogs.com/rprp789/p/9527184.html

你可能感兴趣的文章
利用VisualVM监视远程JVM
查看>>
TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解)...
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
『TensorFlow』读书笔记_Inception_V3_上
查看>>
python爬虫从入门到放弃(四)之 Requests库的基本使用(转)
查看>>
程序员怎么留住健康?
查看>>
【ANT】ant使用
查看>>
Go基础系列:Go接口
查看>>
miniprogrampatch 提供 watch 和 computed 特性
查看>>
java按照关键字指定的key删除redis(支持模糊删除)
查看>>
information_schema系列四(跟踪,列约束,表和列)
查看>>
TreapDB is a key-value store based on Treap
查看>>
BINGMAPS地图下载及切图和重命名工具使用教程
查看>>
BYTE* To Float*
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>
Silverlight5 无法切换输入法,无法输入中文的原因及解决初探
查看>>
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>
编辑框内容变化,修改列表
查看>>