python 函数嵌套和nonlocal关键字

python 函数嵌套和nonlocal关键字python函数可以嵌套使用,使用也比较简单,举个栗子:defouter():print("outer")definner():print("inner")inner()outer()##运行结果:outerinnernonlocal关键字:与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

python函数可以嵌套使用,使用也比较简单,举个栗子:

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

## 运行结果:
outer
inner

nonlocal关键字:

与global关键字有点相似,可以对比着理解。nonlocal关键字只能作用域局部变量,且始终找离当前最近的上层局部作用域中的变量。看栗子:

a = 1
def outer():
    nonlocal a
    a = 2
outer()
print(a)

结果:报错  SyntaxError: no binding for nonlocal ‘a’ found,

原因分析:nonlocal关键字是能作用域局部变量,当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,结果没找着,报错。

a = 1
def outer():
    global a 
    a = 2
    def inner():
        nonlocal a
        a = 3
    inner()
    print(a)
outer()
print(a)

结果:报错  SyntaxError: no binding for nonlocal ‘a’ found,

原因分析:当使用nonlocal声明变量 a 时,就会往上最近一层局部作用域寻找局部变量 a ,此时外层局部作用域虽然能找到变量a,但是这找到的 这个a 已经被global声明为全局变量了,所以报错。

a = 1
def outer(): 
    a = 2
    def inner():
        nonlocal a
        a = 3
        def inner2():
            print(a)
        inner2()
        print(a)
    inner()
    print(a)
outer()
print(a)

## 运行结果:
3
3
3
1

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196874.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 双机热备 ip地址_防火墙双机热备技术「建议收藏」

    点击上方蓝字关注我吧!双机热备技术双机热备技术产生的原因:传统的组网中,内部用户和外部用户的交互全部通过唯一的一台防火墙,当该防火墙出现故障时,内部网络中所有的主机与外部网络之间的通讯将中断,通讯可靠性无法保证。双机热备技术的出现改变了可靠性难以保证的尴尬状态,通过在网络出口部署两台或多台网关设备,保证了内部网络于外部网络之间的通讯畅通。为了避免传统组网中所形起的单点故障的发生,通常情况…

    2022年4月9日
  • split方法_js字符串截取split

    split方法_js字符串截取split描述split()通过指定分隔符对字符串进行切片,如果参数num有指定值,则仅分隔num+1个子字符串语法split()方法语法:str.split(str="",

    2022年8月3日
  • SPFA算法详解

    SPFA算法详解SPFA算法~~它死了~~

    2022年7月4日
  • 2022.3.5 PAT甲级 2022年春季考试 89分「建议收藏」

    2022.3.5PAT甲级2022年春季考试89分7-1SimpleLieDetection(20分)简单字符串问题,注意连续相同子段和连续上升子段的细节。#include<iostream>#include<cstdio>#include<string>usingnamespacestd;intmain(){ intn,t,k; strings; cin>>n>>t>>k; wh

    2022年4月11日
  • 多线程死锁的产生以及如何避免死锁

    多线程死锁的产生以及如何避免死锁一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,在一条河上有一座桥,桥面很窄,只能容纳一辆汽车通行。如果有两辆汽车分别从桥的左右两端驶上该桥,则会出现

    2022年7月13日
  • Ldap服务器搭建流程

    Ldap服务器搭建流程之前搭建了个Ldap服务器,今天想要再另一台机器上搭建的时候发现很多地方还是会遇到坑,于是将搭建过程梳理记录下来,避免以后再遇到坑一、安装配置ldap1、安装ldap    yuminstall-yopenldap*2、拷贝配置文件    cp/usr/share/openldap-servers/slapd.conf.obsolete/etc/openldap/slapd…

    2022年5月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号