一 函数的名称空间

  1. 内置空间:存放python解释器内置函数的空间
  2. 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失.
  3. 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失)

加载顺序:内置空间 > 全局空间 > 局部空间

取值顺序:局部空间 > 全局空间 > 内置空间

  1. 作用域

    全局作用域:内置空间 + 全局空间

    局部作用域:局部空间

二 函数的嵌套

只要遇到变量名()就是函数的调用,没有()就不是函数的调用

函数调用执行后,函数体中开辟的空间就自动销毁了

2.1 嵌套

def func():
a = 1
def foo():
b = 2
print(b) # 2
print(a) # 1
def f1():
print(b) # 2
return f1()
return foo()
print(func())

结果:

2

1

2

None

局部空间里的变量就近使用上一级空间和全局空间里的变量,两个并列局部空间里的变量不能相互使用

2.2 函数互相引用

def a():
a = 1
c()
print(c) def c():
c = 3
print(a)
def run():
a()
run()

结果:

<function a at 0x0000000002101E18>

<function c at 0x00000000025B98C8>

输出的是定义函数a\c的内存地址,并列的内置空间里的变量不能相互使用

2.3 global 和 nonlocal

1. global 只修改全局变量对应的值

a = 10
def func():
global a # 声明修改全局变量的值
a += 1
print(a)
func()
print(a)

结果:

11

11

在函数内部修改全局的变量,如果全局中不存在就创建一个变量

lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
def func():
lst.append("马云") # 对于可变数据类型可以直接进行访问
print(lst)
func()
print(lst)

结果:

['麻花藤', '刘嘉玲', '詹姆斯', '马云']

['麻花藤', '刘嘉玲', '詹姆斯', '马云']

2. nonlocal 就近修改局部空间的变量值,不会修改全局空间的变量值

a = 10
def func():
def f1():
a = 20
def foo():
nonlocal a
a += 1
print(a) # 21
foo()
print(a) # 21
f1()
func()
print(a) # 10

输出:

21

21

10

三 函数名的运用

  1. 函数名的内存地址

    print(func)

  2. 函数名可以赋值给其他变量

  3. 函数名可以当做函数的参数去传递

    注意点:传递函数名的时候如果+()就是在传递这个函数的返回值

  4. 函数名可以当做函数的返回值被返回

  5. 函数名可以当做元素存放在一个容器里

函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用的更多相关文章

  1. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  2. day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义

    复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...

  3. CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】

    函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...

  4. Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.

    一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...

  5. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

  6. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  7. python基础之函数参数,名称空间,以及函数嵌套

    函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...

  8. python 函数的名称空间及作用域

    一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...

  9. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

随机推荐

  1. IDEA提示找不到Mapper接口:Could not autowire.No beans of 'xxxMapper' type found

    前言 相信大多数互联网公司的持久层框架都是使用 Mybatis 框架,而大家在 Service 层引入自己编写的 Mapper 接口时应该会遇到下面的情况: 我们可以看到,上面的红色警告在提示我们,找 ...

  2. Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法

    java.lang.Class类提供了获取类的各种信息对象的静态方法. 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79363921 ...

  3. 我的第一个CCS工程

    直接用别人已经弄好的例程,学习创建属于自己的工程,就发现还是有很多问题的: 首先是:1. 想加载头文件到include工程文件夹中却发现总是在Document文件夹中,很是纳闷,在网上搜了搜,发现时路 ...

  4. [Go] go连接influxdb的库

    开启了influxdb后,会监听8086端口下载客户端代码git clone https://github.com/influxdata/influxdb1-client.git $GOPATH/sr ...

  5. Druid-代码段-4-2

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程4.1,连接池瘦身: //连接池瘦身 public void shrink(boolean checkTime, boole ...

  6. CodeForces 1238C(思维+贪心)

    题意 https://vjudge.net/problem/CodeForces-1238C 您现在正在玩一个游戏,您初始在一个高度 h 的悬崖 悬崖沿壁高度为 1-h 的这些位置均有平台,平台有两种 ...

  7. SSH整合二

    结构图 articles模块 实体类Articles.java package com.jt.articles.entity; public class Articles { private Inte ...

  8. MongoDB学习笔记(一、MongoDB入门)

    目录: 为什么要使用nosql mongo的简介 应用场景 入门demo 为什么要使用nosql: 随着互联网的发展,用户数量激增,访问量的上涨,传统的关系型数据库的性能也趋于瓶颈. 关系型数据库难以 ...

  9. 【转】bootstrap table轻松实现数据表格

    在使用bootstrap table时可能在很多时候回用的表格来显示数据,如果自己写那肯定没问题,但是数据展示出来就麻烦多了,然而bootstrap table 封装了一套完善的数据表格组件,把从后台 ...

  10. 题解:swj社会摇入魔第五课

    题目链接; solution: 根据画图模拟可以知道除第一次纯下降 其余每次都是一半一半的增加 S=h+h+h/2+h/4+h/8+...; 即S=h+2h=3h #include<bits/s ...