模块和包的导入方法

一、什么是模块(Module)

在Python中,模块是一种包含变量、函数和类等定义的.py文件。模块可以是标准库中提供的模块,也可以是其他开发者创建的自定义模块。
模块的优点:

  • 代码复用:用于组织和重用代码,让代码更有组织性和可维护性。
  • 提供命名空间:模块提供了一个独立的命名空间,可以避免命名冲突。不同模块中的变量、函数和类可以具有相同的名称,而不会相互干扰。

二、模块的使用

  • 通过import关键字导入模块
#方法一:import 模块名;模块名.功能
import math
print(math.sqrt(9))

#方法二:from 模块名 import 功能1,功能2;功能调用(不需要书写模块名.功能)
from math import sqrt
print(sqrt(9))

#from 模块名 import *;功能调用(不需要书写模块名.功能)
from math import *
print(sqrt(9))

  • 通过as关键字给模块起别名
#模块定义别名
import time as tt
tt.sleep(2)
print('hello world')

#功能别名
from time import sleep as sl
sl(2)
print('hello world')

  • 调用自己制作的模块
  1. 在my_module1.py文件中定义一个testA()函数
def testA(a,b):
print(a + b)

'''
`__name__` 是一个特殊的内置变量。当一个模块被直接运行时,`__name__` 的值为 `'__main__'`。
如果模块是被其他模块引入的,那么 `__name__` 的值就会是那个模块的名字。这个特性通常用于判断一个
模块是被直接运行还是被导入的。
'''
#这里的代码只有在文件被直接运行时才会执行
if __name__ == '__main__':

  1. 调用my_module1模块
import my_module1
my_module1.testA(3,6 )
  • 模块的定位顺序
#1、自己的文件名不要和已有模块名重复,否则会导致模块功能无法使用
'''
当导入一个模块时,Python解析器的搜索顺序是:
1. 当前目录
2. 如果不在当前目录,Python会在shell变量PYTHONPATH下的每个目录中查找。
3. 如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
4. 模块的搜索路径存储在系统模块sys的sys.path变量中。这个变量包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
'''
import random
#AttributeError: module 'random' has no attribute 'randint'
# numbers = random.randint(1,10)
# print(numbers)

#2、当使用from xx import function 导入模块的功能的时候,如果功能名字重复,调用到的是最后定义或导入的功能
def sleep():
    print('我是自定义的slepp')

from time import sleep
sleep(2)

三、导入包

包:在Python中,包(Package)是一种组织和管理模块(Module)的方式。包是一个包含多个模块的文件夹,文件夹中必须包含一个名为__init__.py的文件,用于将文件夹标识为一个包。

#方法一
'''
1、导入
import 包名.模块名
2、调用功能
包名.模块名.功能()
'''
import my_package.my_module1
my_package.my_module1.print_info()

#方法二
'''
注意:必须在__init__.py文件中添加__all__=[],控制允许导入的模块列表
from 包名 import *
模块名.目标
'''
from my_package import *
my_module1.print_info()

四、作用域

在Python中,作用域指的是变量和函数的可访问范围。这可以通过命名规则来实现。

  • 公开的函数和变量可以直接引用,其名称没有特殊的前缀。
  • 以双下划线(__)开头和结尾的特殊变量是可以直接引用的,但它们有特殊的用途,比如__author____name__等。
  • 以单下划线(_)开头的函数或变量是非公开的,不应该被直接引用,例如_abc__abc等。

尽管Python没有一种方法可以完全限制访问非公开函数或变量,但从编程习惯上来说,不应该直接引用非公开函数或变量。

class Prentice(object):
    def __init__(self):
        self.kongfu = '[独创煎饼果子配方]'
        #定义私有属性
        self.__money = 200000

    #定义私有方法
    def __print_info(self):
        print('这是私有方法')

    #获取私有属性:get_X
    def get_money(self):
        return self.__money

    #修改私有属性:set_XX
    def set_money(self):
        self.__money = 500
#创建徒孙类
class Tusun(Prentice):
    pass
muxi = Tusun()

#调用get_money函数获取私有属性money的值
print(muxi.get_money())
#调用set_money函数修改私有属性money的值
muxi.set_money()
#调用get_money函数获取私有属性money的值
print(muxi.get_money())

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:
外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值