标签:
内置函数:
1)数字运算、类型转换、集合类操作:
bin()、oct()、int()、hex() 进制转换,round()四舍五入,pow()返回x的y次幂,range() 生成序列,sum()求和,divmod()商和余数 ,
chr() 、ord()用来做ascii码转换,max()序列中最大值, min()最小值;random随机数;
basestring() 是str和unicode的超类(父类),format()格式化字符串,unichr()返回给定int类型的unicode,enumerate()枚举函数,iter()生成一个对象的迭代器,
complex()复数,float()浮点数,bool()布尔值,dict()字典,list()列表,tuple()元组,str()字符串,set()集合,frozenset()产生一个不可变的set,sorted()排序,
yeild()、xrange()py3时此函数已取消,生成器,len()计算长度;
2)逻辑判断:
all()所有元素为真、any()任何一个为真、cmp()比较是否相等(Python3已经没有这个函数了);
3)IO操作:
input() 获取输入(Python3之前使用raw_input),print()打印输出,open()文件操作;
4)反射
callable() 检查对象object是否可调用、 classmethod() 是用来指定一个类的方法为类方法
compile() 将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。
dir()不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
delattr()删除object对象名为name的属性,eval()计算表达式expression的值,filter()用于过滤序列。
execfile()用法类似exec(),不同的是execfile的参数filename为文件名,而exec的参数为字符串。
getattr()获取一个类的属性,globals()返回一个描述当前全局符号表的字典,hasattr() 判断对象object是否包含名为name的特性,
hash()如果对象object为哈希表类型,返回对象object的哈希值,isinstance()判断object是否是class的实例,
id()返回对象的唯一标识,issubclass()判断是否是子类,len()返回序列长度,locals()返回当前的变量列表, map()遍历每个元素,执行function操作,
memoryview()返回一个内存镜像类型的对象, next()类似于iterator.next(), object()基类,
property()属性访问的包装类,设置后可以通过c.x=value等来访问setter和getter,
reduce()合并操作,从第一个开始是前两个参数,然后是前两个的结果与第三个合并进行处理,以此类推,
reload()重新加载模块, setattr()设置属性值, repr()将一个对象变幻为可打印的格式,
slice()是个类,切片类型,Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).
staticmethod()声明静态方法,是个注解,super()引用父类, type()返回该object的类型,
vars()返回对象的变量,若无参数与dict()方法类似,bytearray()返回一个byte数组,
zip()按列合并多个可迭代对象的列值,相同列的元素生成一个元组元素,有一列的元素为空时,就不再生成;
5)重要的内置函数,一会做一些实例,这里只做简介;
装饰器是比较难理解的,这里只做简介。装饰器使用环境:不想改变原函数,又要添加额外的功能时使用,装饰器可以在原函数之前、之后添加新增功能;
1、绝对值:abs(-1) 结果:1;
2、最大最小值:max([1,2,3])结果:3; min([1,2,3])结果:1
3、序列长度:len(‘abc‘)结果:3; len([1,2,3])结果:3; len((1,2,3))结果:3
4、取商和余数:divmod(5,2) 结果:(2,1)
5、乘方:pow(2,3,4)//2**3/4 官方功能说明: Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
6、四舍五入:round(2.7) 结果:3
7、求和:sum((1,2,3)) 结果:6 将纯数字元素的列表或元组,计算求和;
8、切片:a = [1,2,3,4,5] ;a[0:3]结果:[1,2,3], 切片执行顾前不顾后,从0位开始,到3的位置终止,不包括3
9、步长:a = [1,2,3,4,5] ;a[0:5:2]结果:[1,3,5], 步长是隔几个数取值,取值范围1-5,每隔两个取值,1开始取,2开始步长一次,3的时候步长为2,再次取值,以此类推;
1、二进制转换,bin(10) 结果:‘0b1010‘ ,将十进制转为二进制表示;
2、八进制转换,oct(10) 结果: ‘0o12‘ , 将十进制转为八进制表示;
3、十进制整数表示,int(10) 结果: 10 , 默认是字符串,int后转成十进制整数;
4、十六进制转换,hex(16) 结果:‘0x10, 将十进制转为十六进制表示;
1、整数类型转换,int(‘123‘) 结果:123, 将字符串转换成整数类型;
2、字符串类型转换,type(str(int(‘123‘))) 结果:<class ‘str‘>, 将数字转成字符串类型;
3、浮点类型转换,float(123) 结果:123.0, 将整数转为浮点数表示;
4、复数类型转换,complex(123) 结果:(123+0j), 将整数或浮点数转为复数;
5、列表类型转换, list((1,2,3))、list(‘123‘) 结果:[‘1‘,‘2‘,‘3‘], 将可迭代对象转为列表; 注意:字符串可以转换,数字类型不行(不可迭代)
6、元组类型转换, tuple((1,2,3))、tuple(‘123‘)结果:(‘1‘,‘2‘,‘3‘), 将可迭代对象转为列表; 注意:字符串可以转换,数字类型不行(不可迭代)
7、集合类型转换,set(‘abc‘) 结果:{’a‘,‘b‘,‘c‘} 将可迭代对象转为集合;
8、字典类型转换,类型是字符串样子却是字典,需要json格式化转换,如:a = ‘{"a":1}‘ ; json.loads(a) 结果:a转为字典类型;
9、布尔类型,布尔类型只有True和False两种返回值, 0、None、False、" "、[]、()、{}是False,其它是True;
10、ASCII码转换,chr(i)与ord(), 对照ASSCII表操作,效果更好,chr(65) 结果:‘A‘;ord(‘A‘)结果:65;
chr(i)返回整数i对应的ASCII字符。与ord()作用相反。
11、查看类型,type(),返回一个值的类型,type(‘abc‘) 结果:<class ‘str‘>;type(123) 结果:<class ‘int‘>;
1、所有元素为真,才为真,all((1,‘a‘)) 结果:True,参数必须是可迭代类型;
2、任何一个为真,就为真,any((1,0,None)) 结果:True,参数必须是可迭代类型;
3、判断object是否是class的实例,isinstance(‘a‘,str) 结果: True, 两个参数,字符串a 和 str类型,’a‘是str类型返回True;
4、 判断对象是否可以调用, callable() 如果对象可以调用的,则返回true,如果对象不能调用,则返回false.
1、filter(函数,可迭代对象),过滤序列;
# filter def f1(a): if a > 22: return True li = [11,22,33,44,55] ret = filter(f1,li) print(list(ret))
执行结果:
[33,44,55]
li = [11,22,22,33,44,55] r = filter(lambda a: a > 33, li) print(list(r))
执行结果:
[44,55]
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
2、map(函数,可迭代对象), 执行函数操作,将返回值添加到结果中;
def f1(a): return a + 100 r = map(f1,li) print(list(r)) 执行结果: [111, 122, 122, 133, 144, 155]
li = [11,22,33,44,55] ret = map(lambda a: a + 100 ,li) print(list(ret)) 执行结果: [111, 122, 133, 144, 155]
3、filter 和 map 的区别:
filter 函数返回True,将结果添加到结果中;
map 将函数返回值添加到结果中;
1、globals(*args, **kwargs) 返回一个当前作用域里全局变量的字典; Return a dictionary containing the current scope‘s globla variables.
2、locals(*args, **kwargs) 返回一个当前作用域里局部变量的字典; Return a dictionary containing the current scope‘s local variables.
s = "刘海龙" print(len(s)) z = bytes(s,encoding=‘utf-8‘) print(len(z)) 执行结果: 3 9
这个结果: Python2和3是不同的,中文字符Python3是按字符计算的,一个字是一个字符,支持通过bytes转为字节;
Python2是按字节计算的,一个中文字符等于2个gbk字节,3个utf8字节,并且不支持转为字符;
1、compile(source, filename, mode[, flags[, dont_inherit]])
中文说明:
将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。
参数source:字符串或者AST(Abstract Syntax Trees)对象。
参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
参数model:指定编译代码的种类。可以指定为 ‘exec’,’eval’,’single’。
参数flag和dont_inherit:这两个参数暂不介绍,可选参数。
a = "print(123)" r = compile(a,"<string>" , "exec") exec(r) print(a) print(r) 执行结果: 123 print(123) <code object <module> at 0x00000000006C2F60, file "<string>", line 1>
过程解析:
a 是一个字符串,通过compile函数,将字符串编译成Python代码,exec 执行代码,得到print结果;
有三种模式(single、exec、eval)
通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec不返回结果,print(eval("…"))打印None);
s = "3*3" ret = eval(s) print(ret) 执行结果: 9 过程解析: s 变量是一个字符串3*3,不是可计算的数字类型,当使用eval函数执解析后,打印就会将s转换,并计算表达式,返回结果;
range()的返回值,Python3和2的区别很大; a = range(5) print(a) 执行结果: range(0, 5) # 制作6位随机数小程序: import random li = [] for i in range(6): r = random.randrange(0,5) if r == 2 or r == 4: num = random.randrange(0,10) li.append(str(num)) else: temp = random.randrange(65,91) c = chr(temp) li.append(c) result = "".join(li) print(result)
过程解析:
加载random模块,准备一个空列表,循环6次(生成6个值),定义r在循环时,随机取0-5的值,如果r的值是2或是4时,随机取0-9的数字追加到列表,
其它值时取大写字母追加到列表,将列表通过join转为字符串,打印这个循环6次的字符串,即是6个随机数;
a = (1,2,3,4,5) b = [‘alex‘,‘wusir‘,‘hailong‘,‘dawang‘,‘eric‘] c = {‘filter‘,‘map‘,‘exec‘,‘eval‘} ret = zip(a,b,c) print(list(ret)) 执行结果: [(1, ‘alex‘, ‘map‘), (2, ‘wusir‘, ‘filter‘), (3, ‘hailong‘, ‘exec‘), (4, ‘dawang‘, ‘eval‘)]
过程解析:
定义三个不同的序列,使用zip函数合并列值,相同列的元素生成一个元组元素,当c的值没有第五个值的时候,就不再继续生成了,结果就是,在内存里生成了四个元组元素;
打印返回值时,要使用相应的序列函数转换,可以使用列表、元组或集合内置函数转换成相应类型使用; 本实例使用list函数转换成列表;
def f1(): print(123) def f1(): print(‘abc‘) f1() # 函数执行结果: abc # 过程解析: 定义两个相同的函数,输出不同的内容,当在下方调用此函数时,执行的是最后定义的函数;
画个图:
实例二:
# 函数和执行函数的表示方法 def func(): print(‘func‘) func # 表示函数 func() # 表示执行func函数 # lambda创建函数,以及相同函数的执行顺序: def func(): print(‘func‘) func = lambda a: a + 3 print(func(4)) 备注:lambda表达式只是创建一个函数,并不执行;
装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数;
实例讲解:
def d(fp): def _d(*arg, **karg): print("do sth before fp..") r= fp(*arg, **karg) print("do sth after fp..") return r return _d @d def f(f): print("call" ,f) #上面使用@d来表示装饰器和下面是一个意思 #f = d(f) # 执行函数f f("hailong") # 执行结果: do sth before fp.. call hailong do sth after fp..
# 过程解析:
定义一个d函数,返回值是嵌套在函数里的函数的返回值;函数本身是不执行的,只是加载到内存里,当使用@d时,就是给下面的函数加一个d函数的装饰器;
@d会自动执行d函数,并且把@d下面的f函数,作为d函数的参数使用,然后将d函数的返回值,赋值给下面的f函数;
@d 装饰器的执行过程,如下图:
执行函数过程,关系变化,如图:
注意点:
函数参数的使用个数 ,实例中装饰器函数的内部函数参数使用的是可变长参数,这样当f函数传入参数时,不受参数个数限制;
孰能生巧,要多做练习;
编写用户管理程序 :
普通用户: 登录、注册、修改密码、查看本用户信息;
管理用户: 1、 登录、注册、修改密码、查看本用户信息;
2、 删除添加普通用户,修改普通用户密码;
3、 查看所有普通用户信息,按照指定关键字搜索用户信息;
4、 提高普通用户权限;
提示:
1. 用户信息:文件,如 hailong|123|hail@gmail.com|dianhua|....
2. 权限用装饰器
标签:
原文地址:http://www.cnblogs.com/liuhailong-py-way/p/5542659.html