zoukankan      html  css  js  c++  java
  • Day15:Python 【模块】及__name__:

    什么是模块:

    在Python中,随着这代码的撰写,代码越来越长,所以产生了,模块这个概念,模块是什么?模块就是一个.py文件,在撰写代码时,我们把不同的功能的代码封装到一个.py文件里,用得时候导入 即可。

    模块有什么好处:

    代码的可维护性:当你写好了一个程序的功能后,封装到一个.Py文件中,如果需要使用的时候,别人或者自己导入进来就好。

    模块的分类:

    • python标准库 【python内置的模块】
    • 第三方模块 【从网上下载的别人的写好的模块】
    • 应用程序自定义模块【自己定义的模块】

    导入模块及模块使用的方法:

    1、import 语句

    1 import os
    2 #导出os模块
    3 #一般用此语句可以导入系统内置模块
    4 #一般也可以导入当前目录下的模块

    备注:1、pythhon 解释器是这么找到os.py文件呢 ?解释器会自动搜索sys.path (系统变量中)

       2、导入多个模块时可以 用【,】分割 例: import os,re

    导入模块后的使用方法:

    例:现在有2个py文件,一个test.py 需要yxg.py这个模块导入

    yxg.py的内容是:

    1 def cal(x,y):
    2     return x+y
    3 print("hello word")
    4 def aggregate(x,y)
    5   return x*y

    那test.py里面的导入方式:模块名.需要导入的模块。  注:导入模块就是执行所导入模块的里面的代码

    1 import yxg
    2 print(yxg.cal(2,2))#用.的方式执行函数
    3 #输出
    4 #hello word
    5 #4

    如果不想用"."的方式来运行模块里面的方法还有另外一种也是是   【from…import 语句

    1 from yxg import cal
    2 print(cal(2,2))#用.的方式执行函数
    3 #输出
    4 #hello word
    5 #4

     如果想一次性导入模块所有里面的方法,也可以用【From…import* 语句】

    注:一般不建议用这种方法,因为有的方法你用不上,你导入了也没用

    1 from yxg import *
    2 print(cal(5,2))
    3 print(aggregate(5,2))
    4 #输出
    5 #hello word
    6 #7
    7 #10

    不同路径下的模块调用

    当使用import语句导入模块时,默认情况下,会按照以下顺序进行查找。

    (1)当前目录(既执行的python脚本文件所在的目录)下查找

    (2)到python PATH(环境变量)下的每个没录下查找

    (3)到python的默认安装目录下查找

    以上各个目录的具体位置保存在标准模块sys的sys.path变量中,我们先了解下,python导入模块的时候,是用sys模块怎么找所用的模块呢?

    注意:在导入模块时,模块名是区分大小写的。

    import sys
    print(sys.path)
    """
    输出:
    ['C:\Users\Administrator\Desktop\untitled\duoduo', 
    注意:↑上面这个路径就是你执行test.py的路径
    'C:\Users\Administrator\Desktop\untitled',
     'C:\python3\python37.zip',
      'C:\python3\DLLs', 
      'C:\python3\lib',
       'C:\python3', ]
    """
    #这就是python寻找模块的顺序(不同计算机的python安装不一样,路径不一样)

    1、yxg.py现在在my_module这个包下面,那test怎么调用yxg.py呢

    1 from my_module import yxg 
    2 print(yxg.cal(5,2))
    3 print(yxg.aggregate(5,2))

    2、查看下面的目录结构,根据需求怎么撰写代码?

    注:在开发软件的时候,一般我们都会设置一个程序入口的执行文件,还有就是一个逻辑的文件。然后各个功能的.py文件放置在不同的文件夹里面。现在我们要用。test.py当这个入口文件,test.py调用main.py。然后main.py当主逻辑文件。main.py调用yxg.里面的模块

    test文件的写法

    1 from my_module import main
    2 main.example()
    3 #调用main模块里面example函数

    main 文件的写法

    1 from my_module import yxg
    2 #为什么要这么写呢??
    3 #因为我们执行的test.py文件,python寻找模块的时候找到的执行文件的路径
    4 #而不是同级目录的路径相对于test.py文件,那yxg.pyj就在my_moule下
    5 #如果直接写成import yxg 那肯定是错误的
    6 def example():
    7     print(yxg.cal(3,4))
    8     

    3、多层包的模块导入:如果我想用test导入yxg这个模块呢?

    1 from db.db1 import yxg
    2 print(yxg.cal(3,5))
    3 from db.db1.yxg import cal
    4 print(cal(3,6))
    临时修改环境变量
    test,调用yxg

     1 # from bin import yxg
     2 #如果这样调用肯定是错误的,因为你执行文件在my_module
     3 # from duoduo.bin import yxg
     4 #这样你在你得pycharm 是可以运行,但是在解释器里面是报错
     5 #我们需要导入下sys模块,来修改下环境变量,然后在导入模块就可以了
     6 # import sys
     7 # sys.path.append(r"C:UsersAdministratorDesktopuntitledduoduo")
     8 # from bin import yxg
     9 #这样虽然可以了,但是这个把路径写死了。如果拷贝到别人机器上就不可以了。
    10 import sys,os
    11 print(__file__)
    12 #输出C:/Users/Administrator/Desktop/untitled/duoduo/my_module/test.py
    13 #其实是找到的是test.py 上面那个路径是pycharm自己加上去的
    14 print(os.path.dirname(os.path.dirname(__file__)))
    15 #这样就输输出:duoduo这一级的目录了
    16 #C:/Users/Administrator/Desktop/untitled/duoduo
    17 #实际工作总,视情况而定吧
    18 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    19 #把这个路径添加过去,就算你把【duoduo】这个文件夹拷贝到别的电脑也可以使用
    20 #sys.path.append是临时修改系统变量,如果想永久修改就在操作系统里面修改
    21 from bin import yxg
    这个代码是干嘛的?if __name__ = "__main__":

    经常有人在代码里面 最后面写一个   if __name__ = "__main__":

    这个是测试代码时使用,例如

    print(__name__)
    #输出:__main__
    from db.db1 import yxg#导入模块
    #当在yxg这个py文件里面写print(__name__)
    #输出db.db1.yxg(打印执行文件的路径)
    #那如果在所导入的模块里面写if __name__ = "__main__":
    # 然后下面写你的代码,模块是导入不进来你下面的东西的,因为你得条件不成立
  • 相关阅读:
    [leetcode]397. Integer Replacement
    [LeetCode]396. Rotate Function
    [leetcode]633. Sum of Square Numbers
    [LeetCode]367. Valid Perfect Square判断完全平方数
    [LeetCode]319. Bulb Switcher灯泡开关
    [LeetCode]313. Super Ugly Number超级丑数,丑数系列看这一道就行了
    [LeetCode]231. Power of Two判断是不是234的幂
    使用导入外部样式文件方式
    使用内部样式
    使用链接外部样式文件方式
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/11093970.html
Copyright © 2011-2022 走看看