作用域和函数对象

名称空间的作用域

  作用域

    作用域就是名称空间所能够作用的范围。

    内置名称空间

      程序任何阶段任何位置均可使用(全局有效)。

    全局名称空间

      程序任何阶段任何位置均可使用(全局有效)。

    局部名称空间

      一般情况下只在各自的局部名称空间中有效。

 

global与nonlocal关键字使用

  关键字global

    局部修改全局变量 需要使用global关键字声明。

    如果数据为不可变类型则需要关键字global声明。如果数据为可变类型则无需关键字global声明。

 

 

 

  关键字nonlocal

    内部局部修改外部局部,需要使用nonlocal关键字声明。

    如果数据为不可变类型则需要关键字nonlocal声明。如果数据为可变类型则无需声明。

 

 

 

 

函数对象(函数名)

  用法1:函数名可以当做变量名赋值

def index():
    print('from index')
a = index
a()  # 本质就是在调用index函数

 

  用法2:函数名可以当做函数的实参

def index():
    print('from index')
def func(a):
    print(a)
    a()
    print('from func')
func(index)

 

  用法3:函数名可以当做函数返回值

def index():
    print('from index')
def func():
    print('from func')
    return index
res = func()  # 调用func并接受func的返回值
res()

 

  用法4:函数名可以当做容器类型的元素

def index():
    print('from index')
l = [111, 222, 333, index()]
print(l)

 

函数的嵌套调用

  函数的嵌套调用指函数内部调用其他函数。

 

 

函数的嵌套定义

  函数体内部定义其他函数。

  目的是将复杂的功能全部隐藏起来 暴露一个简单的接口。

 

闭包函数  

  闭包函数的两个特征

    闭:指定义在函数内部的函数。
    包:内部函数使用了外部函数名称空间中的名字。

def outer():
    x = 222
    def index():
        print('from index', x)
    return index

 

  传值

    利用闭包函数给函数传参。

 

posted @   临江沂水  阅读(38)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示