广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python函数进阶的使用方法实例分析
  • 952
分享到

Python函数进阶的使用方法实例分析

2023-06-30 18:06:56 952人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python函数进阶的使用方法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、函数的命名空间

今天小编给大家分享一下python函数进阶的使用方法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Python函数进阶的使用方法实例分析

一、函数的命名空间和作用域

1、函数的命名空间

  • 什么是命名空间?

假如有一串代码,观察其输出结果:

def f():    a = 1    return aprint(a)输出结果:Traceback (most recent call last):  File "E:/Python代码/11/文件一.py", line 4, in <module>    print(a)NameError: name 'a' is not defined

报错了!错误是“name 'a' is not defined”。变量a没有被定义。。。为啥?我明明定义了a=1呀!

那我们就要了解一下Python代码运行时遇到函数时怎么做的:

首先从python解释器开始执行之后,就在内存中开辟了一个空间每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪些变量,而函数中的变量会存储在新开辟出来的内存中。函数中的变量只能在函数的内部使用,并且会随着函数执行完毕,这块内存中的所有内容也会被清空。

我们给这个“存放名字与值的关系”的空间起了一个名字——叫做命名空间

代码在最开始创建的存储“变量名与值的关系”的空间叫做全局命名空间,在函数内部运行中开辟的临时的空间叫做局部命名空间

  • 函数命名空间三大类

函数命名空间一共分为三大类

1、内置命名空间 —— python解释器    # 就是python解释器一启动就可以使用的名字存储在内置命名空间中    # 内置的名字在启动解释器的时候被加载进内存里2、全局命名空间 —— 我们写的代码但不是函数中的代码    # 是在程序从上到下被执行的过程中依次加载进内存的    # 放置了我们设置的所有变量名和函数名3、局部命名空间 —— 函数    # 就是函数内部定义的名字    # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了#在局部:可以使用全局、内置命名空间中的名字#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用#在内置:不能使用局部和全局的名字的

内置命名空间:内置命名空间中存放了Python解释器为我们提供的名字(函数)我们不需要定义,都是我们熟悉的打开解释器就能够直接使用如:input、print、str、set……

  • 三种命名空间之间的加载与取值顺序

加载顺序:内置命名空间(程序运行前加载 > 全局命名空间(程序运行中:从上到下加载) > 局部命名空间(程序运行中:调用时才加载)

在局部调用时:局部命名空间 > 全局命名空间 > 内置命名空间

在全局调用时:全局命名空间 > 内置命名空间

例子:

a = 10def f():    a = 1    print(a)f()print(a)输出结果:110

2、函数的作用域

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

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

局部作用域:局部名称空间,只能在局部范围生效

  • globals和locals方法

locals(): 函数会以字典类型返回当前位置的全部局部变量
globals(): 函数会以字典类型返回当前位置的全部全局变量

def func():    a = 1    print(locals())    print(globals())    print('========================分割线==========================')func()print(locals())print(globals())

输出结果:

Python函数进阶的使用方法实例分析

  • global关键字

global是Python中的全局变量关键字。
2、变量分为局部变量与全局变量,局部变量又可称之为内部变量。
3、由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
4、全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。
5、global关键字的作用是可以使得一个局部变量为全局变量

例子:

在my函数中,在 x 前面加 global,my函数将 x 赋为8,此时全局变量中的 x 值改变。需要注意的是 global 需要在函数内部声明,若在函数外声明,则函数依然无法操作 x 。

x = 4 def my():    global x    x = 8    print("x = ", x) print("x = ", x)my()print("x = ", x)  输出结果是:x = 4x = 8x = 8

二、函数的嵌套和作用域链

  • 函数的嵌套调用

def max2(x,y):    m  = x if x>y else y    return mdef max4(a,b,c,d):    res1 = max2(a,b)    res2 = max2(res1,c)    res3 = max2(res2,d)    return res3ret = max4(1,2,4,3)print(ret)输出结果:4
  • 函数的嵌套定义

def f1():    print("in f1")    def f2():        print("in f2")    f2()f1()输出结果:in f1in f2def f1():    def f2():        def f3():            print("in f3")        print("in f2")        f3()    print("in f1")    f2()f1()输出结果:in f1in f2in f3
  • 函数的作用域链

a = 1def outer():    a = 5    def inner():        a = 2        def inner2():            nonlocal a            a += 1            print('inner2',a)        inner2()        print('##a##:',a)    inner()    print('**a**:',a)outer()print('全局:',a)输出结果:inner2 3##a##: 3**a**: 5全局: 1
  • nonlocal关键字

#nonlocal 只能用于局部变量,找上层中离当前函数最近一层的局部变量且外部必须有这个变量#声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量#对全局无效,在内部函数声明nonlocal变量之前不能再出现同名变量#对局部也只是对最近一层有影响
def f1():    a = 1    def f2():        nonlocal a        a = 2    f2()    print('a in f1 : ',a)f1()输出结果:a in f1 :  2
  • global关键字

# 对于不可变数据类型 在局部可是查看全局作用域中的变量# 但是不能直接修改# 如果想要修改,需要在程序的一开始添加global声明# 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

三、函数名的本质

  1. 函数名就是内存地址

  2. 函数名可以被赋值

  3. 函数名可以作为容器类型的元素

  4. 函数名可以作为函数的返回值

  5. 函数名可以作为函数的参数

def func():    print(123)func()print(func)# 函数名就是内存地址# 函数名可以被赋值func2 = funcfunc2()#函数名可以作为容器类型的元素l = [func,func2]for i in l:    i()def func():    print(123)def wahaha(f):    f()    return f            #函数名可以作为函数的返回值qqxing = wahaha(func)   #函数名可以作为函数的参数qqxing()输出结果:123<function func at 0x000001ADF9946280>123123123123123
  • 思考

如果我自己定义了一个input函数(作用:调用该函数就打印'在下周周ovo'),会不会与内置的input函数有冲突呢?

def input(a):    print('在下周周ovo')

那么接下来的代码怎么运行呢?

def input(a):    print('在下周周ovo')def func():    input('请输入')    print(input)func()

答案:

Python函数进阶的使用方法实例分析


四、闭包

  • 闭包函数的概念

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

由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。如果我们就是想拿怎么办呢?返回呀!

如果函数内的变量我们要想在函数外部用,可以直接返回这个变量,那么如果我们想在函数外部调用函数内部的函数呢?那就直接将函数名字作为返回值就好

def outer():    a = 1    def inner():        print(a)    #内部函数调用了外部变量a    return innerinn = outer()inn()输出结果:1
  • 闭包函数的判断方法

判断闭包函数的方法__closure__

当运行后,如果有cell的话,就表示是闭包函数。如果没有就不是。

#输出的__closure__有cell元素 :是闭包函数def func():    name = 'eva'    def inner():        print(name)    print(inner.__closure__)    return innerf = func()f()#输出的__closure__为None :不是闭包函数name = 'eGon'def func2():    def inner():        print(name)    print(inner.__closure__)    return innerf2 = func2()f2()输出结果:(<cell at 0x000001E935CB0FA0: str object at 0x000001E935CC2CB0>,)evaNoneegon
  • 闭包嵌套

顾名思义是两个或以上的闭包函数嵌套在一起

def wrapper():    money = 10    def func():        name = 'zhou'            def inner():            print(name,money)    #引用了func()函数中name变量引用了wrapper()函数中money变量        return inner    return funcf = wrapper()i = f()i()输出结果:zhuo 10

小结

#func(一个函数名)  --->>对应函数的内存地址#函数名()---函数调用#函数的内存地址----()函数的调用# 作用域两种# 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域  ——globals()# 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——#locals()globals() : 永远打印全局的名字#locals()  : 输出什么 根据locals所在位置#在代码中要尽量少定义全局变量,多使用返回值和接收返回值#函数的嵌套:        嵌套调用        嵌套定义:定义在内部的函数无法直接在全局被调用#函数名的本质:        就是一个变量,保存了函数所在的内存地址#闭包:        内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数

以上就是“Python函数进阶的使用方法实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: Python函数进阶的使用方法实例分析

本文链接: https://www.lsjlt.com/news/330709.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python函数进阶的使用方法实例分析
    今天小编给大家分享一下Python函数进阶的使用方法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、函数的命名空间...
    99+
    2023-06-30
  • python高阶函数使用的方法
    今天小编给大家分享一下python高阶函数使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、高阶函数函数定义pyt...
    99+
    2023-07-02
  • Python Pandas pandas.read_sql_query函数实例用法分析
    Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的...
    99+
    2022-06-02
    Python Pandas pandas.read_sql_query
  • Python进阶学习之特殊方法实例详析
    前言 最近在学习python,学习到了一个之前没接触过的--特殊方法。 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init__$,类似于java中的构造器,这个就是...
    99+
    2022-06-04
    进阶 实例 方法
  • python开发中range()函数用法实例分析
    本文实例讲述了python开发中range()函数用法。分享给大家供大家参考,具体如下: python中的range()函数的功能很强大,所以我觉得很有必要和大家分享一下 就好像其API中所描述的: If ...
    99+
    2022-06-04
    函数 实例 python
  • MYSQL函数使用实例分析
    这篇“MYSQL函数使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MYSQL函数使用实例分析”文章吧。MYSQL...
    99+
    2023-06-30
  • 关于Python函数参数的进阶用法
    目录1、关键字参数和位置参数(1)关键字参数(2)位置参数2、接受任意数量的参数(1)接受任意数量的位置参数 (2)接受任意数量的关键字参数(3)同时接受任意数量的位置参数和关键字参...
    99+
    2022-11-12
  • python基础语法之函数应用实例分析
    这篇“python基础语法之函数应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python基础语法之函数应用实例...
    99+
    2023-06-30
  • Java数组的使用方法实例分析
    这篇文章主要介绍“Java数组的使用方法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java数组的使用方法实例分析”文章能帮助大家解决问题。一、前言学习概述:前八天我们学习了语法基础、运算...
    99+
    2023-06-30
  • Linux的fork函数使用实例分析
    本文小编为大家详细介绍“Linux的fork函数使用实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux的fork函数使用实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一个进程,包括代码、数...
    99+
    2023-06-27
  • 从柯里化分析JavaScript重要的高阶函数实例
    目录前情回顾百变柯里化缓存传参缓存判断缓存计算缓存函数防抖与节流lodash 高阶函数结语前情回顾 我们在前篇 《✨从历史讲起,JavaScript 基因里写着函数式编程》 讲到了 ...
    99+
    2022-11-13
    JavaScript 柯里化高阶函数 JavaScript 高阶函数
  • python析构函数的使用方法
    这篇文章将为大家详细讲解有关python析构函数的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代...
    99+
    2023-06-14
  • Python函数与控制语句使用实例分析
    函数“脏活累活交给函数来做”,首先,看看Python中定义函数的方法。def 函数名(参数1,参数2...): return '结果'函数的主要目的是处理重复出现的任务,例如,计算直角三角形的面积时需要定义两条直角边和相应...
    99+
    2023-05-18
    Python
  • HTML使用方法实例分析
    本文小编为大家详细介绍“HTML使用方法实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML使用方法实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先使用 V...
    99+
    2022-10-19
  • Java方法使用实例分析
    这篇“Java方法使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java方法使用实例分析”文章吧。一、方法的概念...
    99+
    2023-06-30
  • Python函数定义与使用的示例分析
    这篇文章主要介绍Python函数定义与使用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数的定义什么是函数? &mdash; > 函数是具有某种特定功能的代码块,可以重复使用(在前面数据类型...
    99+
    2023-06-29
  • Python字典的常用方法实例分析
    这篇文章主要讲解了“Python字典的常用方法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python字典的常用方法实例分析”吧!字典添加与修改方法利用 [ ] 处理看到 [] 我...
    99+
    2023-06-29
  • Python中函数的参数类型实例分析
    今天小编给大家分享一下Python中函数的参数类型实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Python的函...
    99+
    2023-07-02
  • python中zip()方法应用实例分析
    本文实例分析了python中zip()方法的应用。分享给大家供大家参考,具体如下: 假设有一个集合set, 需要对set中的每个元素指定一个唯一的id,从而组建成一个dict结构。 这个场景可以演化成,两个...
    99+
    2022-06-04
    应用实例 方法 python
  • JavaScript函数语法、函数调用和函数返回实例分析
    这篇文章主要介绍了JavaScript函数语法、函数调用和函数返回实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript函数语法、函数调用和函数返回实例分析...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作