模块基础小结

news/2024/7/19 10:54:26 标签: python, 爬虫, pycharm

目录

❤  为什么要有模块

❤  import 与 from...import...

❤  循环导入问题

解决方案一

解决方案二

❤  模块的搜索路径

python文件的两种用途-toc" style="margin-left:0px;">❤  Python文件的两种用途

❤  包


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

❤  为什么要有模块

面条版代码--》函数版代码--》文件版代码(模块)--》文件夹版(包)

代码会变得更加简洁,清晰,模块化

一个模块里会有多个函数,相当于一个大功能细分成多个小功能

  • 自定义模块
  • 第三方模块,如requests
  • 内置模块,如time
  • 包(文件夹)

❤  import 与 from...import...

python">
markdown_add_index.py

import time 

1. 打开time文件
2. 使用Python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
3. test.py中会有一个time变量指向time模块的名称空间,如果导入方式为`import time as t`,则就是t变量指向time模块的名称空间

from time import sleep

1. 打开time文件
2. 使用Python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
3. test.py中会有一个sleep变量指向time模块名称空间中的sleep,如果导入方式为`from time import sleep,localtime`,则是由一个sleep变量和一个localtime变量指向time模块名称空间中的sleep和localtime

❤  循环导入问题

python">
# m1.py
from m2 import y
x = 10

# m2.py
from m1 import x
y = 20

为什么会有循环导入问题:

  • m1文件需要导入m2文件的y
  • m2文件需要导入m1文件的x
  • 代码自上而下运行,m1需要m2的y,然后会去m2的名称空间找到y,但是找y前,需要运行m2的代码,m2的代码第一句是去找m1的x,然后又回去运行m1的代码,m1的第一行代码又是去寻找m2的y
  • 就是说m1只能运行第一行,m2也只能运行第一行,所以出现了循环导入问题

解决方案一

python">
# m1.py
x = 10
from m2 import y


# m2.py
y = 20
from m1 import x
  • 但是这样做,对所有的变量都需要这样做,才能解决问题,所以治标不治本的

解决方案二

python">
# m1.py
def f1():
    from m2 import y
x = 10


f1()


# m2.py
def f2():
	from m1 import x
y = 20


f2()

名字的执行顺序:内置(python解释器启动的时候)-->全局(文件执行的时候)-->局部(函数调用的时候)

❤  模块的搜索路径

1.去内存中找

python">
# test.py
import m1  # 从m1.py文件中导入的,然后会生成m1模块的名称空间
import time

# 删除m1.py文件,m1模块的名称空间仍然存在

time.sleep(10)

import m1  # 不报错,一定不是从文件中获取了m1模块,而是从内存中获取的

2.去内置模块中找

python">
# time.py
print('from time')

# test.py
import time  # 无任何打印,所以他先去内置模块中找了

3.环境变量中找

python">
import sys

print(sys.path)
python">
# b/a/m1.py

# b/test.py
import m1  # 报错

sys.path.append('b/a')
import m1

python文件的两种用途">❤  Python文件的两种用途

  • 模块文件,被当做模块给导入,有多个
  • 运行文件,被当做执行文件执行,只能有一个
  • 搜索路径以执行文件为基准
python">
# m1.py
def f1():
    print('from f1')
    
f1()

# test.py
import m1

m1.f1()  # 运行两次
  • name
python">
# m1.py
def f1():
    print('from f1')
    
if __name__ == '__main__':  # __name__在m1.py被当做模块导入时是模块名,作为执行文件时是'__main__'
    f1()
    

markdown_add_index.py
import m1

m1.f1()  # 运行两次

❤  包

  • 模块太大了,合理的分配模块的函数
python">
# m1.py
f1
f2
f3
f4

# m2.py
f1
f2

# m3.py
f3
f4
  • 所以得用文件夹管理,文件夹命名为m1,导入m1就是导入m1中的__init__

http://www.niftyadmin.cn/n/324735.html

相关文章

写给程序员Android Framework 开发,

前言 在 Android 开发者技能中,如果想进大厂,一般拥有较好的学历可能有优势一些。但是如果你靠硬实力也是有机会的,例如死磕Framework。Framework 知识广泛应用在Android各个领域中,重要性显而易见。 成为一名Android Framework…

MySQL(1) ---- 数据库介绍与MySQL概述

介绍 1、什么是数据库? 数据库:DateBase(DB),是存储和管理数据的仓库。数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。SQL&#xff1…

sz command

文章目录 1.命令简介2.命令格式3.选项说明4.常用示例5.FAQ参考文献 1.命令简介 sz(Send ZMODEM)通过 ZMODEM 协议,将多个文件从远程服务器下载到本地。 注意不能下载文件夹,如果下载文件夹,请先打包再下载。 2.命令…

MySQL 数据库面试题

TOC 1. MySQL 的内连接、左连接、右连接有有什么区别? inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。 left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记…

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略 准备阶段部署网站腾讯云注册与解析添加API和密码更换域名的配置多密码管理密码更换密码批量生成 本教程收集于:AIGC从入门到精通教程汇总 全免费开源,仅需一个域名就可以部署国内的ChatGPT镜像版本。…

MyBatis项目的创建和使用

什么是MyBatis? MyBaits是一个更简单的完成程序与数据库交互的工具。MyBatis将复杂的JDBC进行了封装,让使用者可以通过简单的xml和注解对数据库进行记录。 MyBatis的执行流程 创建MyBatis项目 添加依赖 还是SpringBoot的创建流程:SpringBoot项目创建…

Kettle获取接口数据到表

kettle从接口服务获取数据 主要用到kettle输入菜单下的控件:生成记录、JSON input 查询菜单下的控件:HTTP client 输出菜单下的控件:表输出、插入/更新 生成记录:设置一个变量,用这个变量来保存要去访问接口的URL地址…

设计模式-迭代器模式

迭代器模式 文章目录 迭代器模式什么是迭代器模式如何使用迭代器模式为什么要用迭代器模式总结 什么是迭代器模式 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。它用来遍历集合对象。…