首页 > 其他分享 >模块的基础知识点

模块的基础知识点

时间:2024-04-27 20:45:18浏览次数:28  
标签:知识点 py 基础 xx 导入 模块 import foo

一:模块的定义

  模块:就是一系列功能的集合体,分为三大类
  1.内置(就是解释器里自带的)
  2.自定义:可以是任何语言写的 (py文件本身就是一个模块,文件名叫xx.py,模块名就叫xx)
  3.第三方:既不是自带的,也不是自己写的,是别人的直接拿过来

  ps:模块分为四种形式
  1.使用python编写的py文件
  2.已被编译为共享库或是DLL的C或者C++扩展
  3.把一系列模块组织到一起的文件夹(__init__.py文件,该文件称之为包)
  4.使用C编写并链接到python解释器的内置模块

二:为何用模块

  1.内置与第三方的模块拿来就用,无需定义,这种拿来主义,可以极大的提升开发效率
  2,自定义的模块,可以将程序的各个部分功能提取出来放到一个模块中,为大家共同使用,这样减少了代码冗余问题,
  首次导入模块会发生:
    1,执行xx.py
    2,产生xx.py的名称空间,将xx.py运行过程中产生的名字都丢到xx的名称空间中
    3.在当前文件中产生的有一个xx,该名字指向2中产生的名称空间
    之后再导入,都是直接引用首次导入产生的xx.py名称空间,不会重复执行

三:如何引用

  1.模块名.名字,是指名道姓的问某一模块要名字对应的值,不会与其他名字产生冲突
  2.无论是查看还是修改操作的都是模块本身,与调用位置无关,以定义的时候为准

 

四:导入多个模块的书写规范

导入多个模块,可以用 , 分隔模块,但是不建议
import time,name,age
建议使用如下:
import time
import name
import age
导入模块时,先后顺序最好是:
    1.导入内置模块
    2.导入第三方模块
    3.导入自定义模块
    
============import......as.....
import  foo文件名 as 另起一个名字f  #  foo=f
f.get()
用在当我的模块名比较长的情况下
========自定义模块的命名应该采用纯小写+下划线的风格
=======可以在函数内导入模块

 

五:一个python文件的两种用途

1.被当成程序运行

2.被当作模块导入

如果foo文件下非得运行一下结果时:
当xxpy被运行时,__name__的值为'__main__',导它的文件则会把运行结果显示出来
当xx.py被当作模块导入时时,__name__的值为'xx',不会输出xx.py的运行结果
if ____name__=='__main__':
    get()    本文件内执行
    change()
else:
    只是被当作模块导入

六:import和from....import的两种导入方式

=======================import导入模块时的优缺点
1.优点:肯定不会与当前名称空间中的名字产生冲突
2.缺点:导入模块在使用时必须加前缀"模块.",加前缀显得麻烦
=========================from....import xx不加前缀的另一种方法 from foo import x # x=模块foo中值11的内存地址 from foo import func from foo import change ======================from....import...导入发生的三件事 1.产生一个模块的名称空间 2.运行foo.py将运行过程中产生的名字都丢到模块的名称空间取 3.在当前名称空间拿到一个名字,该名字指向模块名称空间中的某一个内存地址 get() ==============优缺点 1.代码更简洁 2.缺点:容易与当前名称空间的名字混淆 ====================================也可以一行导入多个模块(不推荐) from foo import x ,func,change =====================================from foo import*,就是所有模块当中的名字都可以用(不推荐,只有需要导入模块中的名字很多的时候使用) from foo import* print(x) print(func) print(change) ============================================也可以取别名 ,但是针对的是对import后面的名字过长时 from foo import func as f

 

七:循环引用产生的问题 

循环导入问题指的是在一个模块加载/导入的过程中导入另外一个模块,而在另外一个模块中又返回来导入第一个模块中的名字,由于第一个模块尚未加载完毕,所以引用失败、抛出异常
究其根源就是在python中:同一个模块只会在第一次导入时执行其内部代码,再次导入该模块时,即便是该模块尚未完全加载完毕也不会去重复执行内部代码
=======解决方法1:在共同被导入的模块当中,把被 引用到的名字全部放到最上面
=======解决方法2:放到一个函数体内,不要放到全局

==========================但是都不建议=======================================================

八:模块查找的优先级

1.内存(内置模块)
2.从硬盘找:也就是当前文件所在的位置(在哪个文件夹下)
import sys # 查找路径
print(sys.path) #值为一个列表,其中第一个就是当前执行文件所在的文件夹
# 被导入模块路径为'C:\\Users\\xx\\PycharmProjects\\pythonProject\\venv\\Scripts\\python36.zip',看后缀为zip

标签:知识点,py,基础,xx,导入,模块,import,foo
From: https://www.cnblogs.com/liuliu1/p/18162483

相关文章

  • Hadoop集群模式的搭建之二:配置Hadoop平台基础环境
    在进行Hadoop集群的安装部署之前,需要对虚拟机进行一些基础环境配置。例如,为了在集群中识别主机,需要配置主机和IP地址的映射关系;为了使用Web相关的服务和访问连接,需要在集群中关闭并禁用防火墙功能;为了减少节点之间访问时人工输入用户密码,需要配置SSH免密登录;为了集群节点的时间能......
  • 深入理解Python协程:从基础到实战
    title:深入理解Python协程:从基础到实战date:2024/4/2716:48:43updated:2024/4/2716:48:43categories:后端开发tags:协程异步IO并发编程Pythonaiohttpasyncio网络爬虫第1章:协程基础1.1协程概念介绍协程(Coroutines)是一种特殊的软件构造,它允许程序在执......
  • 01-linu核心基础-02运维基础重要概念
    ip地址IPv4(第四版本的IP协议)是构成现今互联网技术的基石协议查看自己的IP(公网)访问该网址、即可得知自己在互联网中的IP地址。http://www.net.cn/static/customercare/yourip.aspIP地址理解Ip地址由两部分组成,网络部分+主机部分网络部分指的是同一个网段、好比咱们这间教室......
  • Python (GUI编程)模块 使用方法
    GraphicalUserInterface,简称GUI,中文名为图形用户界面,又称图形用户接口,是一种通过图形元素(如按钮、文本框、图像等)来与计算机程序进行交互的方式。与传统的命令行界面相比,GUI更加直观和易于使用,因为用户可以直接通过点击、拖拽等方式来完成任务,而无需记忆和输入复杂的命令。GUI......
  • ​​SQL基础 AUTO_INCREMENT 字段​​
    我们通常希望在每次插入新记录时自动创建主键字段的值。​​Auto-increment会在新记录插入表中时生成一个唯一的数字。​​我们可以在表中创建一个自动增量(auto-increment)字段。​ ​​用于MySQL的语法​​​以下SQL语句将"Persons"表中的“ID”列定义为自动递增(auto-inc......
  • 陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密
    陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密  这种专利权人是公司,个人是发明人,专利年费是申请人先垫付,然后公司报销了,这个专利本身就不属于员工的这个是公司是专利权人, 使用权是公司,如果想要维持权利的话,需要缴纳年费,专利发明现在一个市......
  • 【知识点】欧几里得算法求最大公约数
    最大公约数所为的最大公约数,是指两个或多个整数共有的约数中最大的那个数。换句话说,它是能同时整除给定的整数的最大整数。例如,对于整数\(12\)和\(18\),它们的公约数有\(1、2、3、6\),其中最大的公约数为6,因此它们的最大公约数为\(6\)。最大公约数通常用符号\(\gcd(a,b)\)......
  • 以链表为基础实现链式队列
    以链表为基础实现链式队列如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。#include<stdio.h>#include<stdbool.h>#include<stdlib.h>//对输入......
  • 以链表为基础实现链式队列
    数据结构链式队列以链表为基础实现链式队列1.思路:如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。2.图示:3.代码:/****************************......
  • AI模块(有限状态机、行为树)-应用在cocos中
    前言:本模块是在cocos项目中运用战斗框架,根据学习别人的文章来结合项目进行编写的,若有不对不合理的地方有劳大家指正,万分感谢!!!若有能有用的上的,万分荣幸!简介:AI模块一般是对怪物的AI实现,或者托管等自动战斗的情况。具体方式可能根据项目的具体需求来选择,常用的有:有限状态机,行为树......