iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入解析Python中的__builtins__内建对象
  • 566
分享到

深入解析Python中的__builtins__内建对象

内建对象Python 2022-06-04 18:06:05 566人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

如果你已经学习了包,模块这些知识了。 你会不会有好奇:python为什么可以直接使用一些内建函数,不用显式的导入它们,比如 str() int() dir() ...? 原因是Python解释器第一次启动的

如果你已经学习了包,模块这些知识了。
你会不会有好奇:python为什么可以直接使用一些内建函数,不用显式的导入它们,比如 str() int() dir() ...?
原因是Python解释器第一次启动的时候 __builtins__ 就已经在命名空间了(Note: 有s)

shell看看:


>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 
'__name__': '__main__', '__doc__': None, '__package__': None}


你可以再次导入 __builtin__(Note: 没有s):


import __builtin__
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 
'__name__': '__main__', '__doc__': None, '__builtin__': 
<module '__builtin__' (built-in)>, '__package__': None}


这时候多了一个 __builtin__ 对象,你可以判断它们是不是相同的:


>>> __builtin__ is __builtins__
True
>>> type(__builtin__)
<type 'module'>
>>> type(__builtins__)
<type 'module'>


现在我们把它从一个文件导入:


# file1.py
import __builtin__

print "module name __name__ : ", __name__
print "__builtin__ is __builtins__: ", __builtin__ is __builtins__
print "type(__builtin__): ", type(__builtin__)
print "type(__builtins__): ", type(__builtins__)
print "__builtins__ is __builtin__.__dict__", __builtins__ is __builtin__.__dict__


# file2.py
import file1

"""结果:
module name __name__ : file
__builtin__ is __builtins__: False
type(__builtin__): <type 'module'>
type(__builtins__): <type 'dict'>
__builtins__ is __builtin__.__dict__ True
"""


结论:
__builtins__ 是对内建模块 __builtin__ 的引用,并且有如下两个方面差异:

在主模块中,即没有被其他文件导入。__builtins__是对 __builtin__ 本身的引用,两者是相同的。

通过 __builtins__ is __builtin__.__dict__ 猜想:
在非 '__main__' 模块中,也就是模块被导入后,__builtins__ 应该属于 __builtin__.__dict__ 的一部分,是对 __builtin__.__dict__ 的引用,而非builtin本身,它在任何地方都可见,此时builtins的类型是字典。

装饰内建函数
Python 官方文档 解释了如何装饰一个内建函数:


import __builtin__

def open(path):
  f = __builtin__.open(path, 'r')
  return UpperCaser(f)

class UpperCaser:
  __metaclass__ = type

  def __init__(self, f):
    self._f = f

  def read(self):
    return self._f.read().upper()

print open('./a.txt').read()
# 将会全部转为大写输出

Note:python3.X版本中,内建模块更名为builtins,与Python2.X有所不同

--结束END--

本文标题: 深入解析Python中的__builtins__内建对象

本文链接: https://www.lsjlt.com/news/14632.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 深入剖析Python类与对象的内部运作机制
    类与对象 在Python中,类是对象的蓝图,它定义了对象的属性和方法,而对象是类的实例,它具有类的所有属性和方法。 class Person: def __init__(self, name, age): self.na...
    99+
    2024-02-22
    Python 对象 方法 属性 继承 多态
  • 深入浅析Java中的对象流
    这期内容当中小编将会给大家带来有关深入浅析Java中的对象流,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java中可以通过对象流将一个序列化的对象保存到硬盘中,或者硬盘中读取一个对象。对象流的存储和读取...
    99+
    2023-05-31
    java 对象流 ava
  • 深入浅析java中的面向对象
    本篇文章给大家分享的是有关深入浅析java中的面向对象,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.面向对象(OO)面向对象(OO):就是基于对象概念,以对象为中心,以类和...
    99+
    2023-05-31
    面向对象 java ava
  • C++中对象&类的深入理解
    什么是对象 任何事物都是一个对象, 也就是传说中的万物皆为对象. 对象的组成: 数据: 描述对象的属性 函数: 描述对象的行为, 根据外界的信息进行相应操作的代码...
    99+
    2024-04-02
  • 深入浅析Java中的对象与引用
    今天就跟大家聊聊有关深入浅析Java中的对象与引用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中的对象和引用详解 在Java中,有一组名词经常一起出现,它们就是“对象和对象...
    99+
    2023-05-31
    java 对象 引用
  • Python中可变和不可变对象的深入讲解
    目录前置知识 有哪些可变对象,哪些不可变对象? 不可变对象和可变对象的区别? 不可变对象的应用场景 从内存角度出发说下有什么区别? 不可变对象可变对象从代码角度看看区别 不可变对象...
    99+
    2024-04-02
  • 深入浅析Kotlin中的面向对象编程
    这篇文章给大家介绍深入浅析Kotlin中的面向对象编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Kotlin 面向对象可以看到Kotlin中的类还是很普通的,大多与Java相似,比较特殊的有:每一个构造函数都必须为...
    99+
    2023-05-31
    kotlin 面向对象
  • 深入浅析Java中对象的深复制与浅复制
    本篇文章为大家展示了深入浅析Java中对象的深复制与浅复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 Java对象深复制与浅复制实例详解我们在遇到一些业务场景的时候经常需要对对象进行复...
    99+
    2023-05-31
    java 对象 中对
  • C++中的类与对象深度解析
    目录初始化列表引论初始化列表explicit关键字引论explicit关键字使用static成员 友元引论友元内部类基础概念内部类的使用补充析构顺序例题总结初始化列表 引论...
    99+
    2024-04-02
  • CPython 与内存管理:深入理解 Python 对象生命周期
    ...
    99+
    2024-04-02
  • Python内建类型bytes深入理解
    目录引言1 bytes和str之间的关系2 bytes对象的结构:PyBytesObject3 bytes对象的行为3.1 PyBytes_Type3.2 bytes_as_sequ...
    99+
    2024-04-02
  • 深入讲解Java的对象头与对象组成
    目录一,对象头1,Mark Word2,指向类的指针3,数组长度二,实例数据三,对齐填充字节总结Java对象保存在内存中时,由以下三部分组成: 1,对象头 2,实例数据 3,对齐填充...
    99+
    2024-04-02
  • 深入了解php对象中的“->”符号
    PHP是一种非常流行的编程语言,它是一种服务器端脚本语言,被广泛用于Web编程领域。在PHP编程中,经常会用到对象及其属性和方法。在PHP中,通过“->”符号可以访问对象的属性和方法。不过在理解的时候需要先明白什么是对象。对象是指现实...
    99+
    2023-05-14
  • 深入浅析java虚拟机中的对象访问
    今天就跟大家聊聊有关深入浅析java虚拟机中的对象访问,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 虚拟机中对象访问详解对象访问会涉及到Java栈、Java堆、方法区这三个...
    99+
    2023-05-31
    java 虚拟机 对象访问
  • Java对象创建内存案例解析
    Java对象创建内存图解析 1. 栈 Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针'来创...
    99+
    2024-04-02
  • C++深入刨析类与对象的使用
    目录this指针this指针存放在哪nullptr与类类的默认成员函数构造函数意义析构函数拷贝构造运算符重载this指针 现在给出一段代码,实现一个普通的日期 date 的打印: c...
    99+
    2024-04-02
  • C++深入讲解对象的销毁之析构函数
    目录一、对象的销毁二、析构函数三、小结一、对象的销毁 生活中的对象都是被初始化后才上市的生活中的对象被销毁前会做一些清理工作—股而言,需要销毁的对象都应该做清理 解决方案...
    99+
    2024-04-02
  • 深入浅析Java中变量与对象的作用域
    深入浅析Java中变量与对象的作用域?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。大多数程序设计语言都提供了“作用域”(Scope)的概念。对于在作用域里定义的名字,作用域同时...
    99+
    2023-05-31
    java 变量 对象
  • 深入理解SQL解析的内涵
    SQL解析:探究其背后的意义,需要具体代码示例引言:SQL(Structured Query Language)是结构化查询语言的缩写,是一种用于管理和操作关系型数据库的标准语言。作为一种强大的数据操作语言,SQL的解析是数据管理和查询的基...
    99+
    2023-12-28
    解析 (Parsing) SQL (Structured Query Language) 背后的意义 (underlyi
  • Java 类与对象:对象导向编程的基石(深入分析)
    : 类:对象的蓝图 类是描述一组具有相同特征和行为的对象的模板。它定义了对象的属性(数据成员)和方法(行为)。类是抽象概念,不能直接实例化。 创建类: class Employee { private String name; ...
    99+
    2024-03-09
    : Java、类、对象、OOP、封装、继承、多态
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作