1.外部函数&内部函数

内部函数:

定义在某个函数的内部,就是内部函数;

【注意事项】:

1).内部函数可以随意使用它外部函数中的内容

2).外部函数不能使用内部函数中的内容

3).内部函数不能直接在外界被调用(与作用域有关)

4).内部函数的执行需要依赖于外部函数

nonlocal关键字:

如果想要在内部函数中修改其外部函数中变量的值,

可以先使用nonlocal定位到某个变量,然后重新赋值即可--> 例如:nonlocal aa = 30

演示外部函数和内部函数的结构关系,
演示他们的调用执行过程
#定义外部函数outer()
def outer():
#外部函数的变量a,赋值为10
a=10
print('outer1....') #定义内部函数inner()
def inner():
'''
思考:内部函数可不可以使用外部函数的变量a?
可以的
'''
print('inner:%d' % a)
print('inner...') #定义内部函数变量b,赋值为20
b=20 #在当前的外部函数中启动内部函数
inner()
print('outer2...')
'''
思考:外部函数可不可以使用内部函数的变量b?
不可以
'''
# print(b) def inner1():
'''
思考:内部函数可不可以修改外部函数中的变量a的值为20?
可以的,使用nonlocal关键字来实现,原理和golbal一致
'''
nonlocal a
a=20
print(a)
inner1()
print('outer:%d' %a) #调用外部函数,间接也执行内部函数
outer()
内部函数不能直接在外界被调用,一定是需要在它所作用的外部函数中被调用,
执行也是要外部函数的执行 强化内部函数和外部函数的知识点:
a=100
def outer():
a=10
def inner():
a=20
print('我是inner...')
print('a=%d' % a)
def litter():
a=30
print('我是litter...')
print('a=%d' % a)
litter()
inner()
print('我是outer...')
print('a=%d' % a) #执行外部函数outer()
outer()

python第十六课——外部函数and内部函数的更多相关文章

  1. python五十六课——正则表达式(常用函数之findall)

    4).函数:findall(regex,string,[flags=0]): 参数: 和match.search一样理解 功能: 将所有匹配成功的子数据(子串),以列表的形式返回: 如果一个都没有匹配 ...

  2. python五十六课——正则表达式(常用函数之search())

    函数:search(regex,string,[flags=0]):参数:和match一样理解功能:从头开始匹配字符串中的数据,如果头不匹配继续往后尝试匹配,直到有第一个匹配成功的子数据,立即返回一个 ...

  3. python五十六课——正则表达式(常用函数之compile())

    2).compile(regex,[flags=0]):返回一个Pattern对象(认为:它内部已经封装了一套regex和flags) 可以再通过Pattern对象继续调用match函数(此时只需要传 ...

  4. python五十六课——正则表达式(常用函数之match)

    函数:match(regex,string,[flags=0])参数:regex:就是正则表达式(定义了一套验证规则)string:需要被验证的字符串数据flags:模式/标志位,默认情况下(不定义) ...

  5. python第二十六课——装饰器

    装饰器是闭包的一种使用场景: python中的装饰器在定义上需要传入一个函数对象, 在此函数执行之前或者之后都可以追加其它的操作, 这样做的好处是,在不改变源码(原本业务逻辑的)同时,进行功能的扩展: ...

  6. python第二十二课——list函数

    演示list类型中常用的一些函数: 1.append(obj):将obj元素追加到列表的末尾 lt=['路费','佐罗','山治','乔巴','乌索普','纳米桑'] #append(): lt.ap ...

  7. python第十六课——ascii码

    2.ascii码 美国设计出来的一张编码表,将涉及的字符都编号了,底层仍然还是进行二进制的运算: 记住:3个范围段 1).'0' --> 码值:48 2).'A' --> 码值:65 3) ...

  8. Python爬虫十六式 - 第三式:Requests的用法

    Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽   Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...

  9. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. ES6新特性:var与let区别

    1.let的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效.var定义的变量为全局变量. 2.var在同一块可以重复定义,let不能 //正常 function () { var ...

  2. [转] 疯狂的JSONP

      何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域 ...

  3. Service生命周期以及应用

    Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...

  4. Intellij IDEA run coverage之覆盖率测试

    Intellij IDEA run coverage之覆盖率测试 idea 的coverage + 我们自己写的测试用例.最后看一下,我们要测的代码有没有测试到,这是一个不错的提高代码质量的方法. i ...

  5. JAVA 判断字符串是否可转化为JSONObject、JSONArray

    有时,我们需要判断字符串在转化为JSON对象或者JSONArray时,我们可以使用JSONObject.parseObject和JSONArray.parseArray,但是有时候我们需要在转化之前判 ...

  6. ci 3.0 默认路由放在子文件夹 无法访问的解决办法

      比方说你想配置默认路由为: $route['default_controller'] = 'index/home'; ci3.0之前是可以放在 controllers中的子文件夹中的,但是到了ci ...

  7. Gson基本操作,JsonObject,JsonArray,String,JavaBean,List互转

    (转自)https://www.cnblogs.com/robbinluobo/p/7217387.html String.JsonObject.JavaBean 互相转换 User user = n ...

  8. windows 7 Alt+Tab 的风格改成 XP 风格

    1.开始菜单-运行-输入“regedit”. 2.找到这个位置“[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explore ...

  9. Object hashcode

    java jvm怎么找到一个对象? 一个对象有一个独一无二的hashcode,这样就可以找到这个对象了. 但java 的hashcode 实现的不好,有可能两个不同的对象有一个相同的hashcode, ...

  10. 六位数随机验证 sms_code.py

    #!/usr/bin/python env # coding:utf-8 import random def code(num=6): res = "" for i in rang ...