函数

函数对象

  • 函数是第一类对象
  • 函数名可以被引用
  • 函数名可以当作参数使用
  • 函数名可以当作返回值使用
  • 函数名可以当作容器类型的元素

函数嵌套

  • 嵌套调用:在函数内部中调用函数

  • 嵌套定义:在函数内部中定义函数

名称空间

存放变量名称的空间,分为内置名称空间全局名称空间局部名称空间

  • 内置名称空间:python中,提前定义的名字,存在内置名称空间中。例如:关键字、内置方法

  • 全局名称空间:存放于文件级别的名字,就是全局名称空间

    if / while / for 内部定义的名字,在执行之后都存放于全局名称空间

    # if 的示例:
    var = 4
    if var > 5:
    var = "var 大于5"
    else:
    var = "var 小于等于5"
    print(var) # 打印结果:var 小于等于5 # while 的示例:
    num = 0
    while num <= 3:
    num += 1
    print(num) # 打印结果:4 # for 的示例
    for i in range(2):
    pass
    print(i) # 打印结果:1
  • 局部名称空间函数内部定义的所有名字都是存放于当前函数的内置名称空间

如果想访问一个变量值,必须先访问对应的名称空间,获取到该变量的名称以及名称和值内存地址之间的关系。

生命周期

  • 内置名称空间python 解释器启动时生效,关闭时失效
  • 全局名称空间当前python文件执行生效,执行结束后失效
  • 局部名称空间函数调用时生效,函数体代码结束时失效

查找顺序

  • 局部名称:局部 全局 内置函数

  • 全局名称:全局 内置

    内置再找不到就会报错

  • 函数内部使用的名字,在定义阶段已经规定死了,与调用位置无关

作用域

  • 全局作用域全局可以调用的名字存在于全局作用域。内置名称空间和全局名称空间属于此处

  • 局部作用域局部可以调用的名字存在于局部作用域。局部名称空间属于此处

  • global:将局部名称空间的变量声明成全局变量

    注意:global需要在函数内部声明,若在函数外声明,则函数依然无法操作

    # 这种情况不能修改x1的值
    x1 = 1
    def func1():
    x1 = 2
    func1()
    print(x1) # 打印结果:1 # 使用global 后,可以修改x2的值
    x2 = 1
    def func2():
    global x2 # 先声明成全局变量
    x2 = 2
    func2()
    print(x2) # 打印结果:2 # global 若在函数外声明,无法操作变量
    global x3
    x3 = 1
    def func2():
    x3 = 2
    func3()
    print(x3) # 打印结果:1
  • nonlocal:在局部名称空间声明局部变量

    nonlocal 声明后的变量会从当前函数的外层函数开始一层层去查找该变量。若是一直到最外层函数都找不到,则会抛出异常。

    def f3():
    x = 4
    def f1():
    y = 2
    def f2():
    nonlocal x
    x = 3
    f2() # 调用f2(),修改f1作用域中名字x的值
    print(x) # 在f1作用域查看x。打印结果:3
    f1()
    print(x) # 打印结果:3
    f3()
    def f3():
    x = 4
    def f1():
    x = 2
    def f2():
    nonlocal x
    x = 3
    f2() # 调用f2(),修改f1作用域中名字x的值
    print(x) # 在f1作用域查看x。打印结果:3
    f1()
    print(x) # 打印结果:4
    f3()

python基础-函数作用域的更多相关文章

  1. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  2. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  3. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  4. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  5. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  6. Python基础-变量作用域

    1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...

  7. Python基础-作用域和命名空间(Scope and Namespace)

    在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 ...

  8. Python基础-函数篇

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数  函数与函数式编程 1.面向对象: 华山派-- ...

  9. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

随机推荐

  1. Redis高可用集群方案

    Redis为我们提供了哨兵,它就像一个为我们的Redis服务站岗的人,当主服务器发生异常时,他会通过投票的方式,将从服务节点升为主服务节点.当我们处理好主节点故障并重启时,原来挂掉的主节点,作为新的主 ...

  2. RDD基础-笔记

    RDD编程 基础Spark中的RDD是一个不可变的分布式对象集合.每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上.RDD可以包含Python.java.Scala中任意类型的对象,甚至可 ...

  3. mongodb完整安装

    在线下载安装依赖包 yum -y install gcc gcc-c++ yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison yu ...

  4. 决策树算法系列之一 ID3

    1 什么是决策树 通俗来说,决策树分类的思想类似于找对象 一个女孩的母亲要给这个女孩介绍男朋友 (分类问题.见或不见) 女孩有自己的一套标准 长相 收入 职业 见面与否 丑 高 某箭队经理 不见 中等 ...

  5. Redis系列(一):Redis简介

    一.Redis概述 Redis是一个开源(遵循BSD协议)Key-Value数据结构的内存存储系统,用作数据库.缓存和消息代理.它支持5种数据结构:字符串string.哈希hash.列表list.集合 ...

  6. PowerSploit-CodeExecution(代码执行)脚本渗透实战

    首先介绍一下国外大牛制作的Powershell渗透工具PowerSploit,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察.权限提升.权限维持. 项目地址:https://g ...

  7. [JZOJ5772]【NOIP2008模拟】今天你AK了吗?

    Description AK:All kill“你为什么没背书?”“没有为什么,我就是没背书.”“……我去年买了个表,G—U—N!”头铁王InFleaKing把背书的时间都拿去列排列了......n= ...

  8. 【Dubbo】Zookeeper+Dubbo项目demo搭建

    一.Dubbo的注解配置 在Dubbo 2.6.3及以上版本提供支持. 1.@Service(全路径@org.apache.dubbo.config.annotation.Service) 配置服务提 ...

  9. 打python&adb组合拳,实现微信读书永久免费读

    用过“微信读书”的朋友都知道,如果我们想阅读全本的付费书籍,除了购买整本(使用书币)外,还可以使用无限卡.可无论是购买全书还是无限卡,归根结底都是要花银子的. 除此之外,还有一种方式——用阅读时长兑换 ...

  10. CocosCreator中_worldMatrix到底是什么(下)

    Cocos Creator 中 _worldMatrix 到底是什么(下) 1. 摘要 上篇介绍了矩阵的基本知识以及对应图形变换矩阵推倒.中篇具体介介绍了对应矩阵转换成cocos creator代码的 ...