• day21 学习笔记


    一个python文件有两种用途:1.被当做程序运行

    2.被当做模块导入
    二者的区别: ps(回收)__name__==main
    import导入模块在使用时必须加上前缀“模块.”
    优点:肯定不会与当前空间中名字冲突
    缺点:显得麻烦
    from模块名import函数名( 函数名是在当前位置的全局变量,但是指向的内存地址是模块的内存地址)
    通过这种方式导入的时候发生了三件事:
    1.产生一个模块的名称空间

    2.运行时将产生的名字都丢进模块的的名称空间去

    3.在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址绑定
    优点:精简
    缺点:会和当前名称空间产生混淆
    也可以一行导入多个名字
    from 模块名 import * 可以一次性导入模块中的所有名字 (不推荐)
    了解 __all__ = ["模块名"] *导入的时候会根据模块中此属性来找方法
    as 可以用来取别名
    循环导入问题:发生两个模块的相互导用,应该将公用的方法放在一个统一的模块中,或者将导入过程放在方法内部
    模块搜索路径优先级:无论是import 还是from 再导入模块是都涉及到查找问题
    优先级:
    1.内存

    2.按照sys.path中存放的文件顺序依次寻找文件
    sys 模块下 sys.path方法 存放了一系列文件夹,其中第一个文件夹是当前执行文件所在的文件夹
    了解:sys.modules 查看已经加载到内存中的模块
    python 本身提供一种优化机制,在导入模块后,所开辟的内存空间不会因为没有指定或者函数类的空间释放而释放,是会一直存在知道程序执行结束
    sys.path 的应用:跨文件导入模块,可以先利用像sys.path列表里添加路径来完成
    模块格式规范: 模块的文档描述

    导入模块

    定义全局变量

    定义类

    定义函数

    主程序
    补充函数类型提示:要求最低版本是python3.5
    def func(a: 'spam', b: (1, 10), c: float) -> int:
    return a + b + c
    def func(a: 'spam' = 4, b: (1, 10) = 5, c: float = 6) -> int:
    return a + b + c
    强类型语言(python属于强类型) :数据类型不可以被忽略的语言 即变量的数据类型一旦被定义,那就不会再改变,除非进行强转。 在python中,例如:name =
    'xxx',这个变量name在被赋值的那一刻,数据类型就被确定死了
    弱类型语言:数据类型可以被忽略的语言 比如linux中的shell中定义一个变量,是随着调用方式的不同,数据类型可随意切换的那种
    动态语言(python属于动态语言)
    运行时才进行数据类型检查 即在变量赋值时,就确定了变量的数据类型,不用事先给变量指定数据类型
    静态语言
    需要事先给变量进行数据类型定义
    综上所述,Python是一门解释型的强类型动态语言
    什么叫包:就是一个包含有__init__.py 的文件夹
    注意:1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错
    2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模
    导入包的三步过程:1、执行包下的__init__.py文件
    2、产生一个新的名称空间用于存放__init__.py执行过程中产生的名字
    3、在当前执行文件所在的名称空间中得到一个名字,该名字指向__init__.py的名称空间
    绝对导入:以包这个文件夹作为起始进行导入
    关于程序的环境变量是以执行文件为准的,所有的被导入的模块或者说后续的其他文件引用的path都是参照执行文件为准的
    1.关于包相关的导入语句也分为import和from ... import...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如import顶级包.子包.子模块,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

    2、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

    3、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

    相对导入:.代表当前文件所在的目录,..代表当前目录的上一级目录,依此类推
    相对导入只能用from module import symbol的形式,import ..versions语法是不对的,且symbol只能是一个明确的名字
    针对包内部模块之间的相互导入推荐使用相对导入,需要特别强调:
    1、相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的
    2、无论是import还是from-import,但凡是在导入时带点的,点的左边必须是包,否则语法错误

  • 相关阅读:
    Python+VSCode IDE 快速开发配置 #VSCode上配置Jupyter Notebook
    GUI Design Studio 简单通讯本设计原型 1
    GUI Design Studio 简单通讯本设计原型 2
    安装Lua For Windows
    Lua – Hello World!
    GUI Design Studio 功能面板介绍
    中文字符级转换
    Base64传输字节码转换
    这怎么是英文的?
    error? in CLR via c#
  • 原文地址:https://www.cnblogs.com/Jicc-J/p/12593323.html
Copyright © 2020-2023  润新知