Python反射机制详解
一、Python反射机制 Python反射,可以理解为利用字符串的形式去对象中操作成员属性和方法,常见操作就包括了查找、增加、删除、判断等,是一种基于字符串的事件驱动! 解释Python的反射,先提一个简单的需求。考虑有这么一个场景,根据用户输入的url的不同,调用不同的函数,实现不同的操作,也就是一个url路由器的功能,这在web框架里是核心部件之一。比如……
Python面向对象编程
一、面向对象编程 程序等于指令加数据组成(算法加数据结构),Python 支持面向过程式编程也支持面向对象式编程。面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序……
Python编程常用技巧–持续更新
1. Python判断值是否为空 代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是:if x is None 第二种是:if not x 第三种是:if not x is None`(这句这样理解更清晰`if not (x is None)`) 。`if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。……
Python列表解析式
列表解析式也称之为列表推导式,即List Comprehensions,是Python内置的非常简单却强大的可以用来创建列表的生成式。本质上就是用列表来构建列表,通过对已有列表中的每一项应用一个指定的表达式来构建出一个新的列表。列表解析式的优势是编码简单,运行起来很快。 列表解析式的三个核心要素是: 1. 作用于输入序列的运算表达式; 2. 对输入序列的循环……
Python解包(Unpacking)
一、序列解包 Python赋值语句技巧之序列解包(sequence unpacking),是Python语言赋值语句的一种技巧方法,在给多个Python变量命名同时赋值时是很有效率的一种方法。简单说就是通过一条命令把string/list/tuple的元素分别赋值给多个变量。 # string解包; >>> ……
Python数据类型:bytes
bytes 类型 在 Python 2 中,有两种类型的字符代表字符串,分别是 Strings 和 Unicode。默认将 Strings 以 utf-8 编码成 bytes 类型,而不是使用 unicode 编码(Python 3 已经把 String 使用 Unicode 编码,Unicode 就是 string,而 bytes 就是 bytes),且存……
Python面向对象:定制类(魔术方法)
在Python中,看见形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的,称之为专有方法或魔术方法。比如__len__()方法我们也知道是为了能让class作用于len()函数。这种特殊用途的函数在Python中有很多,可以帮助我们用来定制类。 __add__ 来看下面这个例子,做一个简单的复数加法运算: ……
Python面向对象:上下文管理器
一、上下文管理器 在使用Python编程中,可以会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作;当语句块执行完成后,需要继续执行一些收尾动作。 例如:当需要操作文件或数据库的时候,首先需要获取文件句柄或者数据库连接对象,当执行完相应的操作后,需要执行释放文件句柄或者关闭数据库连接的动作。又如,当多线程程序需要访问临界资源的……
Python利用sorted进行字典排序
一、排序算法 排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。 Python内置的sorted()函数就可以对list进行排序: >>&……
Python面向对象:类继承之super函数
一、类多重继承 Python是支持类中多重继承的,概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。 我们知道Python的类分为经典类与新式类。Python2.7之前的版本中可以采用经典类,经典类继承父类的顺序采用深度优先算法,但在Python3之后的版本就只承认新式类……
Python语法练习(解决各种小问题)
下面练习练习Python语法,做几个小功能。 1. 合并Nginx访问日志IP,根据访问次数降序 模拟的日志IP(实际中只需要处理一下原始日志) $ cat access.log 10.10.0.1 10.10.0.2 10.10.0.1 10.10.0.2 10.10.0.3 10.10.0.1 10.10.0.……
Python面向对象:继承与多态
一、继承与多态 在面向对象(OOP)程序设计中,当我们定义一个类的时候,可以从某个现有的类继承,新的类称为子类(Subclass),而被继承的类称为基类、父类或超类(Base class、Super class)。类中继承就是子类获得父类的一些方法和属性(类属性、实例属性、类方法、实例方法、静态方法),这里使用一些也就是说有些是子类继承不到的,比如私有属性。……