Python开发Day04
Python内置函数:
-
在Python3.5中内置的函数:
-
查看Python内置函数详情点击这里
-
函数解释:
- abs():取数字的绝对值。
print(abs(-123)) 执行结果: 123
- all():循环取出每一个元素,如果所有元素都是真,那么all函数的返回为真,使用True和False返回。
print(all([1,2,0,]))#假的值有0、None、""、[]、()、{},False。 执行结果: False
- any():循环取出每一个元素,如果有一个元素是真的,那么any函数返回为真。
print(any([1,2,0,])) 执行结果: True
- ascii():这个函数跟repr()函数一样,返回一个可打印的对象字符串方式表示。当遇到非ASCII码时,就会输出\x,\u或\U等字符来表示。和Python2.*版本里的repr()是等效的函数.
ascii(9000000), ascii('b\31') 执行结果: 9000000 'b\x19'
- bin():转换成二进制格式。
print(bin(25)) 执行结果: 0b11001 #0b代表二进制
- oct():转换成八进制。
print(oct(120)) 执行结果: 0170
- int():转换成十进制。
print(int(13)) 执行结果: 13
- hex():转换成十六进制。
print(hex(128)) 执行结果: 0x80
这四种转换可以互转。
- bool():吧每一个对象转换成bool值,他只有两个值,一个是True一个是False。
print(bool(128)) print(bool("")) 执行结果: True False
- bytes():将字符转换成字节。
c='吴' print(bytes(c,encoding='utf-8')) 执行结果: b'\xe5\x90\xb4'
- bytearray():将给的值转成字节列表,如果给的是字符串需要指定编码。
a=bytearray('吴',encoding='utf-8') print(a) 执行结果: bytearray(b'\xe5\x90\xb4')
- chr():找到ascii码对应的字符。
a=chr(55) print(a) 执行结果: 7
- ord():找到对应的十进制数字。
a=ord('a') print(a) 执行结果: 97
- callable():查看函数是否可执行,返回的是True和False:
def test(): return 'hello' print(callable(test)) 执行结果: True
- exec():用于执行py字符串代码的,可以使用for循环,没有返回值。
exec('print("hello word")') 执行结果: hello word
- compile():编译,把一个字符串编译成一个Python可执行的代码。
a='print("hello")' b=compile(a,'',"exec") exec(b) print(b) 执行结果: hello <code object <module> at 0x00000186C15728A0, file "", line 1>
- dir():查看一个类的使用方法。
print(dir(int)) 执行结果: ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
- divmod():取商/余数。
print(divmod(9,4)) 执行结果: (2, 1) #2位商,1为余
- dict():定义字典。
a=dict({'wu':'qi'}) print(a) 执行结果: {'wu': 'qi'}
- enumerate() :在循环输出的字符前添加整数序号,可指定从几开始。
a=[1,2,3,45,6,7,8,9] for k,v in enumerate(a): print(k,v) 执行结果: 0 1 1 2 2 3 3 45 4 6 5 7 6 8 7 9
- eval():计算以字符串形式出现的加减乘除。
print(eval("50+80*10/20-12+50")) 执行结果: 128.0
- filter():使用函数来过滤元素,把符合条件的返回。
a = filter(lambda a: a < 10, [1, 22, 13, 12, 6, 4, 7])#列表中小于10的数字,结果给变量a他是一个对象所以需要for循环取值 for i in a: print(i) 执行结果: 1 6 4 7
- map():让所有的操作都统一一个。
a = map(lambda a: a + 100, [1, 22, 13, 12, 6, 4, 7]) #让每一个元素+100 for i in a: print(i) 执行结果: 101 122 113 112 106 104 107
- format()字符串的格式化。
age = 22 name = 'Wuqi' print('{0} is {1} years old. '.format(name, age)) #输出参数 print('{0} is a girl. '.format(name)) print('{0:.3} is a decimal. '.format(1/3)) #小数点后三位 print('{0:_^11} is a 11 length. '.format(name)) #使用_补齐空位 print('{first} is as {second}. '.format(first=name, second='Wendy')) #别名替换 print('My name is {0.name}'.format(open('out.txt', 'w'))) #调用方法 print('My name is {0:8}.'.format('Fred')) #指定宽度 执行结果: Wuqi is 22 years old. Wuqi is a girl. 0.333 is a decimal. ___Wuqi____ is a 11 length. Wuqi is as Wendy. My name is out.txt My name is Fred
- frozenset():冻结集合,让集合不可变。没有add,remove方法。好处可以用作字典的key。
li = [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9] print(len(li), li) set = frozenset(li) print(len(set), set) 执行结果: li = [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9] print(len(li), li) set = frozenset(li) print(len(set), set)
- globals():获取当前所有的全局变量。
print(globals()) 执行结果: {'__file__': 'F:/oldboy-Python/py_code/test/test.py', '__cached__': None, 'name': 'wu', '__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000173264679E8>, '__author__': 'WuYongQi', '__package__': None, '__builtins__': <module 'builtins' (built-in)>, 'li': [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 9], '__name__': '__main__', '__spec__': None}
- locals()获取所有的局部变量。
def test(): a=123 b=234 print(locals()) 执行结果: {'a': 123, 'b': 234}
- hash():把一个值转成哈希值。做字典或其他key的一个优化
a='fdsahfkjsavbyubalwehjkdsfweagsad' print(hash(a)) 执行结果: 6269283459739148757
- isinstance():判断一个变量的值是不是这个某一个类型用True和False返回。
a='fdsahfkjsavbyubalwehjkdsfweagsad' print(isinstance(a,str)) 执行结果: True
- help():查看类的使用方法。 print(help(list))
- input():和用户交互,获取用户输入的内容。
a=input() print(a) 执行结果: 123123 123123
- id():查看内存地址。
a='hello' print(id(a)) 执行结果: 2216721087152
- iter():将元素转成对象,可以使用next函数来看下一个
a=iter([1,2,3,4,5]) print(next(a)) print(next(a)) print(next(a)) 执行结果: 1 2 3
- max():取最大值。
max([1,2,3,4,5,6]) 执行结果: 6
- min():取最小值。
min([1,2,3,4,5,6]) 执行结果: 1
- sum():求和。
sum([1,2,3,4,5,6,12]) 执行结果: 33
- pow():求指数。
print(pow(2,9)) #2的9次方 执行结果: 512
- reverse():反转列表中的元素。
a=['hello','word','wu'] a.reverse() print(a) 执行结果: a=['hello','word','wu'] a.reverse() print(a)
- round():四舍五入。
a=round(3.3) print(a) 执行结果: 3
-
slice():相当于切片。
a=[1,2,3,4,5,6,7,8,9] b=slice(3) print(a[b]) 执行结果: [1, 2, 3]
-
vars():查看一个类例有多少变量。
vars() 执行结果: {'__truediv__': <slot wrapper '__truediv__' of 'int' objects>, '__rand__': <slot wrapper '__rand__' of 'int' objects>, '__int__': <slot wrapper '__int__' of 'int' objects>, '__rrshift__': <slot wrapper '__rrshift__' of 'int' objects>, 'denominator': <attribute 'denominator' of 'int' objects>, '__floor__': <method '__floor__' of 'int' objects>, '__rmod__': <slot wrapper '__rmod__' of 'int' objects>, 'numerator': <attribute 'numerator' of 'int' objects>, '__eq__': <slot wrapper '__eq__' of 'int' objects>, '__ge__': <slot wrapper '__ge__' of 'int' objects>, 'from_bytes': <method 'from_bytes' of 'int' objects>, '__round__': <method '__round__' of 'int' objects>, '__abs__': <slot wrapper '__abs__' of 'int' objects>, '__ne__': <slot wrapper '__ne__' of 'int' objects>, '__rxor__': <slot wrapper '__rxor__' of 'int' objects>, '__lt__': <slot wrapper '__lt__' of 'int' objects>, '__xor__': <slot wrapper '__xor__' of 'int' objects>, '__trunc__': <method '__trunc__' of 'int' objects>, '__bool__': <slot wrapper '__bool__' of 'int' objects>, '__rsub__': <slot wrapper '__rsub__' of 'int' objects>, 'imag': <attribute 'imag' of 'int' objects>, '__gt__': <slot wrapper '__gt__' of 'int' objects>, 'to_bytes': <method 'to_bytes' of 'int' objects>, '__ror__': <slot wrapper '__ror__' of 'int' objects>, '__rpow__': <slot wrapper '__rpow__' of 'int' objects>, '__le__': <slot wrapper '__le__' of 'int' objects>, 'real': <attribute 'real' of 'int' objects>, '__invert__': <slot wrapper '__invert__' of 'int' objects>, '__mul__': <slot wrapper '__mul__' of 'int' objects>, '__float__': <slot wrapper '__float__' of 'int' objects>, '__format__': <method '__format__' of 'int' objects>, '__lshift__': <slot wrapper '__lshift__' of 'int' objects>, '__mod__': <slot wrapper '__mod__' of 'int' objects>, '__pos__': <slot wrapper '__pos__' of 'int' objects>, '__new__': <built-in method __new__ of type object at 0x0000000061FC5A60>, '__rshift__': <slot wrapper '__rshift__' of 'int' objects>, '__getnewargs__': <method '__getnewargs__' of 'int' objects>, '__index__': <slot wrapper '__index__' of 'int' objects>, '__rtruediv__': <slot wrapper '__rtruediv__' of 'int' objects>, '__rmul__': <slot wrapper '__rmul__' of 'int' objects>, '__sub__': <slot wrapper '__sub__' of 'int' objects>, '__rdivmod__': <slot wrapper '__rdivmod__' of 'int' objects>, '__neg__': <slot wrapper '__neg__' of 'int' objects>, '__ceil__': <method '__ceil__' of 'int' objects>, '__repr__': <slot wrapper '__repr__' of 'int' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'int' objects>, '__floordiv__': <slot wrapper '__floordiv__' of 'int' objects>, '__add__': <slot wrapper '__add__' of 'int' objects>, '__doc__': "int(x=0) -> integer\nint(x, base=10) -> integer\n\nConvert a number or string to an integer, or return 0 if no arguments\nare given. If x is a number, return x.__int__(). For floating point\nnumbers, this truncates towards zero.\n\nIf x is not a number or if base is given, then x must be a string,\nbytes, or bytearray instance representing an integer literal in the\ngiven base. The literal can be preceded by '+' or '-' and be surrounded\nby whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\nBase 0 means to interpret the base from the string as an integer literal.\n>>> int('0b100', base=0)\n4", '__divmod__': <slot wrapper '__divmod__' of 'int' objects>, 'bit_length': <method 'bit_length' of 'int' objects>, '__sizeof__': <method '__sizeof__' of 'int' objects>, '__radd__': <slot wrapper '__radd__' of 'int' objects>, '__str__': <slot wrapper '__str__' of 'int' objects>, '__or__': <slot wrapper '__or__' of 'int' objects>, '__rlshift__': <slot wrapper '__rlshift__' of 'int' objects>, '__pow__': <slot wrapper '__pow__' of 'int' objects>, 'conjugate': <method 'conjugate' of 'int' objects>, '__and__': <slot wrapper '__and__' of 'int' objects>, '__hash__': <slot wrapper '__hash__' of 'int' objects>, '__rfloordiv__': <slot wrapper '__rfloordiv__' of 'int' objects>}
- zip():给多个可迭代对象,用元组的形式返回,长度要一样。
a=[1,2,3,4,5,6,7,8,9] b=[1,2,3,4,5,6,7,8,9] c=[1,2,3,4,5,6,7,8,9] ab=zip(a,b,c)#返回的是一个对象 for i in ab: print(i) 执行结果: (1, 1, 1) (2, 2, 2) (3, 3, 3) (4, 4, 4) (5, 5, 5) (6, 6, 6) (7, 7, 7) (8, 8, 8) (9, 9, 9)
- __import__():
同import语句同样的功能,但__import__是一个函数,并且只接收字符串作为参数,所以它的作用就可想而知了。其实import语句就是调用这个函数进行导入工作的,import sys <==>sys = __import__('sys')
- abs():取数字的绝对值。
open函数的使用方法
-
在操作文件时我们一般需要操作两个步骤
-
打开文件
-
操作文件
-
-
打开文件:
- a=file('c:\\a.txt','r') #a为文件句柄,c:\\a.txt是文件路径,r是文件打开模式,之后的操作都是根据文件句柄来操作。
- #在Python中的打开方式有两种,一个是file函数、一个是open函数,这两种方式open函数在代码内部会调用file函数来操作。在Python3.*之后没有了file函数,使用open代替。
- 打开文件的模式有三种:
- r,只读模式(两种打开方法的默认模式)
- w,只写模式(只写文件;在指定的路径下如果有文件就会把文件内容进行清空,如果没有会新建文件。)
- x,只写。他是Python3.*以后出现的。(如果文件不存在会创建一个文件,如果文件存在就会报错)
- a,追加模式(可读取文件内容;如果在指定目录下没有此文件就会创建,如果有就会往文件中追加内容。)
- "+"表示可以同时读写某个文件:
- r+,可读写文件(该模式的使用可以做到对文件的读取、写入、追加。)
- w+,读取和写入文件,先清空,在写之后可以读,在读的时候需要调一下指针位置。
- x+,写读,顺序是[可写可读],先清空,在写之后可以读,他和w+一样,如果文件存在会报错。
- a+,再打开文件的同时价格指针移动到最后。顺序是[可写可读]。
- "b"表示处理二进制文件(列如:FTP上传ISO镜像文件,Windows处理二进制文件时需标注,linux可忽略)
- rb,只读。用二级制的方法打开文件,他打开的模式就是二进制了。
- wb,只写。用二进制的方式向文件内写入文件。
- xb,创建二进制。
- ab,只追加二进制。
-
文件的操作:
- file类的使用方法:
- write('内容'),向文件内写入内容
ab = open('aaa','r+',encoding='utf-8') ab.write('hello') ab.seek(0) print(ab.read()) 执行结果: hello,文件中也有了hello
- tell(),查看指针位置。
ab = open('aaa','w+',encoding='utf-8') ab.write('hello')#向文件写入内容 print(ab.tell())#查看当前指针位置并输出 执行结果: 5
- read(),读取当前指针后面的文件内容
ab = open('aaa','r+',encoding='utf-8') print(ab.read())读取指针后面的所有内容 执行结果: hello #———————————————————————————— ab = open('aaa','r+',encoding='utf-8') print(ab.read(1))#读取指针后面的一个字节 执行结果: h
- seek(0),调整当前指针位置,本次定义将指针调整到第0个位置
ab = open('aaa','r+',encoding='utf-8') print(ab.tell())#查看当前指针位置 ab.seek(3)#将指针位置调到3 print(ab.tell())#查看当前指针位置 执行结果: 0 3
- fileno(),文件描述符
ab = open('aaa','r+',encoding='utf-8') print(ab.fileno())#查看文件描述符 执行结果: 3
- flush(),强制刷新内存中的内容到硬盘
ab = open('aaa','w+',encoding='utf-8') ab.write('123123123123123') input('11111111')#这样当我们脚本到input的时候会等待用户输入,上一层的向文件写入内容其内容在内存中还没有写入硬盘。 ———————————————————————————— ab = open('aaa','w+',encoding='utf-8') ab.write('123123123123123') ab.flush()#将内存中的内容写到文件中,这样在input的时候文件内容已经写入 input('11111111')
- readline(),取一行数据
ab = open('aaa','r+',encoding='utf-8')#aaa文件中有两行内容 print(ab.readline())#读取一行 print(ab.readline())#读取一行 执行结果: hello word
- truncate(),截取指针前面的的内容
ab = open('aaa','r+',encoding='utf-8') ab.seek(3) ab.truncate() 执行结果: #将aaa文件中的前3个字节留下,其他的全部删除
- close(),关闭文件
ab = open('aaa','r+',encoding='utf-8') ab.close()#关闭文件 print(ab.read())#在关闭文件后在读取直接报错。 执行结果: Traceback (most recent call last): File "F:/oldboy-Python/py_code/test/day5/123.py", line 8, in <module> print(ab.read()) ValueError: I/O operation on closed file.
-
- 为了避免我们打开文件后退出时或应该关闭的时候忘记关闭,可以通过管理上下文,即:
-
with open('文件名','打开方式') as f: #f为文件句柄 ...
此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
- 在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:
with open('文件名','打开方式') as a1, open('文件名','打开方式') as a1:#a1和a2为文件句柄 pass
-
- 为了避免我们打开文件后退出时或应该关闭的时候忘记关闭,可以通过管理上下文,即:
lambda表达式:
-
我们在做简单的运算时有三元运算同时函数也一样,简单的函数可以使用lambda表达式
-
普通的简单函数
def s1(a,b): return a+b print(s1(12,12)) 执行结果: 24
-
lambda表达式
s2=lambda a,b : a+b print(s2(12,12)) 执行结果: 24
-
递归:
- 在函数内部调用本身,就叫做递归,如果没有条件就成为了相当于while的死循环,但是Python给我们定义了如果递归太多就会直接报错。
def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 print arg3 func(arg2, arg3) func(0,1)
冒泡算法:
-
冒泡算法就相当于是排序,可以从小到大或者从大到小
li=[11,22,33,11,42]#定义一个列表 for j in range(1,len(li)):#循环输出数字1到li列表的长度,不会循环的列表的第0个数字 for i in range(len(li)-j):#循环输出数字列表总长度减上一层循环的数字,也就不会去循环出索引最后一个数字 if li[i] > li[i+1]:#判断当前循环索引位置的数字大于索引+1的数字 temp=li[i]#将列表中本次循环索引位置的数字赋值给变量temp li[i] = li[i+1]#将列表中本次循环索引位置的数字修改成索引+1位置的数字 li[i+1] = temp #将列表中本次循环索引+1位置的数字,修改成索引的位置数字也就是我们定义的temp print(li)#输出列表li 执行结果: [11, 11, 22, 33, 42]
使用内置函数写一个验证码:
-
- 使用chr()内置函数写验证码
import random#随机模块 a=""#定义一个空的字符串 for i in range(4): #循环4次 num = random.randrange(0,4) #生成0-4的随机数 if num == 3 : #如果随机数是3那么就在验证码中生成一个0-9的数字 red2 = random.randrange(0,10) #自行百度ascii码对照表 a = a + str(red2)#向a变量中添加当前数字对应的ascii码的字符 elif num == 2 or num == 1: #如果随机数等于2或者1的时候生成小写字母 red3=random.randrange(97,123)#自行百度ascii码对照表 a = a + chr(red3)#向a变量中添加当前数字对应的ascii码的字符 else: #在验证码中生成一个随机的大写字母 red1 = random.randrange(65,91)#自行百度ascii码对照表 a = a + chr(red1)#向a变量中添加当前数字对应的ascii码的字符 print(a)#输出a变量 执行结果: o5ko
- 使用chr()内置函数写验证码
装饰器:
-
-
装饰器格式:
def outer(func):#定义一个函数加参数,其中的func参数为装饰这个装饰器的函数体 def inter(*args,**kwargs):#这个函数可以接受任何参数,这样我们后期也不必要进行调整,可以直接使用,这个函数主要用于执行完装饰这个装饰器函数的返回值进行返回 print('tail')#输出tail后执行函数 a=func(*args,**kwargs)#执行装饰这个装饰器的函数并将其返回值定义给a变量 return #a返回变量a return inter#执行完outer函数后返回inter执行的返回值
-
使用装饰器:
def outer(func):#定义一个函数加参数,其中的func参数为装饰这个装饰器的函数体 def inter(*args,**kwargs):#这个函数可以接受任何参数,这样我们后期也不必要进行调整,可以直接使用,这个函数主要用于执行完装饰这个装饰器函数的返回值进行返回 print('tail')#输出tail后执行函数 a=func(*args,**kwargs)#执行装饰这个装饰器的函数并将其返回值定义给a变量 return a#返回变量a return inter#执行完outer函数后返回inter执行的返回值 @outer#使用装饰器,装饰器的名称为outer def test(a1,a2): return a1+a2 print(test(2,10))#输出test函数返回值 执行结果: tail#装饰器输出 12#函数返回输出
-
练习:
使用open函数来写一个用户登录、注册、删除用户、修改密码的功能,练习答案在另一章中的出现!