LEGB法则 / LEGB Rule LEGB 变量搜索顺序 ---- 来源于<Python学习手册>/ Learning Python Page 419 ---- Python 的变量名解析机制称为  LEGB 法则. L – Local: 本地作用域; E – Enclosing: 上一层结构中 def 或 lambda 的本地作用域; G – Global: 全局作用域; B – Build-in: 内置作用域. LEGB作用域查找原则:当引用一个变量时,Python 按以下顺序依次进行…
变量类型 / Variable Type 在 Python 中,变量主要有以下几种,即全局变量,局部变量和内建变量, 全局变量 / Global Variable 通常定义于模块内部,大写变量名形式存在,可被其他模块导入,但还有一种特殊的私有变量,以单/双下划线开头,同样定义于模块内,但无法通过 from modelname import * 的方式进行导入. 局部变量 / Local Variable 局部变量通常定义于函数内部,变量名以小写形式存在,仅在函数的局部作用域起作用. 内建变量 /…
条件判断: 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:…
1.什么变量 变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间. 1.1变量声明 Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 第一种,指定变量类型,声明后若不赋值,使用默认值. var v_name v_type v_name = value 第二种,根据值自行判定变量类型. var v_name = value 第三种,省略var, 注意 :=左侧的变量不应该是已经…
匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 lambda 表达式进行构建.常用于快速建立起一个(一次性的)函数. Note: lambda 是 Python 的一个表达式/关键字,类似 return,并非一个函数,而是能够生成匿名函数. 关于匿名函数的使用,可以用下面的方式,直接使用, # Use directly f = lambda x: x…
builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtins Content 通过对 builtins 模块的导入(也可使用 __builtins__ 代替),可以利用 pdir 模块查看内部的函数与类及异常等. pdir 模块是一个用于查看模块内部所有函数.类等信息的模块,安装方式为: pip install pdir2 具体使用方式也十分简单, imp…
生成器 / Generator 目录 关于生成器 生成器与迭代器 生成器的建立 通过迭代生成器获取值 生成器的 close 方法 生成器的 send 方法 生成器的 throw 方法 空生成器的检测方法 1 关于生成器 从计算机科学角度上看,生成器是一种类协程或半协程(Semi-coroutine),生成器提供了一种可以通过特定语句或方法来使生成器的执行对象(Execution)暂停,而这语句一般都是 yield.通过  yield 语句将每一次的结果切出执行对象,并带到主线程上来.yield…
装饰器 / Decorator 目录 关于闭包 装饰器的本质 语法糖 装饰器传入参数 1 关于闭包 / About Closure 装饰器其本质是一个闭包函数,为此首先理解闭包的含义. 闭包(Closure),又称词法闭包(Lexical Closure)或函数闭包(Function Closures),是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体,这种组合使用一种映射关…
初识Go语言之变量 var声明创建一个具体类型的变量,然后给它附加一个名字,设置他的初始值,这种声明都是一个通用的形式: var name type = expression 在实际的开发中,为了方便开发,我们一般不会这么写,我们会省略type或者expression,因为省略了type,编译器会由expression推断出type的值,而省略了expression,编译器会给变量自动赋值为零值,就是常见的nil.不同类型的零值如下表所示: type 零值 int 0 boolean false…
类属性.实例属性和私有属性 Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍 类属性 / Class Property 类属性在__init__()之外初始化,在外部可以通过类,类实例进行调用, 在内部可以通过类进行调用. 在定义属性的过程中,尽量将各个实例共有的属性定义为类属性,因为定义为实例属性则在每一次实例化时都会初始化一次,为此定义为类属性可以减少内存加快运行速度. 实例属性 / Instance Property 实例属性一般在__init__()内…
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- 抽象方法. 类实例方法 / Instance Method 类实例方法通过关键字 def 进行定义,第一个参数默认为 self,可利用 self / 类实例 对方法进行调用,是最基本的一种方法 class Foo(object): def foo(self): print("This is foo…
静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 def 定义之前加上 @staticmethod 进行装饰,便可以使该方法成为静态方法,静态方法无法调用实例属性.静态方法可以通过实例或类进行调用.通常用于无需生成实例或无需共享实例属性的方法中,比如一些纯粹的数学公式计算等场合. class Foo(): @staticmethod def foo…
魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为),如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的.它们经常是两个双下划线包围来命名的(比如 __init__,__lt__),Python的魔法方法是非常强大的.下面介绍几种常用的魔术方法 __…
类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用. 类中还包含的一些共有的特殊属性. 特殊类属性 含义 __name__ 类的名字(字符串) __doc__ 类的文档字符串 __bases__ 类的所有父类组成的元组 __dict__ 类的属性组成的字典 __module__ 类所属的模块 __class__ 类对象的类型 class Foo(): """ This…
基类与继承 / Base Class and Inheritance Class 面向对象的特性使得 Python 中不可避免地需要使用到类和类的继承,类的继承可以使得代码很好的被重用.下面以一些代码示例说明类的继承如何使用. 继承一个基类 首先,定义一个基类 Animal,在初始化中设定一个基本属性以及物种信息,并设置其具有 eat 的能力(self.eat 为 True).此处还重载了魔术方法 __getattr__,当搜索的属性不存在时返回 False(即不具备该能力),最后定义一个 sh…
方法解析顺序 / MRO (Method Resolution Order) 关于方法解析顺序(MRO)的详细内容可以参考文末链接,这里主要对 MRO 进行简要的总结说明以及一些练习示例. 经典类和新式类的 MRO 经典类 描述: 一种不能继承的类,如果经典类为父类,其子类调用父类的构造函数时会报错.且不具备 __mro__ 属性. MRO: Deepth First Search (DFS) / 深度优先搜索 新式类 描述: 新式类是一种为了解决经典类中只能继承不能重写的问题而引入的,新式类默…
内建类与内建函数的区分 / Distinction of Built-in Type and Function 对于 Python,有许多可以不需要定义或引用就可以使用的函数(类)(参考内建模块),诸如 abs, sum 等计算函数,以及 chr, bin, hex 等类型转换函数 (参考内建函数),还有一种,使用方式与函数极为类似,但却是 type 类型的内置类(非官方名称),例如 int,float 等.这些内置类实质上是一个用于生成类(实例)的类(参考元类的概念),通过传入的参数,返回一个…
内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an immutable sequence of integers in the range 0 <= x < 256. bytes is an immu…
内建函数 / Built-in Function or Method Python中有许多的内建函数(查看内建模块部分),此处将对内建函数进行介绍 内建函数 ord / built-in function ord Python 的内置函数 ord 作用是将一个 ASCII 码表中的单个字符转换成对应的十进制整型数据. >>> ord('b') 98 >>> ord('c') 99 内建函数 hex / built-in function hex Python 的内置函数…
__getattr__ 方法 __getattr__ 方法当对象调用内部属性(包括方法等)且未找到对应属性的时候会调用的特殊方法.利用这一特性,可是对函数实现一个代理模式. __getattr__方法实现代理模式 当有一个类中已完成了许多函数的定义,而另外一个类要调用这些函数时,最直接的方法是使用代理,重载类的 __getattr__ 方法, 并在该方法内利用 getattr() 实现对被代理对象的属性获取,从而实现一个代理模式,简化代码. 首先定义一个代理的对象类 Foo,实现几个方法, 1…
__call__ 方法 __call__ 是当对象被调用时会调用的方法,允许一个对象(类的实例等)像函数一样被调用,也可以传入参数. 1 class Foo(): 2 def __init__(self, x, y): 3 self.x = x 4 self.y = y 5 6 def __call__(self, m, n): 7 print('x is %s, y is %s, m is %s, n is %s' % (self.x, self.y, m, n)) 8 9 Foo(1, 2)…
内建类 super / Built-in Type super 关于内建类 对于 super 可以从官方文档中看到基本介绍,super 接收一个类,以及类或类的实例,最终返回一个代理对象的实例.而 MRO 搜索也将被用在 super(同 getattr)上,因此 super 调用的不一定是父类的方法,而有可能是 sibling 的方法.还有一点值得注意的是,当传入的第二个参数被省略时,则返回的 super 对象未绑定,若有第二个参数,则第二个参数必须是第一个参数的实例或子类.官方文档对于 sup…
内建类map / Built-in Type map 关于内建类 map 是一个内建的类,能够返回一个 map 的 obj.map 的第一个参数为一个可执行函数,后续参数均为可迭代对象,map 会分别迭代后续参数并传给可执行函数,并将结果保存. def foo(a, b, c): return a+b+c print(list(map(foo, range(4), range(4), range(4)))) 上面的代码输出结果为 [0, 3, 6, 9] Note: 在 Python2 中,由于…
函数与方法的区别 / Distinction of Function and Method 关于函数与方法的区别,可根据两者的定义看出, 函数function -- A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body. 方法method -- A…
迭代器 / Iteratior 目录 可迭代对象与迭代器协议 迭代器 迭代器(模拟)的建立 1 可迭代对象与迭代器协议 对于迭代器首先需要了解两个定义,迭代器协议 (Iterator Protocol) 与可迭代对象 (Iterable) , 迭代器协议 Iterator Protocol: 迭代器协议是指对象能够提供 next() 方法 (__next__()) ,返回迭代中的下一项,或者引起一个 StopIteration 异常,以终止迭代. 可迭代对象 Iterable: 可迭代对象则是指…
deque双端队列 #双端队列,就是生产消费者模式,依赖collections模块 from collections import deque def main(): info = deque(("hello", "word")) # 内部是序列 info.append(("百度一下")) # 右边添加数据 info.appendleft("www.baidu.com") # 左边添加数据 print("[队列数据]…
一.数值类型 1.实数常量的表示:3.5(双精度),3.5f(单精度),3.5L(长双精度) 2.整数常量:char字符常量(‘a’,‘b’,‘0’)当做一个整型常量参加运算 3.数字字符与英文字母字符的编号(Ascll码)都是顺序连接的 二.控制语句 1.while和do while的区别:当while条件不成立时,while()循环不执行循环语句,而do while会循环执行一次循环语句再判断 2.流程控制语句:continue(中断本次循环)    break(跳出整个循环) 3.开关语句…
作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Python是解释型语言: 计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程.这个过程分成两类,第一种是编译,第二种是解释. 编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言.…
一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目录,比如说logic(逻辑).views(图片渲染).data(数据库)等等. 二.第一个Go程序hello world 2.1 代码 package main import ( "fmt" ) //程序执行的入口函数 func main() { fmt.Print("hello…
一.程序结构 • 定义python文件的头部模板:在File->Settings->Editor->File and Code Templates->Python script脚本里添加头部模板代码. • Python使用相同的"缩进"来区分代码块,每一层向右缩进4个空格. # 与其他常见的编程语言不同,Python不使用{}来表示代码段,而是用相同的缩进来区分# 每一层向右缩进4个空格.缩进表示一个代码块的开始,非缩进表示一个代码块的结束.sex = &quo…