python学习笔记

今日内容概要

  • 迭代取值与索引取值的差异
  • 模块简介
  • 导入模块的两种语法句式
  • 循环导入问题
  • 判断文件类型
  • 模块的查找顺序

今日内容详细

迭代取值与索引取值的差异

l1 = [11, 22, 33, 44, 55]
# 索引取值
print(l1[0])
print(l1[1])
print(l1[0])
# 迭代取值
res = l1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
  • 索引取值

优势:可以随意反复的获取任意数据值

劣势:针对无序的容器类型无法取值

  • 迭代取值

优势:提供了一种通用的取值方式(不论数据值是无序的还是有序的)

劣势:取值一旦开始只能往前不能回退(不能随意反复取值)

模块简介

  • 如何理解模块

模块可以看成是一系列功能的结合体,使用模块就相当于拥有了这结合体内的所有功能

ps:使用模块编程就相当于站在了巨人的肩膀上

  • 模块的分类
模块分类 解释 例子
内置模块 解释器自带的,直接就可以使用的模块 import time
time.sleep(3) # 让程序暂停3秒
自定义模块 自己写的模块 注册功能 登录功能
第三方模块 别人写的模块,存在于网络上,使用之前需要提前下载 图形识别 图形视化 语音识别
  • 模块的表现形式

1.py文件(py文件也可以称之为是模块文件)

2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)

3.已被编译为共享库或DLL的c或C++扩展(了解)

4.使用C编写并链接到python解释器的内置模块(了解)

导入模块的两种句式

导入模块的句式1import句式
    import md
    """
    import md
    执行文件是   
    被导入文件是  md.py
    
    1.会产生执行文件的名称空间
    2.产生被导入文件的名称空间并运行该文件内所有的代码,存储名字
    3.在执行文件中会获取一个模块的名字,通过该名字点的方式就可以使用到被导入文件名称空间中的名字
    
    补充说明
    同一个程序反复导入相同的模块,导入语句只会执行一次
    """

导入模块的句式2from...import...句式
    from md import money, read1
    read1()
    """
    1.创建执行文件的名称空间
    2.创建被导入文件的名称空间
    3.执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
    4.在执行文件中获取到指定的名字,指向被导入文件的名称空间
    """
  • 补充说明

以后真正的项目中所有的py文件名称都是英文,没有所谓的编号和中文

学习模块的时候 模块文件的名称就得用英文

py文件被当做模块导入的时候不需要考虑后缀

  • 两种导入句式的优缺点
import md

优点:通过md点的方式可以使用到模块内所有的名字,并且不会冲突

缺点:md什么都可以点,有时候并不想让所有的名字都能被使用

from md import monry, read1

优点:指名道姓的使用指定的名字,并且不需要加模块名前缀

缺点:名字极其容易产生冲突(绑定关系被修改)

  • 起别名
情况1:多个模块文件名相同(多个人写)
     from md import money as md_my
     from md1 import money as md1_my
     print(md_my)
     print(md1_my)
情况2:原有的模块文件名复杂
     import mdddddddddd as md
  • 导入多个名字
import time, sys, os
# 上述导入方式建议多个模块功能相似才能适应 不相似尽量分开导入
import time
import os
import sys

from md import money, read1, read2	
# 上述导入方式是推荐使用的 因为多个名字出自于一个模块文件
  • 全导入
from md import *  # *表示所有
ps:针对*号的导入还可以控制名字的数量
   在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字

循环导入问题

  • 如何理解循环导入

    循环导入就是两个文件彼此导彼此

  • 循环导入容易出现报错现象

    使用彼此的名字可能是在没有准备好的情况下就使用了

  • 如何解决循环导入保存现象

    彼此在使用彼此名字之前,先准备好

注意:循环导入将来尽量避免出现!!!如果真的避免不了,就想办法让所有的名字使用之前提前准备好

判断文件类型

  • 双下__ name__内置名
__name__
所有py文件都自带__name__内置名
当py文件是执行文件的时候__name__的结果是__main__
当py文件是被导入文件的时候__name__的结果是模块名(文件名)
  • 双下name内置名的应用场景

​ 一般是模块开发者用于测试自己的代码

if __name__ == '__main__'
	当文件是执行文件时,才会执行的子代码
# 一般只出现在整个程序的启动文件中
'''在pycharm中,输入main+Tab 可以自动补全'''

模块的查找顺序

  • 查找顺序

1.先去内存中找

2.再去内置中找

3.再去sys.path中找(程序系统环境变量)

  • 验证查找顺序

1.导入一个文件,然后在导入过程中删除该文件,发现还可以使用

import md
import time
time.sleep(15)
print(md.money)

2.创建一个跟内置模块名相同的文件名

import time
print(time.time())
from time import name
print(name)
# 创建模块文件的时候尽量不要与内置模块名冲突

3.导入模块的时候一定要知道谁是执行文件

所有的路径都是参照执行文件来的

import sys
sys.path.append(r'被导入文件的路径')
'''
1.通用方式
	sys,path.append('目标文件路径')
2.利用from...import句式
	from 目标文件路径 import ...
	起始位置一定是执行文件所在的路径
'''

import not_same_level # 不能导入
import sys
print(sys.path)
'''['D:\\PycharmProjects\\710new_week', 
'D:\\PycharmProjects\\710new_week',
 'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_display', 
 'D:\\Python36\\python36.zip', 
 'D:\\Python36\\DLLs', 
 'D:\\Python36\\lib',
  'D:\\Python36', 
  'D:\\Python36\\lib\\site-packages',
   'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
'''

import sys
sys.path.append(r"D:\\PycharmProjects\\710new_week\\aaa")
import not_same_level
print(not_same_level.name) # 不同级的名字
# 会标红,但是不影响运行

image

image

image

posted @   空白o  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示