zoukankan      html  css  js  c++  java
  • 整理笔记3.28

    #1、一个py文件有几种用途?
    #有两种用途:一种是被当程序运行,2、被当做模块导入
    #区别:
    #执行py文件与导入文件的区别是什么?
    #foo模块没有被引用的时候被回收

    #2、from...import...
    #优点:肯定不会与当前名称空间中的名字冲突,指名道姓的要名字
    #缺点:必需加前缀“模块.”加前缀显得麻烦
    #from...import...导入也发生了三件事
    #1、产生一个模块名称空间
    #2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间
    #3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址

    # from foo import x
    # from foo import get
    # from foo import change
    # get()
    # change()
    #
    # print(x)
    #from...import
    #优点:可以不用加前缀,代码更精简
    #缺点:容易与当前名称空间混淆
    #from foo import x #x=模块foo中值1的内存地址
    #x = 111




    #3、循环导入问题

    #1、当foo.py被运行时,__name__的值为“__main__"
    #当foo.py被当做模块导入时,__name__的值为”foo"

    # if __name__ == "__main__":
    # print("文件被执行")
    # getattr()
    # change()
    # else:
    # #被当做模块导入时运行

    #一行导入多个名字(不推荐)
    #from foo import x,get,change


    #导入模块中的所有名字(一般不用)
    #from foo import *
    # print(x)
    # print(get)
    # print(change)

    #了解:__all__=["x","get","change"]控制*代表的名字有哪些
    # from foo import *
    # print(x)

    #起别名
    # from foo import get as g
    # print(g)


    #循环导入
    # import foo
    # foo.say()
    #
    # import time
    # time.sleep(10)
    #
    # import foo
    # foo.say()

    #了解:sys.modules查看已经加载到内存中的模块
    # import sys
    # import foo #foo=模块的内存空间地址
    #
    #
    # print("foo" in sys.modules)
    # print(sys.modules)


    #import sys
    #打foo.py就把foo.py的文件夹添加到环境变量中
    #sys.path.append(r"D:py_exerciseday19")
    #import foo
    #foo.say()


    """
    补充函数的知识点:
    类型提示type hinting(最低python3.5以上才支持)
    """
    # str int ("play","music")
    #def register(name:str,age:int,hobbies:tuple)->int:
    #def register(name: str = "Anna", age: int = 18, hobbies: tuple(1, 2)) -> int:
    """
    def register(name:必须传入名字,age:111,hobbies:必须传入爱好元组)
    """
    # print(name)
    # print(age)
    # print(hobbies)
    # return 111
    # register("Anna",20,("music","play"))
    # res = register()

    #print(register.__annotations__)

    """
    什么是包?
    1、包就是一个包含有__init__.py文件的文件夹
    2、包的本质是模块的一种形式,包是用来被当做模块导入

    """
    #1、产生一个名称空间
    #2、运行py文件,将运行过程中产生的名字都丢到1的名称空间中
    #3、在当前执行文件的名称空间中拿到一个名字user,user指向1的名称空间
    # import user
    # print(user.x)
    # user.say()

    #模块的使用者:egon老师
    #环境变量是以执行文件为准的,所有的被导入的模块或者说 后续的其他文件
    #的sys.path都是参照执行文件的sys.path
    #import sys
    # sys.path.append("绝对路径地址")
    # print(sys.path)

    # import foo
    # foo.f1()
    # foo.f2()
    # foo.f3()

    from foo import f1,f2,f3

    f1()
    f2()
    f3()

    """
    强调
    1、关于包相关的导入语名也分为import和from...import...无论是哪种,
    凡是在导入时带点的,点左侧的必需都是包
    例如:
    from a.b.c.d.e.f import xxx
    import (a.b.c.d.e.f) 都是包
    """

    from foo import f4

    """
    软件开发的目录规范
    大项目,一个总文件夹
    第一个子文件夹bin,调核心代码文件
    第二个子文件夹cont配置文件
    第三个子文件夹db放数据库相关文件
    第四个子文件夹lib模块文件,包
    第五个子文件夹core核心代码逻辑


    requirements.txt存放软件依赖的外部python包列表
    readme 解释说明,软件,代码,官方文档,参考资料

    """

    #绝对导入,以包的文件夹作为起始来进行导入
    #import sys
    #print("这是在被导入的__init__.py中查到的sys.path")



    from foo.m1 import f2
    from foo.m2 import f3
    from foo.foo import f1
    from foo.bbb.m4 import f4
    #import foo.bbb.m4.f4 语法错误

    #相对导入:仅限于包内使用,不能跨出包(包内模块之间的导入,推荐使用相对导入)
    #.:代表当前文件夹
    #..:代表上一层文件夹
    from .foo import f1
    from .m1 import f2
    from .m2 import f3
    #from .bbb.m4.import f4
    #强调:相对导入不能跨出所,所以相对导入仅限于包内模块彼此这间闹着玩
    #而绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式
  • 相关阅读:
    (转)CTP: 平昨仓与平今仓,log轻轻告诉你.......
    linux上的语音识别程序
    6个可以隐藏运行bat,浏览器等程序的方法
    Android——用PagerAdapter实现View滑动效果
    Android——关于PagerAdapter的使用方法的总结(转)
    Android——浅谈HTTP中Get与Post的区别(转)
    Android——远程存储器存储:JDK方式和Volley框架的get和post
    android——字符串string(转)
    Android——事务
    Android——监听事件总结
  • 原文地址:https://www.cnblogs.com/acnjanna2019/p/12585585.html
Copyright © 2011-2022 走看看