文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

函数(二)

2023-01-31 00:48

关注

函数的嵌套

定义

函数内部定义的函数,无法在函数外部使用内部定义的函数

def f1():
    def f2():
        print('from f2')
    f2()
f2()
def f1():
    def f2():
        print('from f2')
f1()
from f2

圆的面积周长

from math import pi
def circle(radius,action='area'):
    def area():
        return pi*(radius**2)
    def perimeter():
        return 2*pi*radius
    if action=='area':
        return area()
    else:
        return perimeter()
print(f'circle(10):{circle(10)}')
print(f"circle(10,action='perimeter'): {circle(10,action='perimeter')}")

名称空间与作用域

定义

内存中有一块内存存储变量名与变量间绑定关系的空间,称为名称空间

内置名称空间

存放python解释器自带的名字

生命周期:解释器启动时生效,关闭失效

全局名称空间

处内置与局部的名字之外,其余都存放在全局名称空间

局部名称空间

用于存放函数调用期间函数体产生的名字
生命周期:函数调用期间生效,函数执行结束后失效

def f1():
    def f2():
        print('from f2')
        f2()
f1()

加载顺序

内置-全局-局部

查找顺序

当为局部名称空间:局部-全局- 内置

x = 1
y = 2
len = 100


def func():
    y = 3
    len = 1000
    print(f"y: {y}")
    print(f"len: {len}")
    # print(a)  # NameError: name 'a' is not defined


func()
y: 3
len: 1000
x = 1


def func():
    print(x)


x = 10
func()
10

作用域

域指的是区域,作用域即作用区域

全局作用域

全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。

x = 1


def bar():
    print(x)


bar()
1
局部作用域

局部作用域:局部有小,临时存储,只包含局部名称空间

def f1():
    def f2():
        def f3():
            print(x)
        x = 2
        f3()
    f2()


f1()
2

注意:作用域关系在函数定义阶段就固定死了,与函数的调用无关

# 作用域注意点
x = 1


def f1():  # 定义阶段x=1
    print(x)


def f2():
    x = 2
    f1()


f2()
1

补充:global:修改全局作用域中的变量

​ nonlocal修该局部作用域中的变量

x = 1


def f1():
    x = 2

    def f2():
        #         nonlocal x
        x = 3

    f2()
    print(x)


f1()
2
x = 1


def f1():
    x = 2

    def f2():
        nonlocal x
        x = 3

    f2()
    print(x)


f1()
3

注意:

  1. 在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。

  2. 在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯