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
看十遍不如自己写一遍!巩固基础,纵横开拓!
原文地址:https://www.cnblogs.com/gyxpy/p/13269564.html