我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python的函数学习2

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python的函数学习2

用来存放名字的地方,有三种名称空间:内置名称空间,全局名称空间,局部名称空间。

1 比如执行test.py:
2 
3 python test.py
4 1、python解释器先启动,因而首先加载内置名称空间
5 2、执行test.py文件,然后以文件为基础,加载全局名称空间
6 3、在执行文件的过程中如果调用函数,则临时产生局部名称空间

名称的加载顺序是先加载内置名称空间,再加载全局名称空间,最后是局部名称空间,所以,如果在全局名称空间中使用局部名称空间,是错误的,因为根本就找不到。

而在函数调用时查找名字的顺序是:局部名称空间--->全局名称空间--->内置名称空间。

首先来谈一下什么是作用域?先看一个例子:

 1     b = 20
 2     def func1():
 3         a = 10
 4         print(a)
 5         print(b)
 6 
 7     def func2():
 8         print(b)
 9         # print(a)
10 
11     func1()
12     func2()

上面这段代码虽然简单,却可以很好的说明了函数作用域的问题,如上,如果注释掉函数func2的print(a)这一句,程序可以正常运行,但是如果加上这一句就出错,出错的原因是a没有定义,为什么b在两个函数中都可以引用,而a只能在func1中使用呢?这就是因为a的作用域的问题了。

变量作用域:

  ①L(Local)局部作用域

  ②E(Enclosing)闭包函数外的函数中

  ③G(Globa)全局作用域

  ④B(Built-in)内建作用域

 

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,最后去内建中找。

那么这具体是什么意思呢?

  如上面的例子中,由名称空间的加载可知调用函数func1时产生func1的局部名称空间,而a就在该空间内,执行函数func1时从该名称空间中查找a,所以func1可以找到a。

  但是函数func2的局部名称空间中却没有变量a,所以找不到,那就去全局名称空间找,也没有,所以出错。(Enclosing是对于闭包来说的)

  这就说明a的作用域只能作用于函数func1。而b属于全局名称空间,属于全局变量,因此其可被func1和func2调用。

 

global,nonlocal关键字:

  当内部作用域想修改外部作用域的变量时,要用到global,nonlocal关键字。

  global 关键字用于局部作用域修改全局作用域时在局部变量前加上global。

  nonlocal 关键字用于要修改嵌套作用域(即Enclosing,外层非全局作用域)。

1     a = 10
2     def func():
3         global a
4         a += 3
5         print(a)
6 
7     func()

这是一个很简单的使用global关键字,如果注释掉global a 这一句,程序会报错。

 

 1     def func1():
 2         n = 0
 3 
 4         def func2():
 5             nonlocal n
 6             x = n
 7             n += 1
 8             return x
 9 
10         return func2
11 
12 
13     c = func1()  
14     print(type(c))  # 可以看到c是一个函数对象
15     print(c())    # 执行c()其实就是执行func2()

这是一个简单的闭包,可以看到首先是函数func1里嵌套了一个函数func2,func2调用了func1的内部变量。如果注释掉nonlocal n的话会出错。

闭包:

  闭包就是能够读取其他函数内部变量的函数,即定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

免责声明:

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

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

python的函数学习2

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python的函数学习2

用来存放名字的地方,有三种名称空间:内置名称空间,全局名称空间,局部名称空间。1 比如执行test.py:2 3 python test.py4 1、python解释器先启动,因而首先加载内置名称空间5 2、执行test.py文件,然后以文
2023-01-30

Python学习-函数

DRY:don`t repeat yourself函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建
2023-01-31

Python学习——函数

1.函数定义:def Firstfunction(): 'Mashiro' print("I love Mashiro!")print(Firstfunction.__doc__)#函数文档Firstfunction()#函数调
2023-01-30

Python学习 :函数

函数函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是调用(Calling)函数。函数的作用:1、减少重复代码2、方便修改,更
2023-01-30

Python学习日记-2

*使用pickle处理数据存储,类似于java中的serialization,是将对象转化为二进制码存入文件中,主要函数pickle.dump(obj,file),pickle.load(file)*在每个文件加入后缀.pkl,实现逐行数据
2023-01-31

python 学习总结2

温度转换问题一、温度转换  目前有两种表示温度的方法一种是摄氏度另一种是华氏度,摄氏度的结冰点为0度,沸点为100度将温度等分刻画,华氏度的结冰点为32度,沸点为212度将温度进行等刻度划分。  现需要将按格式输入的摄氏度转换为华氏度,将输
2023-01-30

Python学习笔记(2)

Unicode字符串: GB2312编码为表示中文产生 python内部编码是unicode编码Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填0 就可以以Unicode表示的字
2023-01-31

python基础学习2

一.算数运算符+加法,-减法,*乘法,/除法,//地板除,%求余,**幂运算。二.逻辑运算符非not、且and、或or。优先级依次为not,and,or。三.print()end结尾print()#默认为print(end="\n"),想要
2023-01-30

Python学习笔记(2)

Python开发IDE:pycharm   ,eclipse快捷键:Ctrl+?整体注释一·运算符  +(加)   -(减)  *(乘)   /(除)  **(幂)  %(余)   //(商)    判断某个东西是否在某个东西里边  in
2023-01-30

Python学习:函数(function

编写函数def是可执行的代码。Python函数是有一个新的语句便携的,即def。不像C这样的编译语言,def是一个可执行的语句,函数并不存在,知道Python运行了def后才存在。事实上,if语句、while语句升至是其他的 def中嵌套都
2023-01-31

Python学习笔记2——Python概

Python概述  语言:交流的工具,沟通媒介  计算机语言:人跟计算机交流的工具,翻译官  Python是计算机语言里的一种    代码:人类语言,同过代码命令机器,跟机器交流    Python解释器: 就是那个担任翻译工作的二狗子同学
2023-01-30

Python自动化开发学习2-2

集合创建集合可以用set(),或者直接用{}set_a = set([1,2,3,4,5])set_b = {1,3,5,7,9}print(set_a)print(set_b)print(type(set_a),type(set_b))集
2023-01-31

Python自动化开发学习3-2-匿名函

下面这部分内容计划应该是第三周讲的,但是应该是当时来不及,第四周上来的内容又比较重要,就放到了第四周讲完后才讲了。匿名函数如果函数值使用一次,并且结构结单(需要一行表达式),就可以使用匿名函数。匿名函数的好处:程序一次行使用,所以不需要定义
2023-01-31

python函数学习一(跳出函数)

#!/bin/python#-*- coding -*-def printinfo( nu, *others ): print nu for var in others: print var retur
2023-01-31

python学习笔记2—python文件

python学习笔记2——python文件类型、变量、数值、字符串、元组、列表、字典一、Python文件类型1、源代码python源代码文件以.py为扩展名,由pyton程序解释,不需要编译[root@localhost day01]# v
2023-01-31

【12】Python函数学习(中)

作用域、局部和全局变量  前向引用:def test(name,age=18,*args,**kwargs):      print(name)    print(age,args,kwargs)    school("Test")   #
2023-01-31

python学习笔记 函数

一等函数在python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足以下条件的程序实体:在运行时创建能赋值给变量或数据结构中的元素能作为参数传给函数能作为函数的返回结果在python中,整数、字符串和字典都是一等对象,没有什么特
2023-01-31

python学习2-将python版本改

1.首先查看当前python的版本[root@localhost~]# python -VPython 2.6.6 2.解压2.7版本的python源码包tar xfPython-2.7.tar.bz2cdPython-2.7./confi
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录