Python之栈、队列、模块、name属性、包与sys模块

本文介绍了Python中的栈和队列的概念及其操作,包括入栈、出栈。接着讲解了模块的使用,包括整体与局部导入、模块的别名以及模块导入中的通配符*。还探讨了name属性的作用,如何根据__name__判断模块是否为主程序。此外,解释了包的创建与作用,强调了__init__.py的重要性。最后提到了sys模块,特别是sys.argv用于接收外部参数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈 stack

特点:先进后出[可以抽象成竹筒中的豆子,先进去的后出来] 后来者居上


创建栈,使用列表来模仿栈

mystack = []
入栈(压栈)[向栈中存数据]
mystack.append(1)
mystack.append(2)
mystack.append(3)
mystack.append(4)

print(mystack)
出栈 [从栈中取数据]
print(mystack.pop())
print(mystack.pop())
print(mystack.pop())
print(mystack.pop())
print(mystack)

队列

特点: 先进先出[可以抽象成一个平放的水管]

import collections

 创建队列(导入数据结构的集合)
queue = collections.deque()
print(queue)
入队 (存数据)
queue.append(1)
queue.append(2)
queue.append(3)
print(queue)
出队 (取数据)
print(queue.popleft())
print(queue.popleft())
print(queue.popleft())

例:

import os
import collections

def getqueuedir(path):
    #  创建队列
    queue = collections.deque()
    print(queue)
    # 将根目录入队
    queue.append(path)
    while queue:
        # 将路径出队
        filepath = queue.popleft()
        # 列举指定路径下所有文件
        filenameList = os.listdir(filepath)
        # 遍历所有的文件
        for filename in filenameList:
            # 获取绝对路径
            abspath = os.path.join(filepath,filename)
            # 判断该路径是否为目录
            if os.path.isdir(abspath):
                print("目录",filename)
                queue.append(abspath)
            else:
                print("文件",filename)

path = r"位置"
getqueuedir(path)

模块

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里的代码就会越来越长,越来越不容易维护.
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式

定义在python中一个.py文件就是一个模块。

模块划分
内置模块:无须自己定义,无须安装,可以直接导入使用的模块,我们称之为内置模块
自定义模块:需要自己定义py文件
第三方模块:无须自己定义,但是需要安装的模块,我们称之为第三方模块。

模块优点
1.提高代码的可维护性
2.提高代码的复用性
3.可以引入其他模块
4.可以避免函数名以及变量名的冲突

模块的导入[整体引入]
import 模块名
一次性导入多个模块:
import 模块1,模块2,模块3,...
引用模块中的函数以及变量
模块名.函数名(参数列表)
模块名.变量名

若模块名比较长的情况下,为了方便调用,我们可以给模块取一个别名
语法:

import 模块名 as 别名
函数的调用以及变量的使用:
别名.函数名(参数列表)
别名.变量
模块的导入【局部引入】

from 模块名 import 函数名,类名,变量名
使用此方式引入:
引用函数以及变量的时候语法:

函数名(参数列表)
变量名

注意
使用这种方式导入,优点方便函数的调用,缺点可能会引起函数名的冲突
【因此使用此方式导入在给函数以及变量命名的时候要注意不要出现重名】

模块导入之 *
from 模块名 import *

*:代表导入模块中所有函数以及变量
函数的引用
函数名(参数列表)
变量名

注意:一般情况下,不建议使用【特别容易造成函数名变量名的冲突】


name 属性

模块是一个可执行的.py文件,一个模块被另一个程序引入,若在引用的时候不想让模块中的有些方法执行.这时候我们就需要使用name属性去处理.

每个模块【.py文件】都有一个内置变量__name__,
当程序在当前模块执行的时候__name__的值等于__main__,
当当前模块被其他模块引入的是它的等于该模块的模块名。
一般情况下,我们会使用

if__name__ == "__main__" :来作为程序的入口。

if__name__ == :"__main__" :
#代码从这里开始阅读
pass

包:为了解决模块名的冲突,python引入目录来组织模
块的方法,我们称之为包。

每个包目录下都会包含一个__init__.py文件,这个文件必须
存在,若不存在python会将其当成一个普通目录,而不是一个包。
__init__.py文件可以是一个空文件也可以有内容,因为__init__.py
本身就是一个模块。

自定义模块的时候,需要注意不能跟python自带的模块名冲突
自定义模块取名的时候,可以使用多个单词拼接的方式来取名。

import day09.a.demo  as a
import day09.b.demo as b
import time

time.sleep(1)

a.func()
b.func()

sys模块
import sys

sys.argv可以实现从程序外部向程序内部进行传参
第一参数就是该模块的模块名

print(sys.argv)

获取当前平台的执行环境

print(sys.platform)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值