Python学习
Python学习
劉光軍_Shine
身后是苍茫黑夜,唯有拼命向前奔跑
展开
-
Python高级特性之切片
取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素,应该怎么做? 笨方法: >>> [L[0], L[1], L[2]] ['Michael', 'Sarah', 'Tracy'] 之所以是笨方法...原创 2018-03-21 17:22:02 · 74 阅读 · 0 评论 -
Python高级特性之列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。 举个例子,要生成list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],可以用list(range(1,11)): >>> list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但...原创 2018-03-22 17:25:44 · 74 阅读 · 0 评论 -
Python 错误处理
在程序运行的过程中,如果发生了错误,可以实现约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因,在操作系统提供的调用中,返回错误码非常常见,比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。 用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错: def foo():...原创 2018-04-08 17:51:44 · 88 阅读 · 0 评论 -
Python使用元类
type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。 比方说我们要定义 一个Hello的class,就写一个hello.py模块: class Hello(object): def hello(self, name = 'world'): print('Hello, %s.' % name) 当Pytho...原创 2018-04-04 17:41:54 · 74 阅读 · 0 评论 -
Python 偏函数
Python的functiools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>...原创 2018-03-30 10:41:13 · 133 阅读 · 0 评论 -
Python使用__slots__
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class: class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' #动态给实例绑...原创 2018-04-03 12:01:40 · 65 阅读 · 0 评论 -
Python高级特性之迭代
如果给定一个list或tuple,我们可以通过for循环来便利这个list或tuple,这种遍历我们成为迭代(iteration)。 在Python中,迭代是通过for...in来完成的,而很多语言 比如c语言,迭代list是通过下标完成的,比如Java代码: for (i = 0; i < list.length; i++) { n = list[i]; } ...原创 2018-03-22 17:08:50 · 85 阅读 · 0 评论 -
Python装饰器
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。 >>> def now(): ... print('2015-3-25') ... >>> f = now >>> f() 2015-3-25 函数对象有一个__name__属性,可以拿到函数的名字: >>> now....原创 2018-03-28 18:18:27 · 73 阅读 · 0 评论 -
Python高级特性之迭代器
我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等; 一类是generator,包括生成器和带yield的generator function。 这些可以直接作用于for循环的对象称为可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象: >&g...原创 2018-03-26 14:37:42 · 85 阅读 · 0 评论 -
Python 返回函数
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 实现一个可变参数的求和,通常情况下,求和的函数时这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax ...原创 2018-03-28 16:29:20 · 77 阅读 · 0 评论 -
Python高级特性之生成器
通过列表生成式,我们可以直接创建一个列表,但是受内存限制,列表容量肯定是有限的,而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中...原创 2018-03-23 14:13:17 · 92 阅读 · 0 评论 -
Python序列化
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name = 'Bob', age = 20, score = 88) 可以随时修改变量,比如把name改成Bill,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的Bill存储到磁盘上,下次重新运行程序,变量又被初始化为Bob。 我们把变量从内存中变成可存储或传输的...原创 2018-04-09 20:29:32 · 56 阅读 · 0 评论 -
Python面向对象编程-访问限制
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 59) >>> bart.score 59 >&g...原创 2018-04-02 16:36:34 · 73 阅读 · 0 评论 -
Python 匿名函数
当我们在传入函数时,有些时候,不需要显示地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x²时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> list(map(lambda x: x *x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 1...原创 2018-03-28 16:53:04 · 65 阅读 · 0 评论 -
Python使用@property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑,为了限制score的范围,可以通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: class Student(object): def get_...原创 2018-04-04 10:45:16 · 77 阅读 · 0 评论 -
Python函数的参数
一、位置参数 例如我们写一个计算x²的函数: def power(x): return x * x 对于power(x)函数,参数x就是一个位置参数。当我们调用power函数时,必须传入有且仅有的一个参数x:power(5) power(15) 现在如果要计算x³怎么办?可以在定义一个power3函数,但是如果要计算x4、x5、、、怎么办?我们不可能定义无限多个函数。...原创 2018-03-21 17:03:03 · 121 阅读 · 0 评论