程序员三大美德:

  1. 懒惰

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

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

  1. 缺乏耐性

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

  1. 傲慢

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

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

:poultry_leg: 药引

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

def myfunc(x, y):m = x + ymyfunc(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 aa = 20print(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 yreturn mdef max4(a, b, c, d):res1 = max2(a, b)res2 = max2(res1, c)res3 = max2(res2, d)return res3the_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 innerf = func()
f()

总结

命名空间:

函数的嵌套:

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

函数名的本质:

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

闭包:

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

Python之路---函数进阶相关推荐

  1. 轩小陌的Python笔记-day11 函数进阶

    day11 函数进阶 目标:掌握函数相关易错点 & 项目开发必备技能. 今日概要: 参数的补充 函数名到底是什么? 返回值和print,傻傻分不清楚. 函数的作用域 1.参数的补充 在函数基础 ...

  2. python之路——面向对象进阶

    一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo()isin ...

  3. python之路 面向对象进阶篇

    一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province:# 静态字段country ...

  4. python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶

    一.函数基础函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数私信小编001即可获取Python学习资料01. 函数的快速体验 1.1 快速体验 所谓函数,就是 ...

  5. python中使用函数的优点_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  6. python对初学者的看法_python学习之道(1)——新手小白对print()函数的理解,Python,之路,一,浅谈...

    Python学习之路(一) --浅谈新手小白对print()函数的理解 写在前面 笔者目前为在校大四学生(某末流211),大学生活即将画上终点,然而却还没有真正精通一门语言,很是惭愧.在大学期间参加了 ...

  7. python函数-函数进阶

    python函数-函数进阶 一.命名空间和作用域 1.命名空间 内置命名空间 -- python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被 ...

  8. python高阶函数看不懂_Python进阶:高阶函数的详细说明

    这篇文章讲述了Python进阶:高阶函数的详细说明有需要的朋友可以参考 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单 ...

  9. Python学习入门基础:一篇文章搞定函数基础、函数进阶

    一.函数基础 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在 ...

最新文章

  1. ASP.NET MVC3 快速入门--第二节 添加一个控制器
  2. 【深度学习入门到精通系列】对抗样本和对抗网络
  3. Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
  4. Web开发学习路线图
  5. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
  6. 伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...
  7. windows故障转移群集和mysql_Windows 2016 无域故障转移群集部署方法 超详细图文教程...
  8. photoshop cs5快捷键的用法总结
  9. FPGA跨时钟域异步时钟设计的几种同步策略
  10. c语言代码大全和详细解释_最详细的Simulink代码生成(C语言)
  11. 计算机网络最出优秀,职业高中计算机网络案优秀教案.doc
  12. Oracle11g安装教程
  13. 博士毕业最高201万!华为顶级薪酬招“天才少年”
  14. QNX系统MfgTool烧写工具脚本说明
  15. CENTOS 7 完全硬盘安装及使用 1
  16. 以用户体验五要素的思路,如何编写产品需求文档(PRD)
  17. UCLA教授朱松纯:走向通用人工智能,从大数据到大任务
  18. Windows11越过限制安装方法
  19. RNN(recurrent neural network regularization)
  20. 对《Mode-Adaptive Neural Networks for Quadruped Motion Control》一文的理解(上)

热门文章

  1. 《Spark The Definitive Guide》Chapter 6:处理不同类型的数据
  2. C#多线程操作界面控件的解决方案
  3. 《Spring实战》系列之Bean的装配-Days01
  4. 高效数据序列化的工具 FlatBuffers 的初体验
  5. BZOJ 4421: [Cerc2015] Digit Division 排列组合
  6. Http API笔记
  7. Custom Looks using Qt Style Sheets
  8. JQuery如何与数据库交互
  9. UIView 中常见的方法总结
  10. [转] VS2010中VC9.0Runtime与VC10.0Runtime在win7上装不上提示error code 1603