python中的模块

1. 模块的定义

  • 在Python中一个后缀名为.py的Python文件就是一个模块 (1)模块中可以定义函数、类等
  • 模块也可以避免函数、类、变量等名称相冲突的问题。
  • 模块不仅提高了代码的可维护性,同时还提高了代码的可重用性。
  • 在给模块命名的时候要求全部使用小写字母,多个单词之间使用下划线进行分隔。
  • 如果自定义模块名称与系统内置模块名称相同,那么在导入时会优先导入自定义的模块。

系统内置模块:

由开发人员编写好的模块,在安装 python解释器时一同安装到计算机

自定义模块:

一个以.py结尾的文件就是一个模块,新建python文件,实际上就是在新建模块

自定义模块的意义

  • 规范代码,将功能相同的函数 、类等封装到一个模块中,让代码更易于阅读,
  • 与系统内置模块相同,可以被其他模块调用,提高开发效率

2. 模块的导入

模块编写完成就可以被 其他模块进行调用,使用被调用模块中的功能
import 导方方式的语法结构:
import 模块名称 [as 别名]
from … import 导入方式的语法结构:
from 模块名称 import 变量/函数/类/*

导入demo

name='小安'
def info():
    print(f'您好,我是{name}')

导入

import my_info
print(my_info.name)
my_info.info()
import my_info as a
print(a.name)
a.info()
from my_info import *
print(name)
info()
from my_info import name
print(name)

同时导入多个模块

# 同时导入多个模块
import math,time,random

如果导入模块中具有同名的变量和函数,后导入的会将之前导入的进行覆盖

my_info.py

name='小安'
def info():
    print(f'您好,我是{name}')

my_info1.py

name='张三'
def info():
    print(f'您好,我是{name}')

demo1.py

from my_info import *
from my_info1 import *
print(name)
info()

输出
张三
您好,我是张三


如果不想被覆盖

使用import来解决

import my_info
import my_info1
print(my_info.name)
my_info.info()
print('-'*30)
print(my_info1.name)
my_info1.info()

输出
小安
您好,我是小安


张三
您好,我是张三

封装StringUtils模块

string_utils.py


# 字符串反转
def reverse_string(string):
    return string[::-1]

# 转成大写
def to_be_upper(string):
    return string.upper()

# 转成小写
def to_be_lower(string):
    return string.lower()

# 获取字符索引
def get_str_index(string, find_str):
    return string.find(find_str)

# 获取字符出现的次数
def get_str_count(string, count_str):
    return string.count(count_str)

demo1.py

import string_utils as su

str=su.to_be_upper('hello')

print(str)
print(su.get_str_count('hello world','hello'))

输出
HELLO
1

另外一种封装方式
class StringUtils:
    # 字符串反转
    @staticmethod
    def reverse_string(string):
        return string[::-1]

    # 转成大写
    @staticmethod
    def to_be_upper(string):
        return string.upper()

    # 转成小写
    @staticmethod
    def to_be_lower(string):
        return string.lower()

    # 获取字符索引
    @staticmethod
    def get_str_index(string, find_str):
        return string.find(find_str)

    # 获取字符出现的次数
    @staticmethod
    def get_str_count(string, count_str):
        return string.count(count_str)
    

demo1.py

from string_utils import  StringUtils as su

str=su.to_be_upper('hello')

print(str)
print(su.get_str_count('hello world','hello'))

输出
HELLO
1

3. python中的包

  • 包含__init__.py文件的文件夹(目录)
  • 可以避免模块名称相冲突的问题
  • 当包被导入时,__init__.py文件中的代码被自动执行,只执行一次

新建包

在这里插入图片描述

my_info.py

def info():
    print("大家好,我是小安")
name='小安'

__init__.py

print('__init__.py文件,在导入时会被自动执行一次')

demo1.py

import admin.my_info as a
print(a.name)
a.info()
print('-'*30)
from admin import my_info as b
b.info()
print('-'*30)
from admin.my_info  import info
info()
print('-'*30)
from admin.my_info import * 
print(name)

输出
在这里插入图片描述

主程序运行

当模块在被导入到其他的模块中时,它的代码不希望被执行时,使用主程序运行去控制

if __name__== '__main__'
	pass

module_a.py

print("hello world")

module_b.py

# 导入
import module_a

运行module_b.py,输出
hello world
在导入模块时,被导入的模块代码中会被执行一次,为了不执行这一次代码,可以使用主程序运行代码进行控制

module_a.py 修改为如下代码

# print("hello world")
# name='小安'
# print(name)
if __name__ == '__main__':
    print("hello world")
    name='小安'
    print(name)

再次执行module_b.py,module_a中的代码将不会执行

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值