为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
python进阶_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。 使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码
    查看全部
  • python中创建实例属性 虽然可以通过Person类创建出xiaoming、xiaohong等实例,但是这些实例看上除了地址不同外,没有什么其他不同。在现实世界中,区分xiaoming、xiaohong要依靠他们各自的名字、性别、生日等属性。 如何让每个实例拥有各自不同的属性?由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值,例如,给xiaoming这个实例加上name、gender和birth属性: xiaoming = Person() xiaoming.name = 'Xiao Ming' xiaoming.gender = 'Male' xiaoming.birth = '1990-1-1' 给xiaohong加上的属性不一定要和xiaoming相同: xiaohong = Person() xiaohong.name = 'Xiao Hong' xiaohong.school = 'No. 1 High School' xiaohong.grade = 2 实例的属性可以像普通变量一样进行操作: xiaohong.grade = xiaohong.grade + 1 任务 请创建包含两个 Person 类的实例的 list,并给两个实例的 name 赋值,然后按照 name 进行排序。 ?不会了怎么办 sorted() 是高阶函数,接受一个比较函数。 参考代码: class Person(object): pass p1 = Person() p1.name = 'Bart' p2 = Person() p2.name = 'Adam' p3 = Person() p3.name = 'Lisa' L1 = [p1, p2, p3] L2 = sorted(L1, lambda p1, p2: cmp(p1.name, p2.name)) print L2[0].name print L2[1].name print L2[2].name
    查看全部
  • python之定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类如下: class Person(object): pass 按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。类的继承将在后面的章节讲解,现在我们只需要简单地从object类继承。 有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建: xiaoming = Person() xiaohong = Person() 任务 请练习定义Person类,并创建出两个实例,打印实例,再比较两个实例是否相等。 ?不会了怎么办 要打印实例,直接使用print语句; 要比较两个实例是否相等,用==操作符。 参考代码: class Person(object): pass xiaoming = Person() xiaohong = Person() print xiaoming print xiaohong print xiaoming == xiaohong
    查看全部
  • python之使用__future__ Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了。要“试用”某一新的特性,就可以通过导入__future__模块的某些功能来实现。 例如,Python 2.7的整数除法运算结果仍是整数: >>> 10 / 3 3 但是,Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数: >>> 10 / 3 3.3333333333333335 >>> 10 // 3 3 要在Python 2.7中引入3.x的除法规则,导入__future__的division: >>> from __future__ import division >>> print 10 / 3 3.3333333333333335 当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。 任务 在Python 3.x中,字符串统一为unicode,不需要加前缀 u,而以字节存储的str则必须加前缀 b。请利用__future__的unicode_literals在Python 2.7中编写unicode字符串。 ?不会了怎么办 使用from __future__ import unicode_literals将把Python 3.x的unicode规则带入Python 2.7中。 参考代码: from __future__ import unicode_literals s = 'am I an unicode?' print isinstance(s, unicode)
    查看全部
  • 如果导入的模块不存在,Python解释器会报 ImportError 错误: import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了StringIO这个功能。 这是因为Python是动态语言,解释执行,因此Python代码运行速度慢。 如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用 C 语言重写,这样就能大大提高执行速度。 同样的功能,StringIO 是纯Python代码编写的,而 cStringIO 部分函数是 C 写的,因此 cStringIO 运行速度更快。 利用ImportError错误,我们经常在Python中动态导入模块: try: from cStringIO import StringIO except ImportError: from StringIO import StringIO 上述代码先尝试从cStringIO导入,如果失败了(比如cStringIO没有被安装),再尝试从StringIO导入。这样,如果cStringIO模块存在,则我们将获得更快的运行速度,如果cStringIO不存在,则顶多代码运行速度会变慢,但不会影响代码的正常执行。 try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句。 利用import ... as ...,还可以动态导入不同名称的模块。 Python 2.6/2.7提供了json 模块,但Python 2.5以及更早版本没有json模块,不过可以安装一个simplejson模块,这两个模块提供的函数签名和功能都一模一样。 试写出导入json 模块的代码,能在Python 2.5/2.6/2.7都正常运行。 先尝试导入json,如果失败,再尝试导入simplejson as json try: import json except ImportError: import simplejson as json print json.dumps({'python':2.7})
    查看全部
  • Python的os.path模块提供了 isdir() 和 isfile()函数,请导入该模块,并调用函数判断指定的目录和文件是否存在。 注意: 1. 由于运行环境是平台服务器,所以测试的也是服务器中的文件夹和文件,该服务器上有/data/webroot/resource/python文件夹和/data/webroot/resource/python/test.txt文件,大家可以测试下。 2. 当然,大家可以在本机上测试是否存在相应的文件夹和文件。 import os print os.path.isdir(r'C:\Windows') print os.path.isfile(r'C:\Windows\notepad.exe') 注意到os.path模块可以以若干种方式导入: import os import os.path from os import path from os.path import isdir, isfile 每一种方式调用 isdir 和 isfile 都有所不同。 参考代码: import os print os.path.isdir(r'/data/webroot/resource/python') print os.path.isfile(r'/data/webroot/resource/python/test.txt') 多种导入方式 1、import os 使用os.path.isdir...... 2、import os.path 使用os.path.isdir...... 3、from os import path 使用path.isdir...... 4、from os.path import isdir,isfile 使用isdir.....
    查看全部
  • 要使用一个模块,我们必须首先导入该模块。Python使用import语句导入一个模块。例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导入模块的变量,通过该变量,我们可以访问math模块中所定义的所有公开的函数、变量和类: >>> math.pow(2, 0.5) # pow是函数 1.4142135623730951 >>> math.pi # pi是变量 3.141592653589793 如果我们只希望导入用到的math模块的某几个函数,而不是所有函数,可以用下面的语句: from math import pow, sin, log 这样,可以直接引用 pow, sin, log 这3个函数,但math的其他函数没有导入进来: >>> pow(2, 10) 1024.0 >>> sin(3.14) 0.0015926529164868282 如果遇到名字冲突怎么办?比如math模块有一个log函数,logging模块也有一个log函数,如果同时使用,如何解决名字冲突? 如果使用import导入模块名,由于必须通过模块名引用函数名,因此不存在冲突: import math, logging print math.log(10) # 调用的是math的log函数 logging.log(10, 'something') # 调用的是logging的log函数 如果使用 from...import 导入 log 函数,势必引起冲突。这时,可以给函数起个“别名”来避免冲突: from math import log from logging import log as logger # logging的log现在变成了logger print log(10) # 调用的是math的log logger(10, 'import from logging') # 调用的是logging的log
    查看全部
  • @property---这是关键字,固定格式,把方法伪装成“属性”用。 @score.setter---前面的"score"是@property紧跟的下面定义的那个方法的名字,"setter"是关键字,这种“@+方法名字+点+setter”是个固定格式与@property搭配使用。
    查看全部
    0 采集 收起 来源:python中 @property

    2018-03-22

  • 如果一个属性由双下划线开头(__),该属性就无法被外部访问 class Person(object): __count = 0 def __init__(self, name): self.name =name Person.__count = Person.__count+1 print Person.__count p1 = Person('Bob') p2 = Person('Alice') try: print Person.__count except AttributeError: print 'attributeerror'
    查看全部
  • www
    查看全部
  • 1. 内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。 2. 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
    查看全部
    0 采集 收起 来源:python中闭包

    2017-02-21

  • 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用: def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn
    查看全部
  • import time def performance(f): def aa(*args, **kw): t1 = time.time() t2 = time.time() print 'call %s() in %fs' % (f.__name__, (t2 - t1)) return f(*args, **kw) return aa @performance def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10) 这里的@performance相当于factorial=performance(factorial) performance返回一个内置函数aa,也就是factorial指向函数aa 然后print factorial(10),就相当于print aa(10)
    查看全部
  • 在Python3.x的版本中,filter函数的输出已不是一个列表,仍然是一个迭代器,所以外部还要加一个list,list(filter(f,list))
    查看全部
  • 导入的模块不存在,Python解释器会报 ImportError 错误 try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句 用import ... as ...,还可以动态导入不同名称的模块
    查看全部

举报

0/150
提交
取消
课程须知
本课程是Python入门的后续课程 1、掌握Python编程的基础知识 2、掌握Python函数的编写 3、对面向对象编程有所了解更佳
老师告诉你能学到什么?
1、什么是函数式编程 2、Python的函数式编程特点 3、Python的模块 4、Python面向对象编程 5、Python强大的定制类
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!