python基础知识(十二)模块和包

#什么是模块 # #模块的导入方法# #包和模块的区别#

严格来说,Python中没有库(library)的概念,模块(module)和包(package)才是Python语法中有的概念。这个库的概念是从其他编程语言引进来的,库的概念是具有相关功能模块的集合,只是一个通俗的说法。平时说的库既可以是一个模块,也可以是一个包。

1.模块和包

1.1 模块和包的概念与区别

  • 模块:python模块(Module), 是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数、类和变量,模块也能包含可执行的代码。
  • 包:包(package)将有联系的模块(Module)组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字 为 init.py 文件,那么这个文件夹就称之为包。

1.2 模块的导入方法

  • import 模块名
  • from 模块名 import 功能名
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

1.3 导入模块的注意事项

1.3.1 同名功能导入顺序

  • ⾃⼰的⽂件名不要和已有模块名重复,否则导致模块功能用法使用
  • 如果使用 from … import … 或 from … import * 导入多个模块的时候,且模块内有同名功能。当调 ⽤这个同名功能的时候,调用到的是后导入的模块的功能。

1.3.2 模块的搜索顺序

        模块搜索路径存储在system模块的sys.path变量中。变量包含当前目录、PYTHONPATH和由安装过程决定的默认目录。当导入一个模块,Python解析器对模块位置的搜索顺序是:

  • 当前目录
  • 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  • 如果都找不到,Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/

1.3.3 __all__变量

        如果⼀个模块⽂件中有 __all__ 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。否则,会报错。

# 文件命名test1
__all__ = ['testA']
def testA():
     print('testA')
def testB():
     print('testB')
# 此为test2文件
from test1 import *

testA()
testB()

执行结果

1.4 制作模块

        在Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。也就是说⾃定义模块名必须要符合标识符命名规则——模块推荐使用小写字母命名;尽量不要使用下划线,除非有很多字母。

        新建一个python文件,命名为test1,并在里面写一个函数,在test2.py中去调用test1

# -*- coding:utf-8 -*-
# 文件命名test1
def func(a,b):
    print(a+b)

class Func(object):
    def __init__(self,a,b):
        self.a = a
        self.b = b

    def func_demo(self):
        print(self.a+self.b)
# -*- coding:utf-8 -*-
# 文件命名test2
import test1

test1.func(2,3)
test1.Func(1,3).func_demo()

test2.py执行结果

1.5 制作包

        [New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。 

        注意:新建包后,包内部会自动创建 init.py 文件,这个文件控制着包的导入。

1.6 导入包的方法

1.6.1 方法一 

        导入包:   import 包名.模块名

        调用方法:包名.模块名.⽬标

1.6.2 方法二

        注意:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。

        导入包:   from 包名 import *
        调用方法:模块名.⽬标 

2.常用的python内置方法

2.1 时间模块

  • time()浮点数的时间戳方式
  • localtime()获取当前时间,从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数
  • asctime()获取格式化的时间
  • strftime()格式化日期,格式化形式为:2022-09-70 时:分:秒
  • sleep()程序睡眠,单位s

注:python中时间日期格式化符号

- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(0000-9999)
- %m 月份(01-12)

- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00-59)
- %S 秒(00-59)
import time
now_time0 = time.time()
now_time1 = time.localtime(time.time())
now_time2 = time.asctime(time.localtime(time.time()))
now_time3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(now_time0)
print(now_time1)
print(now_time2)
print(now_time3)

time.sleep(5)  # 等待5s

now_time4 = time.time()
now_time5 = time.localtime(now_time4)
now_time6 = time.asctime(now_time5)
now_time7 = time.strftime(now_time6)
print(now_time4)
print(now_time5)
print(now_time6)
print(now_time7)

执行结果

2.2 深浅拷贝 

  • 等号拷贝:相当于对于电脑中某个文件夹新建了一个快捷图标,快捷图标永远和原文件是一致的。
  • copy()浅拷贝:相当于对于电脑中某个文件夹内部的所有子文件夹新建了快捷图标,放到新的文件夹中,所以内部子文件夹内数据会跟着原来文件的改变而改变。
  • deepcopy()深拷贝:相当于对于电脑中某个文件夹用u盘拷贝了一个备份。所以原来电脑中文件夹内文件改变时,u盘的文件是不会变化的。
# 等号拷贝
print("等号拷贝---------------------------------------------")
list1 = ["张三", "李四", "王五", "赵六"]
list2 = list1
print(id(list1))
print(id(list2))

list1[1] = "麻花"
print(list1)
print(list2)


# copy浅拷贝
print("copy浅拷贝--------------------------------------------")
list1 = [1, 2, 3, 4, ['a', 'b', 'c']]
list2 = list1.copy()

print("列表1的ID:", id(list1))
print("列表2的ID:", id(list2))

print("修改元素之前:", list1)
print("修改元素之前:", list2)

print("列表1当中元素ID:", id(list1[4][0]))
print("列表2当中元素ID:", id(list2[4][0]))

list1[4][0] = "麻花"

print("修改元素之后:", list1)
print("修改元素之后:", list2)

# deepcopy深拷贝
from copy import deepcopy
print("deepcopy深拷贝--------------------------------------------")
list1 = ["张三", "李四", "王五", "赵六"]
list2 = deepcopy(list1)

print(id(list1))
print(id(list2))

print("列表1当中元素ID:", id(list1[1]))
print("列表2当中元素ID:", id(list2[1]))

list1[1] = "麻花"

print(list1)
print(list2)

执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值