Python之路---函数进阶

   日期:2024-01-17     浏览:44    评论:0    

程序员三大美德:

  1. 懒惰

因为一直致力于减少工作的总工作量。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

  1. 缺乏耐性

因为一旦让你去做本该计算机完成的事,你将会怒不可遏。

  1. 傲慢

因为被荣誉感冲晕头的你会把程序写得让谁都挑不出毛病来。

大家好:smile:, 现在让我们一起来学习一下函数进阶部分的内容:tada:

:poultry_leg: 药引

我们在前面学会了函数的基本使用,那么我们来看以下的代码:

def myfunc(x, y): m = x + y myfunc(10, 20) print(m)

so​ :confused:, 执行代码:

NameError: name 'm' is not defined

报错了!程序猿:see_no_evil:最怕的并不是 报错 ,而是报的错误解决不了。

我们来看下这个报错,“name 'm' is not defined”,变量m没有被定义?,但是我们明明在函数内定义了!

首先,我们看看上篇文章中的一张图片,了解下代码运行时遇到函数是怎么做的:

1. 从Python解释器开始执行之后,就会在内存中开辟一个空间
2. 每当遇到一个变量时,就会把变量名和值的对应关系保存下来 但是当遇到函数定义时,解释器只是象征性的把函数名读入内存,表示知道有这个函数存在了,而函数内部的变量和逻辑,解释器不关心。 3. 等调用函数时,python解释器会在开辟一块内存来存储函数里的内容,这个时候才关注函数里面有哪些变量,而函数中的变量只能在函数内部使用,并且会随着函数执行完毕,这块内存中的内容会被清空(垃圾回收)

这就是为什么变量m没有定义的原因?

而我们给这个“存放名字与值”的空间起来一个名字---命名空间

命名空间是一种绝妙的理念,让我们尽情的使用发挥吧!----《Python之禅》

命名空间

命名空间一共分为三种:

  • 全局命名空间---代码在运行伊始,创建的存储“变量名与值的关系”的空间
  • 局部命名空间---在函数的运行中开辟的临时的空间
  • 内置命名空间---程序运行前加载

PS:* 内置命名空间 中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们拿过来就可以用的方法。

加载顺序:内置命名空间-->全局命名空间-->局部命名空间

取值顺序:局部命名空间-->全局命名空间-->内置命名空间

作用域

作用域就是 作用范围 (铜锣湾陈浩南:sunglasses:)

按照生效范围分为:

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

global

global关键字的作用: 全局声明

a = 10
def func(): global a a = 20 print(a) func() print(a)

函数嵌套

我们学过 if 语句嵌套, for 循环嵌套,其实函数也可以嵌套

函数嵌套定义

def f1(): print("in f1") def f2(): print("in f2") f2() f1()

函数嵌套调用

def max2(x, y): '''比较两个数的大小''' m = x if x > y else y return m def max4(a, b, c, d): res1 = max2(a, b) res2 = max2(res1, c) res3 = max2(res2, d) return res3 the_max = max4(23, -7, 30, 11) print(the_max)

函数名

函数名本质上就是函数的内存地址

def func(): print('in func') print(func) # output:<function func at 0x0000019B7FF22EA0>
  1. 可以被引用

    def func(): print('in func') f = func print(f)
  2. 可以被当作容器类型的元素

PS: 一句话,可以当成普通变量用

闭包

内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为 闭包函数

闭包的常用的用法:

def func(): # 外部函数 name = 'mark' def inner(): # 内部函数 print(name) print(inner.__closure__) #判断闭包函数的方法 return inner f = func() f()

总结

命名空间:

函数的嵌套:

嵌套定义:定义在内部的函数无法直接在全局被调用

函数名的本质:

就是一个变量,保存了函数所在的内存地址

闭包:

内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服