1)Python2需要指定编码#coding:utf-8,Python3默认utf-8。
2)import string:Python3没有string.letters这个属性。
3)列表推导式表达式变量的问题,Python报错如下,Python2会打印结果 4)作用域问题
在列表解析式变量不能直接引用 正确用法:
错误用法:条件为变量 5)在Python函数中可以使用不定长函数来表示传入的是字典 语法:
def 函数名(**kwarge):
函数体
#return
调用函数语句(PS:函数不调用不执行)
6)Python2,字典的key和list可以一起打印,Python3会报错
7)Python3没有exception这个包了 8)Python3有对字节长度做限制
bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。
9)Python3 None与数值做比较会报错,不同类型不能做比较,但是0和ture、false可以比较, Python2会做比较结果输出false
输出结果:
实例1: 实例2 实例3: nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误。
4.1 pathlib:路径操作模块,比os模块拼接方便
4.2 urllib:网络请求模块,包括对url结构解析
>>> from urllib.request import urlopen >>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'): ... line = line.decode('utf-8') # Decoding the binary data to text. ... if 'EST' in line or 'EDT' in line: # look for Eastern Time ... print(line) <BR>Nov. 25, 09:43:32 PM EST >>> import smtplib >>> server = smtplib.SMTP('localhost') >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org', ... """To: jcaesar@example.org ... From: soothsayer@example.org ... ... Beware the Ides of March. ... """) >>> server.quit()4.3 asyncio:Python的异步库,基于事件循环的协程模块
4.4 re:正则表达式模块 re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:
4.5 itertools:提供操作生成器的一些模块
4.6 os:操作系统接口 os模块提供了不少与操作系统相关联的函数 4.7 sys:命令行参数 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。 变量解释 sys.argv[0]当前程序名 sys.argv[1]第一个参数 sys.argv[2]第二个参数 len(sys.argv)-1 参数个数(减去文件名)
4.8 math,为浮点运算提供对底层c函数库的访问,提供生成随机数的工具
>>> import math >>> math.cos(math.pi / 4) 0.70710678118654757 >>> math.log(1024, 2) 10.0 >>> import random >>> random.choice(['apple', 'pear', 'banana']) 'apple' >>> random.sample(range(100), 10) # sampling without replacement [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >>> random.random() # random float 0.17970987693706186 >>> random.randrange(6) # random integer chosen from range(6) 4实例1:删除字典
dic1={'fruits':'apple','price':5} print(dic1) #进行删除操作 print('删除操作后----------') del dic1['price'] print(dic1)打印结果: 实例2:合并字典
dic1={'name':'jam','sex':'male'} dic2={'stuid':'001','score':98} #字典拆包操作 new_dic={**dic1,**dic2} print(new_dic)打印结果:
6.1 单引号 都可以引用一个字符串
6.2 双引号 都可以引用一个字符串
6.3 三引号 推荐三双引号
打印结果: 一般使用方法2
打印结果:
以下介绍命名方法: 1)object #共用方法 2) __ object __ #内建方法,用户不要这样定义 3)__object #全私有方法,相当于private 4)_object #半保护(protected)
单下划线开头(protcted变量),这个称为保护变量,意思是只有类对象和子类对象可以访问这些变量
双下划线开发为私有变量,只有类本身才可以访问这些变量,子类对象也不能访问
AOP:在运行、编译时,类和方法加载时,动态地将代码切入到类的指定方法,指定位置上的编程思想就是面向切面的编程。
切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法就叫切入点。
有了AOP,我们可以把几类共有 的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变原有的行为。
这样的做法,对原有代码毫无入侵性
装饰器,是一个设计模式,经常被用于有切面需求的场景。 经典用法:插入日志、性能测试、事务处理。
装饰器是解决这类问题的绝佳设计,有了装饰器,我们可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。
装饰器作用: 就是为已经存在的对象添加额外的功能。
import time #判断是否为质数 def is_prime(num): if num<2: return False elif num==2: return True else: for i in range(2,num): if num % i ==0: return False return True #装饰器 def display_time(func): #运行需要装饰的方法,*args可以输入多个参数 def wrapper(*args): t1 = time.time() result=func(*args) t2 = time.time() #保留时间为4位小数 print('Total time:{:.4}s'.format(t2-t1)) return result return wrapper #需要装饰的方法:传入参数进行判断 #运用装饰器 @display_time def prime_nums(maxnum): count=0 for i in range(2,maxnum): if is_prime(i): count=count+1 return count print(prime_nums(10000))打印结果:
数字、字符串、列表、字典、元祖、集合 1、数字 (int,float,complex、bool,例如a, b, c, d = 20, 5.5, True, 4+3j)
在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。
2、字符串 (str) Python中的字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
注意: 1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。 2、字符串可以用+运算符连接在一起,用*运算符重复。 3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 4、Python中的字符串不能改变。
3、列表 (list) 表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
注意: 1、List写在方括号之间,元素用逗号隔开。 2、和字符串一样,list可以被索引和切片。 3、List可以使用+操作符进行拼接。 4、List中的元素是可以改变的。
4、元祖 (tuple) 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
注意: 1、与字符串一样,元组的元素不能修改。 2、元组也可以被索引和切片,方法一样。 3、注意构造包含 0 或 1 个元素的元组的特殊语法规则。 4、元组也可以使用+操作符进行拼接。
5、字典 (dict) 列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。
注意: 1、字典是一种映射类型,它的元素是键值对。 2、字典的关键字必须为不可变类型,且不能重复。 3、创建空字典使用 { }。
6、集合 (set) 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式: parame = {value01,value02,…} 或者 set(value)
注意: 可迭代类型: str、tuple、list、set、dict
可变数据:列表、字典、集合 不可变数据:数字、字符串、元祖
1) init:是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,是实例方法。
2)new:是在实例创建之前被调用的,因为它的任务就是创建实例然后就返回该实例,是个静态方法。
作用: __new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。
注意: _new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别 __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
实例:
class A: def __new__(cls, *args, **kwargs): #实现单例模式,改变new这个方法,创建两个实例,实际是用的一个实例 if not hasattr(cls,'_ins'): cls._ins=super().__new__(cls) print('in__new') return cls._ins def __init__(self,title): print('in——init') super().__init__() self.titie=title if __name__ == '__main__': a=A('The Spider Book') print(a.titie) a2=A('The 2 Spider Book') print(id(a)) print(id(a2)) print(a.titie) print(a2.titie)打印结果:
map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。 给定一个列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25]; 并使用列表推导式提取出大于10的数,最终输出[16,25]。
#给定一个列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25] #并使用列表推导式提取出大于10的数,最终输出[16,25] a=[1,2,3,4,5] #用map new_a=map(lambda x:x**2,a) #new_a是map对象所有需要进一步转换为list a1=list(new_a) print(a1) #用列表推导式 print([i for i in a1 if i>10])空语句,保证格式完成、保证语义完整,写程序时,执行语句部分思路没有完成可以用pass来占位,后面再来完成代码。
打印结果: