电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPTX文档下载
分享到微信 分享到微博 分享到QQ空间

那些年我与Python的缘分

  • 资源ID:189382196       资源大小:408.55KB        全文页数:42页
  • 资源格式: PPTX        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

那些年我与Python的缘分

那些年我与Python的缘分Python热度交流内容:一、python基础二、python函数三、面向对象高级编程四、错误与异常五、Python调试六、进程、线程、协程对比一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型1、数据类型标准数据类型6种:数字、字符串、列表、 字典、元组、布尔 特殊的:None一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型1、数据类型标准数据类型6种:数字、字符串、列表、 字典、元组、布尔 特殊的:None函数描述int(x ,base)将x转换为 一个整数long(x ,base )将x转换为 一个长整数float(x)将x转换到一个浮点数complex(real ,imag)创建一个复数str(x)将对象 x 转换为 字符串repr(x)将对象 x 转换为 表达式字符串eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象tuple(s)将序列 s 转换为 一个元组list(s)将序列 s 转换为 一个列表set(s)转换为 可变集合dict(d)创建一个字典。d 必须是一个序列 (key,value)元组。frozenset(s)转换为 不可变集合chr(x)将一个整数转换为 一个字符unichr(x)将一个整数转换为 Unicode字符ord(x)将一个字符转换为 它的整数值hex(x)将一个整数转换为 一个十六进制字符串oct(x)将一个整数转换为 一个八进制字符串一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647。Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。数据转换会存在非法数据转换的问题如: int(x) >>> int('x')Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> int('x')ValueError: invalid literal for int() with base 10: 'x'一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型整数python2.7内存情况:>>> a = -5>>> b = -5>>> id(a)30965048L>>> id(b)30965048L>>> a = -6>>> b = -6>>> id(a)39340632L>>> id(b)39340536L整数python2.7内存情况:>>> a = 257>>> b = 257>>> id(a)39342072L>>> id(b)39340632L>>> a = 258>>> b = 258>>> id(a)39340536L>>> id(b)39342072L结论Python 解释器对于数字有个小数字缓存池:5257, 原因是:地址数据最少是32位的,现在都是64位了,如果单独为一个小整数创建一个对象,10个地方用到这个小整数,那么就会在内存中创建10个存储的内存地址的空间,地址占用的数据长度比数据本身还大这样非常不划算。而有这个缓存池,python解释器内部就会共享这个小整数对象,不去开内存空间。从而减少内存的使用率,降低浪费。)字符串也有内存池,给了2k空间,python内部有算法,按照内部权重排列,如果级别高了就把你放入内存。列表、字典都有。一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型交换两个变量:>>> x = '100098w'>>> y = '98765456789'>>> x,y = y, x>>> print x, y98765456789 100098w>>> from timeit import Timer>>> Timer('temp =x; x = y; y = temp', 'x = 2; y = 3').timeit()0.05146379942788624>>> Timer('x, y = y, x', 'x = 2; y = 3').timeit()0.05394370018378325>>> Timer('temp =x; x = y; y = temp', 'x = 2; y = 3').timeit()0.056129161547779916>>> Timer('x, y = y, x', 'x = 2; y = 3').timeit()0.052459485289897856>>> Timer('temp =x; x = y; y = temp', 'x = 2; y = 3').timeit()0.0553278657740961>>> Timer('x, y = y, x', 'x = 2; y = 3').timeit()0.051606211950094405一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -数据类型数据类型数据类型数据类型数字运算:除法运算需要小心:>>> i = 3>>> b =2>>> i / b1>>> c = 3>>> i / 31>>> flot(i) / b>>> float(i) / b1.5一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -字符串连接字符串连接字符串连接字符串连接:连接字符串使用join,而不使用 +一、一、一、一、pythonpythonpythonpython基础基础基础基础-type-type-type-type和和和和isinstanceisinstanceisinstanceisinstance不推荐使用type来进行变量类型检查,推荐使用isinstance:>>> class UserInt(int):def _init_(self, val=0):self._val = int(val)def _str_(self):return str(self._val)>>> n = UserInt()>>> print n0>>> b = UserInt(3)>>> print b3>>> type(n) is types.IntTypeFalse>>> isinstance(n, int)True结论:基于内建类型的扩展的用户自定义类型,type函数并不能准确返回结果。其他优点:isinstance(12,'test'), (int, str, tuple)一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -字符串字符串字符串字符串由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时 ,就需要务必指定保存为UTF-8编码 。当Python解释器读取源代码时 ,为了让它按UTF-8编码读 取,我们通常在文件开头写上这两行:#!/usr/bin/env python# -*- coding: utf-8 -*-第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读 取源代码,否则,你在源代码中写的中文输出可能会有乱码。申明了UTF-8编码 并不意味着你的.py文件就是UTF-8编码 的,必须并且要确保文本编辑 器正在使用UTF-8 without BOM编码一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -listlistlistlist和和和和tupletupletupletuple1、切片:>>> L = 'Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'>>> L0, L1, L2'Michael', 'Sarah', 'Tracy'>>> L0:3'Michael', 'Sarah', 'Tracy'>>> L1:3'Sarah', 'Tracy'>>> L-1'Jack'>>> L-2:'Bob', 'Jack'>>> L-3:-1'Tracy', 'Bob'>>> data=range(100)>>> data:10:30, 3, 6, 9>>> data0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99>>> 有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -listlistlistlist和和和和tupletupletupletuple按需选择sort()盒sorted():sort():会改变被排序的序列sorted():不会改变有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -分清分清分清分清=和和和和is is is isis:id(a) = id(b),内存位置相等=:值相等>>> a = 1>>> b = 1>>> a is bTrue>>> a = bTrue>>> a = 258>>> b = 258>>> a is bFalse>>> a = bTrue但是None相关推荐:a is None一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -循环优化循环优化循环优化循环优化1、减少循环内部的计算:第一种: for i in range(iter):d = math.sqrt(y)j = i *d 第二种:d = math.sqrt(y)for i in range(iter):j = i *d2、将显示循环改为隐式循环:>>> sum = 0>>> n = 100>>> for i in xrange(n+1):sum += i>>> print sum5050换成:>>> print 100 * (100 + 1)/25050一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -循环优化循环优化循环优化循环优化3、在循环中尽量引用局部变量:第一种: x = 10, 34, 56, 78 def f(x):for i in xrange(len(x):xi = math.sin(xi)return x第二种:def f(x):loc_sin = math.sinfor i in xrange(len(x):xi = loc_sin(xi)return x4、关注内层嵌套循环,多层嵌套循环中,重点关注内层嵌套循环,尽量将内层循环的计算往上层移:实例一:for i in range(len(v1):for j in range(len(v2):x = x1i + v2j实例二:for i in range(len(v1): val = x1ifor j in range(len(v2):x = val + v2j一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -常量尽量集常量尽量集常量尽量集常量尽量集中在一个配置里面中在一个配置里面中在一个配置里面中在一个配置里面需要增加例子一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -变量作用域变量作用域变量作用域变量作用域>>> locals()'_builtins_': <module '_builtin_' (built-in)>, '_name_': '_main_', '_doc_': None, '_package_': None>>> globals()'_builtins_': <module '_builtin_' (built-in)>, '_name_': '_main_', '_doc_': None, '_package_': None>>> def func(x):e = 1f = eg = 'VT'print locals()print "#" * 10print globals()print "#" * 10print c 输出:>>> c = 10>>> func(1)'x': 1, 'e': 1, 'g': 'VT', 'f': 1#'c': 10, '_builtins_': <module '_builtin_' (built-in)>, '_package_': None, 'func': <function func at 0x0000000002617B38>, '_name_': '_main_', '_doc_': None#10一、一、一、一、pythonpythonpythonpython基础基础基础基础- - - -变量作用域变量作用域变量作用域变量作用域在python中所有的变量名都是在赋值的时候生成的,而对任何变量名的创建、查找或者改变都会在命名空间中进行。变量作用域分四种:局部作用域:全局作用域:嵌套作用域:>>> def func():var = 'a'def inner():global varvar = 'b'print 'inside inner, var is: ', varinner()print 'inside outer function, var is: ', var >>> func()内置作用域:通过标准库_builtin_的模块实现的。 变量查找顺序:1. (Local)局部作用域,每当调用一个函数的时候就创建了一个局部作用域,它最先被搜索。 2. (Enclosing)嵌套的父级函数的局部作用域 3. (global)全局作用域 4. (built-in)内建作用域,这个是内建函数和类的作用域。二、二、二、二、pythonpythonpythonpython函数函数函数函数函数设计一些经验:经验一:函数尽量短小,公司checklist规定50行。提高代码可重用性的基本要求经验二:函数申明应该做到合理、简单、易于使用。经验三:函数设计应该考虑向下兼容。经验四:一个函数只干一件事。经验五:函数名字很重要。经验六:函数注释应该注释函数功能,使用场景,注意事项。经验七:函数盒注释一定要保持一致。二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数概念函数概念:高阶函数:把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式#!/usr/bin/env pythondef add(x, y, f): return f(x) + f(y)if _name_ = '_main_': key = add(-4, 5, abs) print key二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数概念函数概念:匿名函数:关键字lambda表示匿名函数>>> lambda x: x * x<function <lambda> at 0x00000000024F5B38>>>> f = lambda x: x * x>>> f<function <lambda> at 0x0000000002CD0E48>>>> f(5)25二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数概念函数概念:装饰器:假设我们要增强function()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改function()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)def log(text): def decorator(func): def wrapper(*args, *kw): print '%s %s():' % (text, func._name_) return func(*args, *kw) return wrapper return decoratorlog('execute')def now(): print '2013-12-25'二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -装饰器装饰器装饰器装饰器staticmethod、classmethod认知:二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数概念函数概念函数概念函数概念抽象方法:是定义在基类中的一种方法,它没有提供任何实现,类似于Java中接口(Interface)里面的方法。:class Pizza(object): def get_radius(self): raise NotImplementedError任何继承自_Pizza的类必须覆盖实现方法get_radius,否则会抛出异常。这种抽象方法的实现有它的弊端,如果你写一个类继承Pizza,但是忘记实现 get_radius,异常只有在你真正使用的时候才会抛出来。二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数概念函数概念函数概念函数概念偏函数:偏函数:Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度>>> int('12345', base=8)5349>>> int('12345', 16)74565def int2(x, base=2): return int(x, base)>>> int2('1000000')64>>> int2('1010101')85>>> import functools>>> int2 = functools.partial(int, base=2)>>> int2('1000000')64>>> int2('1010101')85二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数参数函数参数函数参数函数参数检查参数合法性: assert: >>> def foo(x):assert x = 0, 'not equals'print x >>> foo(1)Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> foo(1) File "<pyshell#15>", line 2, in foo assert x = 0, 'not equals'AssertionError: not equals使用assert经验项: 1、不要滥用,这是使用断言的基本原则。 2、如果python能正常处理异常就不要用了。 3、不要用assert来检查用户输入。 4、当函数调用后、需要确认返回值是否合理的情况可以使用断言。 5、当条件是业务逻辑继续下去的必要条件时可以使用二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数参数函数参数函数参数函数参数建议不使用可变对象作为函数默认参数:>>> def default_param_test(newitem, list1=):print id(list1)list1.append(newitem)print id(list1)return list1>>> default_param_test(1)47820488478204881>>> default_param_test.func_defaults(1,)>>> default_param_test('a')47820488478204881, 'a'>>> default_param_test.func_defaults(1, 'a',)checklist是禁用的。二、二、二、二、pythonpythonpythonpython函数函数函数函数- - - -函数参数函数参数函数参数函数参数函数参数长度经验:def foo(xxx, *args, *kwags): pass经验一、建议不使用*kwags经验二、建议不要写使用超过4个参数的函数。经验三、如果一定要使用*kwags,想想是否可以使用更好的方式。经验四、如果参数目的不确定,可以考虑使用。经验五、装饰器场景-通用处理。三、三、三、三、pythonpythonpythonpython面向面向面向面向对对对对象高象高象高象高级编级编级编级编程程程程类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节 。和静态语言不同,Python允许对实 例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同三、三、三、三、pythonpythonpythonpython面向面向面向面向对对对对象高象高象高象高级编级编级编级编程程程程类访问限制:import osclass Student(object): def _init_(self, name, score): self._name = name self._score = score def print_score(self): print("%s: %s" % (self._name, self._score)if _name_ = '_main_': from _main_ import Student s = Student print s._name?Traceback (most recent call last): File "C:UsersAdministratorDesktopclass.py", line 15, in <module> print s._nameAttributeError: type object 'Student' has no attribute '_name'改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量._name和实例变量._score了:这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。三、三、三、三、pythonpythonpythonpython面向面向面向面向对对对对象高象高象高象高级编级编级编级编程程程程_slots_ : 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的_slots_变量,来限制该class能添加的属性>>> class student(object):. pass>>> s = student()>>> s.name = 'VT'>>> print s.nameVT>>> class company(object):. _slots_ = ('VT','SSL', 'woc')>>> s = company()>>> s.VT = 100>>> s.AF = 100Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'company' object has no attribute 'AF'PS:1、使用_slots_要注意,_slots_定义的属性仅对当前类起作用,对继承的子类是不起作用的。2、如果子类和父类都设置了_slots_,子类允许定义的属性就是自身的_slots_加上父类的_slots_三、三、三、三、pythonpythonpythonpython面向面向面向面向对对对对象高象高象高象高级编级编级编级编程程程程property:import osclass Student1(object): def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 100!') self._score = valueclass Student2(object): property def score(self): return self._score score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 100!') self._score = valueif _name_ = "_main_": from _main_ import Student1, Student2 s1 = Student1() s2 = Student2() s1.set_score(60) print s1.get_score() s2.score = 1000 print s2.score三、三、三、三、pythonpythonpythonpython面向面向面向面向对对对对象高象高象高象高级编级编级编级编程程程程property的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上property就可以了,此时,property本身又创建了另一个装饰器score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作注意到这个神奇的property,我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。四、四、四、四、错误与异常错误:一般分为两种,一是语法错误;二是逻辑错误异常:因为程序出现了错误而在正常控制流以外采取的行为。这个阶段分为两个:首先是引起异常发生的错误,然后是检测(和采取的可能措施)阶段。-python核心编程第二版235页。常见的异常:IOErrorAttributeErrorKeyErrorSyntaxErrorNameErrorIndexError四、四、四、四、错误与异常异常处理:四、四、四、四、错误与异常我对异常处理的基本准则:1、注意异常的粒度,不推荐将过多的代码放在try中。2、except尽量定位道具体的异常; try: pass; except exception as e log.exception(“xxxxx”)3、注意异常捕获的顺序,在合适的层次处理异常。4、使用更友好的异常信息,遵循一些通用的做法。四、四、四、四、错误与异常finally需要小心使用:当finally执行完成后,临时保持的异常将会再次被抛出,但如果finally语句中生产了新的异常或者执行了return或者break语句,那么临时保持的异常将会丢失,从而导致异常屏蔽。五、Python调试调试手段:1、rpdb-此处不再重复说明。2、打日志 目前服务支持kill -SIGUSR1 pid动态开启debug信息六、进程、线程、协程对比自己去了解ThanksQ&A

注意事项

本文(那些年我与Python的缘分)为本站会员(添***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.