函数命名空间

命名空间 有三种内置命名空间 —— python解释器    就是python解释器一启动就可以使用的名字存储在内置命名空间中    内置的名字在启动解释器的时候被加载进内存里全局命名空间 —— 我们写的代码但不是函数中的代码    是在程序从上到下被执行的过程中依次加载进内存的    放置了我们设置的所有变量名和函数名局部命名空间 —— 函数    就是函数内部定义的名字    当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了

在局部:可以使用全局、内置命名空间中的名字在全局:可以使用内置命名空间中的名字,但是不能用局部中使用在内置:不能使用局部和全局的名字的

def func():
    a = 1

func()
print(a)

def max(l):
    print(‘in max func‘)

print(max([1,2,3]))

在正常情况下,直接使用内置的名字当我们在全局定义了和内置名字空间中同名的名字时,会使用全局的名字当我自己有的时候 我就不找我的上级要了如果自己没有 就找上一级要 上一级没有再找上一级 如果内置的名字空间都没有 就报错多个函数应该拥有多个独立的局部名字空间,不互相共享

def input():
    print(‘in input now‘)
def func():
    # input = 1
    print(input)
func()
def fun1():
    a = 1

def fun2():pass

func  --> 函数的内存地址函数名() 函数的调用函数的内存地址() 函数的调用

作用域两种全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域  ——globals()局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()

a = 1
def func():
    global a
    a = 2

func()
print(a)

对于不可变数据类型 在局部可是查看全局作用域中的变量但是不能直接修改如果想要修改,需要在程序的一开始添加global声明如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效

a = 1
b = 2
def func():
    x = ‘aaa‘
    y = ‘bbb‘
    print(locals())
    print(globals())

func()
print(globals())
print(locals()) #本地的

globals 永远打印全局的名字
locals 输出什么 根据locals所在的位置

a = 1
def func(a):
    a = 2
    return a

a = func(a)
print(a)

原文地址:https://www.cnblogs.com/qi1113/p/12350168.html

时间: 2024-10-30 01:35:03

函数命名空间的相关文章

函数命名空间和嵌套

楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行? 来看结果: >>> def my_max(x,y): ... m = x if x>y else y ... >&

python之函数命名空间和作用域

命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 python代码运行的时候遇到函数是怎么做的 从python解释器开始执行之后,就在内存中开辟了一个空间,每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来.但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心 ---------代码在运行伊始,创建的存储"变量名与值的关系"的空间叫做全局命名空间 等执行到函数调用的时候,python解释

函数 / 命名空间 / 闭包

三元运算符 def my_max(a,b): return a if a>b else b #当a>b成立返回a,否则返回b 参数: 实参 : 1.位置参数 2. 关键字参数 3. 混合参数 形参 : 1.位置参数 2. 默认值参数 动态传参: 1. 动态接收位置参数 def func(a, b, *arg): #动态接受参数是:动态参数必须在位置参数之后 pass 2.接收默认值参数 def fruit(a, b, c='apple', *food): pass 三种参数顺序 : 位置参数,

JavaScript函数命名空间、参数类型重载实现

有时候使用doFunc({arg1: xxx, arg2:xxx});不方便,还是得在参数表重载,而重载情况又多种多样弄得晕头转向,结果就试着写了这么个东西,也不知道有没有地方能用上: <!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

PYTHON学习0031:函数---命名空间和作用域----2019-6-25

比如变量x=1,x和1分别存在不同的地方,x存放的地方就叫命名空间,且这个命名空间不止存放x这个字母,还会以字典形式存储x和1的内存地址.先有命名空间才有的作用域. 作用域的查找空间: 原文地址:https://blog.51cto.com/13543767/2413273

《JS权威指南学习总结--8.5 作为命名空间的函数》

内容要点:    函数作用域的概念:在函数中声明的变量在整个函数体内都是可见的(包括在嵌套的函数中),在函数的外部是不可见的.不在任何函数内声明的变量是全局变量,在整个JS程序中都是可见的. 在JS中无法声明只在一个代码块内可见的变量的.(在客户端JS中这种说法不完全正确,比如,在有些JS的扩展中就可以使用let来声明语句块内的变量) 基于这个原因,我们常常简单地定义一个函数用做临时的命名空间,在这个命名空间内定义的变量是都不会污染到全局命名空间. 比如,假设你写了一段JS模块代码,这段代码将要

Javascript 函数总结

函数的定义 函数名称只能包含字母.数字.下划线或$,且不能以数字开头.定义时可用函数定义表达式或者函数声明语句. var f = function fact(x){} 函数定义表达式包含名称,名称将作为函数的局部变量,在函数内部使用,代指函数. 函数声明语句不是真正的语句,不能出现在循环.条件.try/catch/finally以及with语句中:声明语句置于在不会执行到的位置,仍可被整个作用域可访问,可在被定义代码之前使用.定义表达式的变量声明被提前了,但是对变量赋值不会提前,函数在被定义之前

[转]JavaScript函数和数组总结

转自:http://www.uml.org.cn/AJAX/201307264.asp 写的不错,对我有很多帮助,最近准备全面的学习研究一下ES5,先转载一下这篇文章. JavaScript函数 1.函数的定义 函数名称只能包含字母.数字.下划线或$,且不能以数字开头.定义时可用函数定义表达式或者函数声明语句. var f = function fact(x){} 函数定义表达式包含名称,名称将作为函数的局部变量,在函数内部使用,代指函数. 函数声明语句不是真正的语句,不能出现在循环.条件.tr

Python文件操作与函数目录

文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 Python函数——命名空间与闭包 Python函数——闭包延迟绑定 Python函数——装饰器 Python函数-列表推导式.生成器与迭代器 练习题 Python文件与函数练习题 案例 python函数练习——个人信息修改 Python函数案例——员工信息管理 原文地址:https://www.c