Python基础知识 2022-11-16 ★ 小结 83-85 函数_嵌套_nonlocal_global_LEGB

嵌套函数_内部函数_数据隐藏

嵌套函数(内部函数)

在函数内部定义的函数
出了函数就调用不了

# 测试嵌套函数的定义  
  
def outer():  
    print("outer running...")  
  
    def inner01():  
        print("inner01 running")  
    inner01()  
  
outer()  
inner01() # 此处无法调用

什么时候用嵌套函数

  1. 封装:数据隐藏(内部函数看不到)
  2. 贯彻DRY(dont repeat yourself)原则:避免函数内部重复代码
  3. 闭包❓后面讲
def printChineseName(name, familyName):  
    print("{0} {1}".format(familyName, name))  
def printEnglishName(name, familyName):  
    print("{0} {1}".format(name, familyName))  

# 上面两个可以合并成下面一个

def printName(isChineseName, name, familyName):  
    if isChineseName:  
        print("{0}{1}".format(familyName, name))  
    else:  
        print("{0} {1}".format(name, familyName))  

printName(True, "翠花", "何")  
printName(False, "Laura", "Smith")

nonlocal_global

nonlocal 用来声明外层的局部变量
global 用来声明全局变量
操作:

# 测试nonlocal、global 关键字的用法  
a = 100  
print("a:", a)  
  
def outer():  
    b = 10  
    print("outer b:", b)  
    def inner():  
        nonlocal b # 声明外部函数的局部变量  
        print("inner b:", b)  
        b = 20 # 如果前面不用nonlocal 这里就不能修改  
  
        global a # 声明全局变量  
        a = 1000  
  
    inner()  
    print("outer b after inner:", b)  
outer()  
print("a after inner:", a)

LEGB规则

Python在查找变量的名字的时候,是按照LEGB的规则查找的:
Local → Enclosed(闭包) → Global → Build-in

Local:函数或类的方法内部
Enclosed:嵌套函数(闭包)
Global:模块中的全局变量
Built in:Python为自己保留的特殊名称

# 测试LEGB  

# str = "global str"

def outer():  
    str = "outer"  
    def inner():  
        str = "inner"  
        print(str)  
    inner()  
  
outer()

我的小结:就是从自己这个方法内部,逐层向外找变量名,层层向外探索,就好像探索宇宙一样…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值