• Python宏观


    Python宏观

    一概念梳理:

    1.变量:

    变化的量.量:衡量,衡量状态的变化
    
    程序执行的目的:替代人类执行重复复杂的运算,那么运行过程中数据是不停的变化的.
    
    任何一个变量都有 id+type+value
    
    height=90
    id:变量在内存中的地址,但是内存地址不利于记忆,于是有了变量名.
    
    变量名映射变量
    
    type:不同的状态用不同的数据类型去表示. 选择合适的数据类型是为了计算的方便.
    
    例如:体重75KG,可以用str可以用int,但是前提是变化的量,还有可计算
    
    字符串来标记体重的话,是不可以用来计算的!
    
    int可以用来计算
    
    因此在写程序之前,你可以预见这个量是用来衡量何种状态(分数,体重,身高)的变化,给他合理的变量类型.
    
    不同的变量类型------数据类型------有不同的方法,即数据的变化方式,例如算数运算,逻辑运算,容器类型元素的CRUD
    
    value:变量的值.就是指的字面量.
    View Code

    2.作用域:

    是一种规则,不遵守导致程序bug或者无法运行

    作用域:变量的生效范围
    python只有两层作用域
    1.局部作用域,即函数作用域
    2.全局作用域
    和js中的var一样,没有块级作用域
    例如if  for  while中定义的变量都是全局作用域

     3.namespace

    确实存在的

    交互界面输入
    import this最后一行是
    Namespaces are one honking great idea -- let's do more of those!
    
    namespace分了三层
    内置ns
    全局ns
    前两个都是全局作用域
    局部ns,只有调用函数的时候才有,函数结束就消失,是局部作用域
    
    namespace的本质是dict
    是许多的字典嵌套在一起
    
    我的理解namespce是用来定位的
    python一切皆对象,包是对象,py文件是对象,类是对象,函数是对象,
    他们全是变量,而类名,函数名,对象名,包名不过是变量名而已.
    
    通常代码里面找常见的函数,类等直接用变量名即可
    但是找包名 模块名,再加上不同的包名下可能有同名py文件,同名的类名
    
    ns是用来区分他们的.
    
    1.内置ns:运行python代码,python解释器先启动,将内置的包 类 函数加载到内存,用包名,类名 函数名来映射它们在内存里面的地址,然后将他们放到内置ns中,即一个字典里面.
    2.全局ns:加载你写的py文件,读取里面的变量,将他们装到一个字典里面,即全局ns中.
    3.局部ns:运行py代码,遇到函数的时候开局部的ns,将局部的数据放到一个字典里面.
    
    
    加载顺序是:内置ns--->全局ns----->局部ns
    查找顺序是:由当前所处的ns,局部ns---->全局ns---->内置ns,按此顺序依次查找.
    坑:享用内置的一个模块,但是你的全局ns中写了一个和内置ns中同名的,那么就不会用内置的而是用的你写的ns中的类.
    View Code

    局部ns相互独立,全局无法访问局部的

    局部可以访问和修改全局的,局部用global声明全局变量,然后就可以修改了

    但是十分不建议在局部修改全局的值,因为无感知!

    nonlocal关键字,指的是找外层的变量,但是摸不到全局,用在函数嵌套里面.

    4.魔法方法

    python设计者定义的
    你无法自定义魔法方法
    无需主动调用魔法方法
    有许多的"机关"来触发魔法方法
    
    魔法方法是为了让类锦上添花
    写出来的代码更加灵活多变!
    
    不好的地方就是,你不熟悉魔法方法,看源码会懵逼
    
    魔法方法+鸭子类型,成就了python
    
    isinstance()方法比较的是否属于一个大类,
    type()只能看对象的真面目
    
    例如假设一个类B实现了__iter__()方法,
    那么这个类创建的对象b,type(b)得到的是类
    而isinstance(b,Itreable)得到的是true
    
    可以将魔法方法视为java里面的接口,实现了这个接口的所有类就归于于这个接口类型
    但是程序员不能自定义这个接口
    View Code

     5.python代码执行顺序

    python hello.py
    
    1.python解释器启动,将内置的包和模块进行加载解析.将解析结果放到内置ns中
    2.python解释器去找hello.py文件在硬盘的位置,加载到内存当中.然后解析,结果放到全局ns中
    3.解释器翻译执行hello.py代码,
    
    解析.py文件,遇到def创建一个function对象,指向函数代码片段,但是不会执行.
    只有第三阶段调用函数的时候,才会去执行function里面的代码.
    因此解析阶段只会找到语法错误
    至于逻辑错误只有运行阶段才会报
    View Code
    看十遍不如自己写一遍!巩固基础,纵横开拓!
  • 相关阅读:
    推荐一款好用的博客离线编辑工具——OpenLiveWriter
    Windows下MySQL5.7版本中修改编码为utf-8
    IDEA中常用优化设置
    夯实Java基础系列目录
    夯实Java基础(二十四)——Java8新特征之Optional类
    StringBuilder为什么线程不安全(面试必问)
    【JUnit】测试套件(Test Suite)
    【JUnit】基于控制台的 Runner
    【JUnit】JUnit 和 BlockJUnit4ClassRunner
    【JUnit】JUnit 父类和子类执行顺序
  • 原文地址:https://www.cnblogs.com/gyxpy/p/13269564.html
Copyright © 2020-2023  润新知