Python 内置函数 locals() 和globals()

1》这两个函数主要提供, 基于字典的访问局部变量和全局变量的方式
python 使用叫做名字空间的东西来记录变量的轨迹。 名字空间是一个字典 ,它的键就是字符串形式的变量名字,它的值就是变量的实际值
名字空间可以像 Python 的 dictionary 一样进行访问。
在一个 Python 程序中的任何一个地方,都存在几个可用的名字空间。
每个函数都有着自已的名字空间,叫做 局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
每个模块拥有它自已的名字空间,叫做 全局名字空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
还有就是 内置名字空间, 任何模块均可访问它,它存放着内置的函数和异常。
2》当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,
同时传递 There is no variable named 'x' 这样一条信息.
3》名字空间在运行时直接可以访问。局部名字空间可以通过内置的 locals 函数来访问。全局 (模块级别) 名字空间可以通过内置的 globals 函数来访问。
locals 对局部 (函数) 名字空间做了些什么,globals 就对全局 (模块) 名字空间做了什么。
然而 globals 更令人兴奋,因为一个模块的名字空间包含了模块级的变量和常量,它还包括了所有在模块中定义的函数和类,以及任何被导入到模块中的东西。
4》回想一下 from module import 和 import module 之间的不同?
使用 import module,模块自身被导入,但是它保持着自已的名字空间,
这就是为什么您需要使用模块名来访问它的函数或属性: module.function 的原因。
但是使用 from module import,实际上是从另一个模块中将指定的函数和属性导入到您自己的名字空间,
这就是为什么您可以直接访问它们却不需要引用它们所来源的模块的原因。
使用 globals 函数,您会真切地看到这一切的发生。
5》locals()实例:
def foo(arg, a):  
    x = 100 
    y = 'hello python!'  
    for i in range(10):  
        j = 1  
        k = i  
    print locals()  
    
foo(1,2)  
结果:
{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'hello python!', 'x': 100}

6》locals 是只读的,不可修改, 而globals可以修改,原因是:
locals()实际上没有返回局部名字空间,它返回的是一个拷贝。所以对它进行修改,修改的是拷贝,而对实际的局部名字空间中的变量值并无影响。
globals()返回的是实际的全局名字空间,而不是一个拷贝: 与 locals 的行为完全相反。

所以对 globals 所返回的 dictionary 的任何的改动都会直接影响到全局变量的取值。

#!/usr/bin/env python    
#coding:utf-8    
'''This is my first python program!'''    
z = 7 #定义全局变量  
def foo(arg):   
    x = 1   
    print locals()  
    print 'x=',x  
    locals()['x'] = 2 #修改的是局部名字空间的拷贝,而实际的局部名字空间中的变量值并无影响。  
    print locals()  
    print "x=",x  
  
foo(3)   
print globals()  
print 'z=',z  
globals()["z"] = 8 #globals()返回的是实际的全局名字空间,修改变量z的值  
print globals()  
print "z=",z  

结果:
{'x': 1, 'arg': 3}
x= 1
{'x': 1, 'arg': 3}
x= 1
{'foo': <function foo at 0x02A17CF0>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'E:\\workspace\\python day03\\main\\test.py', '__package__': None, '__name__': '__main__', 'z': 7, '__doc__': 'This is my first python program!'}
z= 7
{'foo': <function foo at 0x02A17CF0>, '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'E:\\workspace\\python day03\\main\\test.py', '__package__': None, '__name__': '__main__', 'z': 8, '__doc__': 'This is my first python program!'}
z= 8

(完)

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是 Python3 内函数的完整列表: - abs() - all() - any() - ascii() - bin() - bool() - breakpoint() - bytearray() - bytes() - callable() - chr() - classmethod() - compile() - complex() - delattr() - dict() - dir() - divmod() - enumerate() - eval() - exec() - filter() - float() - format() - frozenset() - getattr() - globals() - hasattr() - hash() - help() - hex() - id() - input() - int() - isinstance() - issubclass() - iter() - len() - list() - locals() - map() - max() - memoryview() - min() - next() - object() - oct() - open() - ord() - pow() - print() - property() - range() - repr() - reversed() - round() - set() - setattr() - slice() - sorted() - staticmethod() - str() - sum() - super() - tuple() - type() - vars() - zip() 除此之外,还有一些 Python模块,例如 `math`,`datetime`,等等也包含很多有用的函数。 ### 回答2: Python函数是指在Python编程语言中已经定义好的、可以直接使用的函数。以下是Python函数的大全表: 数值处理函数: - abs():返回一个数的绝对值。 - divmod():将两个数相除并返回商和余数。 - pow():返回一个数的指定次幂。 - round():将一个数四舍五入到指定的小数位数。 字符串处理函数: - len():返回字符串长度。 - str():将数值转换为字符串。 - format():格式化字符串。 - split():将字符串按照指定的分隔符切片成列表。 列表处理函数: - len():返回列表长度。 - max():返回列表中的最大值。 - min():返回列表中的最小值。 - sum():返回列表中所有元素的和。 字典处理函数: - len():返回字典中键值对的数量。 - keys():返回字典中所有的键。 - values():返回字典中所有的值。 - items():返回字典中所有的键值对。 文件处理函数: - open():打开一个文件并返回文件对象。 - write():向文件中写入内容。 - read():从文件中读取内容。 - close():关闭文件。 其他常用函数: - type():返回对象的类型。 - range():生成一个指定范围的整数序列。 - print():打印输出内容到控制台。 - input():接收控制台输入。 以上是一些常见的Python函数,可以在Python的官方文档中找到完整的内函数列表。 ### 回答3: Python是一种功能强大的编程语言,拥有丰富的内函数,用于完成各种任务。以下是Python函数大全表: 1. 数学函数:比如abs()用于取绝对值,sum()用于求和,pow()用于幂运算等。 2. 字符串函数:比如len()用于计算字符串的长度,str()用于将其他类型转换为字符串,upper()用于将字符串转换为大写等。 3. 列表函数:比如len()用于计算列表的长度,max()用于找出列表中的最大值,sorted()用于对列表进行排序等。 4. 字典函数:比如len()用于计算字典中键值对的个数,keys()用于获取字典中所有的键,values()用于获取字典中所有的值等。 5. 文件函数:比如open()用于打开文件,read()用于读取文件内容,write()用于向文件写入内容等。 6. 类型转换函数:比如int()用于将其他类型转换为整数,float()用于将其他类型转换为浮点数,str()用于将其他类型转换为字符串等。 7. 输入输出函数:比如input()用于获取用户输入内容,print()用于输出内容到控制台。 8. 布尔函数:比如bool()用于将其他类型转换为布尔值,isinstance()用于判断一个对象的类型等。 9. 时间函数:比如time()用于获取当前时间戳,sleep()用于暂停脚本的执行一段时间等。 10. 迭代器函数:比如iter()用于创建一个迭代器对象,next()用于获取迭代器的下一个值等。 以上仅列举了一部分Python函数,还有很多其他函数可以根据需要进行查阅。这些内函数Python编程的基础,掌握它们能够帮助我们更高效地完成各种任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值