猴砸

函数(二)

内置函数

一、全部内置函数汇总

二、ads() :取绝对值

s = abs(-1)
print(s)

#运行结果:1

三、all()、any()

1、何为True?何为False?

布尔值中0、None、空字符串(空格为True)、空列表、空字典、空元组都为False,其他为True

s = bool(0)
s1 = bool("")
s2 = bool([])
s3 = bool({})
s4 = bool(())
s5 = bool(" ")

print(s,s1,s2,s3,s4,s5)

#运行结果:False False False False False True

2、all()函数

all(可以被循环/迭代的对象(列表、字典等)),里面的元素全部都为真就为真,不然就是False

s = all([11,22,34,0])

print(s)

#运行结果:False

3、any()函数

any(可以被循环/迭代的对象(列表、字典等)),里面的元素全部都为假就为假,不然就是True

 

s = any([11,22,34,0])

print(s)

#运行结果:True

四、ascii():自动执行某个对象的__repr__方法

class Foo:
    def __repr__(self):
        return "111"
n = ascii(Foo())
print(n)

#运行结果:111

五、bin()、oct()、hex()

1、bin():将十进制转换成二进制

0b:表示二进制

2、oct():将十进制转换成八进制

0o:表示八进制

3、hex():将十进制转换成十六进制

0x:表示十六进制

print(bin(5))
print(oct(9))
print(hex(15))

#运行结果
'''
0b101
0o11
0xf
'''

六、bool():布尔函数

s = bool(0)
s1 = bool("")
s2 = bool([])
s3 = bool({})
s4 = bool(())
s5 = bool(" ")

print(s,s1,s2,s3,s4,s5)

#运行结果:False False False False False True

七、bytes()、bytearray()

1、bytes():将字符串转换成字符串形式的字节

s = '张三'  #一个字节8位,一个汉字用gbk编码的话是2个字节,用UTF-8编码是3个字节

# 100100   100100   100100   100100   100100   100100   计算机存储的二进制
#   23       23       23       23       23       23       十进制
#   2f       2f       2f       2f      2f      2f         十六进制

#将字符串转换成字节类型
#bytes(需要转换的字符串,按照什么编码进行转换)
n = bytes(s,encoding='utf-8')
print(n)
n = bytes(s,encoding='gbk')
print(n)

#运行结果
'''
b'\xe5\xbc\xa0\xe4\xb8\x89'
b'\xd5\xc5\xc8\xfd'

2、bytearray()将字符串转换成列表的形式的字节

s = '张三' 

n = bytearray(s,encoding='utf-8')
print(n)
n = bytearray(s,encoding='gbk')
print(n)


#打印结果
'''
bytearray(b'\xe5\xbc\xa0\xe4\xb8\x89')
bytearray(b'\xd5\xc5\xc8\xfd')
'''

3、数字转换成字符串:str()

s = 123
s10 = str(s)
print(type(s10))
print(s10)

#打印结果
'''
<class 'str'>
123
'''

 

4、将字节转换成字符串:

字符串转换成字节用的是什么方式的编码,如果要再编译回来的时候也需要用同样的编码

s = '张三'
s10 = str(bytes(s,encoding='utf-8'),encoding='utf-8')
print(type(s10))
print(s10)

#打印结果
'''
<class 'str'>
张三
'''

八、callable()、chr()、ord()

1、callable()

检测传的值 是否可以被执行或者被调用

def f1():
    pass
f1()

f2
= 123
print(callable(f1)) print(callable(f2)) #运行结果: ''' True 表示函数可以被调用 False 表示不能被调用 '''

2、chr()、ord()

2.1、ascii码表的对应关系

2.2、chr():十进制对应的字符;ord():字符对应的十进制

2.3、相关代码

print(chr(65))
print(ord("a"))
#运行结果 ''' A 97 '''

九、classmethod()--面向对象(后续补充)

 

十、compile()、eval()、exec()

1、文件运行步骤

1.1、文件保存在硬盘里面就是以0101的模式进行保存的

1.2、操作文件的步骤

打开文件拿到的数据类型就是字符串(open)

运行的时候一般用的是python解释器去打开文件

  • 读取文件内容(open函数)到内存,拿到的是字符串--将字符串保存到内存
  • 存在特殊的结构(for循环之类的),解释器如何知道遇到for循环的时候执行循环:python内部,将字符串编译成特殊的代码--complied()
  • 执行代码--exec()

2、compile()、exec():

1.1、compile():

  将字符串编译成python代码

  支持字符串(<string>)(如下代码)、文件名(传文件名)

1.2、exec():执行编译后的代码

1.3、编译完成后的不同模式:single(单行)、eval(表达式)、exec

  single:将代码编译成单行的 python程序

  eval:将代码编译成表达式

  exec:将代码编译成与python代码一模一样的东西

1.4、用途:Django

1.5、相关代码

#将字符串编译成代码
s = "print(123)" #字符串 x = compile(s,"<string>","exec") #编译字符串 print(x) #运行结果: #<code object <module> at 0x102978660, file "<string>", line 1>
#执行编译后的代码
exec (x) #执行编译后的代码 #运行结果:123

2、eval()

将字符串变成python的表达式(通过运算符表示出来的)进行执行,并且拿到执行结果

s = "8*8"

ret = eval(s)
print(ret)

#运行结果:64 

3、总结

编译

compile():将字符串、文件编译成python代码

执行

exec():能够执行python的所有东西,无返回值,接收:代码或字符串

eval():只能执行表达式,有返回值,可以自行进行编译(可以直接自己编译字符串)

十一、complex():处理复数

十二、dict()、dir()、 help()

1、dict():字典

2、dir():快速获取一个对象、模块、类为你提供了哪些功能

print(dir(dict))

#打印结果
'''
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', 
'__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 
'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
'''

3、help():具体功能的解释(读取源码)

print(help(dict))

十四、divmod()

总共97条数据,每页显示10页,需要多少页,利用python的逻辑进行实现

 

r = divmod(97,10)

print(r)

#运行结果
'''
(9, 7)(商,余数)
'''

十五、enumerate()  待完善

十六、isinstance()

1、对象与类的关系:对象是类的实例

2、isinstance():判断某对象是某个类的实例

s = "zhangsan"
r = isinstance(s,str)
print(r)

#打印结果:True

十七、filter()、map()

1、filter()

1.1、需求:给一个列表,将列表中 >22的值筛选出来,其余的剔除

方法一、通过for循环筛选出来

def f1(args):
    result = []

    for item in args:
        if item > 22:
            result.append(item)
    return result

li = [11,22,33,44,55]
ret = f1(li)
print(ret)

#运行结果:[33, 44, 55]

方法二、filter(函数,可迭代的对象)

可迭代的对象:列表、元组、字典

li = [11,22,33,44,55]
ret = filter(None,li)
print(list(ret))
#运行结果:[11,22,33, 44, 55]

def f2(a): if a > 22: return True li = [11,22,33,44,55] ret = filter(f2,li) print(list(ret)) #运行结果:[33, 44, 55]

1.2、filter()运行原理:

def f2(a):
if a > 22:
return True
li = [11,22,33,44,55]


result = [] for item in 第二个参数: #在filter内部,会循环第二个参数(li) r = 第二个参数(item) #在每一次循环的内部又会执行第一个参数 if r: result(item) #将拿到的结果进行判断,如果为真的话就会将元素添加进来,如果是假的话不添加 return result ret = filter(f2,li)

print(list(ret))

 2、map()

 

 

内置函数文件操作篇

 

一、文件处理流程

打开文件open()--操作文件(通过源码查看功能)--关闭文件(close、pass)

二、“r”、“w”、“x”、“a”

1、打开文件

f = open('db','r')  #只读
f = open('db','w')  #只写(写的时候将文件清空原文件)
f = open('db','x')  #python3新加的,如果当文件存在的时候就报错,如果不存在的话就打开文件并且往文件里面写入内容(写入的时候与w模式一样)
f = open('db','a')  #追加

2、格式

open(‘打开的文件名’,‘打开的方式’)

3、例子

3.1、“r”方式打开

在硬盘里面,文件是以二进制形式保存的,通过python读取出来的是字符串,所以中间会有默认一个二进制转换成字符串的过程。

默认编码:encoding

如果在打开文件的时候,出现乱码的话,一般就是encoding(编码)出现不一致的情况,可以查看下文件保存的时候是以什么样的编码方式保存的,一般使用utf-8

f = open('test','r',encoding="utf-8")
data = f.read()
print(data,type(data))
f.close()

#打印结果
'''
admin|123
哈哈哈|1234
 <class 'str'>
'''

3.2、“r”、“w”、“x”、“a”读取、写入、保存的方式都是字符串的形式

3.3、“a”方式

f = open('test','a')
data = f.write('hello')
print(data,type(data))
f.close()

#打印结果
'''
5 <class 'int'> 
'''

f
= open('test','ab') data = f.write(bytes('hllo',encoding='utf-8')) print(data,type(data)) f.close() #打印结果 ''' 4 <class 'int'> '''

三、“rb”、“wb”、“xb”、“ab”

“rb”、“wb”、“xb”、“ab”方式的话,就是直接是以二进制的形式进行读取和写入,写入的时候也需要是二进制的形式

1、"ab"方式

f = open('test','ab')
data = f.write(bytes('hllo',encoding='utf-8'))
print(data,type(data))
f.close()

#打印结果
'''
4 <class 'int'>
'''

 四、“r+”、“w+”、“x+”、“a+”

“r+”:【可读、可写】

“w+”:【可读、可写】

“x+”:【可读、可写】

“a+”:【可读、可写】

1、“r+”

f = open('test','r+',encoding='utf-8')

ret = f.read()
print(ret)

ret2 = f.write('777')   #在写入的时候,需要定位下写入的位置
print(ret2)
f.close()

#打印结果:
'''
admin|123
哈哈哈|1234
hellohellohellohellohellohellohellohllo
3(添加的777)
'''

 

f = open('test','r+',encoding='utf-8')

#read:如果打开模式无b,则read的时候按照字符读取
data = f.read(1)
#tell:当前指针所在的位置永远是字节
print(f.tell())
#打印结果;3(第一个字符:李)

2、“w+”

3、“x+”

4、“a+”

一般都是会用r+进行读写操作,因为其他的方法会有局限性(a+:只能在最后进行追加,w+:先清空原先的内容再写)

5、文件添加的指针位置

5.1、默认情况

默认情况下先读取内容再写的话,默认指针就是从第一个位置遍历一遍内容,最后读完,指针的位置就在最后一位,所以写的时候也是从最后一位进行添加

5.2、修改指针位置

  seek():修改的位置写入之后,会将后面的数据覆盖

  tell():获取当前指针的位置

f = open('test','r+',encoding='utf-8')

ret = f.read()
print(ret)


#打印结果:
'''
admin|123
哈哈哈|1234
hellohellohellohellohellohellohellohllo777777777777

'''

f = open('test','r+',encoding='utf-8')

ret = f.read()
print(ret)
f.seek(1)
f.write('222')
f.close()


#打印结果:
'''
a222n|123
哈哈哈|1234
hellohellohellohellohellohellohellohllo777777777777

'''
f = open('test','r+',encoding='utf-8')

#read:如果打开模式无b,则read的时候按照字符读取
data = f.read(1)
#tell:当前指针所在的位置永远是字节
print(f.tell())
#seek:调整当前指针的位置(字节)
f.seek(f.tell())
#write:当前指针位置向后覆盖
f.write('888')
f.close()

五、“rb”、“wb”、“xb”、“ab”或“r+b”、“w+b”、“x+b”、“a+b”(以字节的形式进行操作)

六、文件操作功能

1、read()

  无参数,读取全部;有参数与打开方式有关(有b ,按字节;无b,按字符)

2、tell()

获取当前指针位置,永远按照字节

3、seek()

跳转到指定位置,永远按照字节

4、write()

写数据,与打开方式有关(有b ,按字节;无b,按字符)

5、close()

关闭文件

6、fileno()

文件描述符

7、flush()

将写入的文件强制从缓冲区刷新存入到硬盘

f = open('test2','a',encoding='utf-8')
f.write('缓冲区')
input("不输入的时候,写入的一直在缓冲区")

f = open('test2','a')
print(f.read())

#打印结果为空,因为前面的一直在等待input输入内容才会刷新到硬盘当中



f = open('test2','a',encoding='utf-8')
f.write('缓冲区')
f.flush()
input("不输入的时候,写入的一直在缓冲区")

f = open('test2','a')
print(f.read())

#打印结果:缓冲区(直接强制刷新到硬盘中)

8、readable()

判断是否可读

f = open('test','w',encoding='utf-8')
print(f.readable())

#打印结果:False,w的读取方式是不可读的

9、seekable()

是否可以移动指针

10、readline()

仅读取一行

f = open('test','r',encoding='utf-8')
print(f.readline())
print(f.readline())

#打印结果
'''
张三|123

李四|456
'''

11、truncate()

用来截断数据,指针后面的数据会直接被截断、清空掉

f = open('test','r+',encoding='utf-8')
f.seek(3)
f .truncate()
print(f.read())
f.close()

#打印结果
'''
张(指针以字节的形式定位了3位,并且将指针后面的内容进行清空)
'''

12、for循环文件对象

打开文件之后(对象),循环这个文件(对象)

f = open('test','r',encoding='utf-8')
for line in f:
    print(line)

#打印结果
'''
张

李

钱
'''

13、close()

关闭文件

14、with 操作

  14.1、集合了open与close操作文件的功能,打开文件,操作完之后将文件进行关闭

  14.2、格式

with open('xb') as f:
    pass

  14.3、python2.7及以上,支持同时打开两个文件

with open('test') as f1,open('test1') as f2:
    pass

 

  将一个文件里面的前十行,写到另一个文件里面

with open('test','r',encoding='utf-8') as f1,open('test2','w',encoding='utf-8') as f2:
    times = 0
    for line in f1:
        times +=1
        if times<=10:
            f2.write(line)
        else:
            break
            
#运行结果
'''
test文件
张
李
钱
1
2
3
4
5
6
7
8
9


test2文件
张
李
钱
1
2
3
4
5
6
7

'''

15、replace()

将test文件里面的test字符串替换成st并且写在test1文件中

with open('test','r',encoding='utf-8') as f1,open('test2','w',encoding='utf-8') as f2:
    for line in f1:
        new_str = line.replace('test','st')
        f2.write(new_str)

#运行结果
'''
张
李
钱
1
2
3
4
5
6
7
8
9
test


test2文件
张
李
钱
1
2
3
4
5
6
7
8
9
st


'''

 

内置函数补充

一、随机验证码

random模块

1、随机产生字母

ascii里面的A-Z字母的十进制范围为:65-90;小写字母(a-z)十进制范围为:97-122

import random

#ascii里面的A-Z字母的十进制范围为:65-90
i = random.randrange(65,91)
c = chr(i)
print(c)

#运行结果:J

2、随机产生数字

import random

#1< = i<5 i
= random.randrange(1,5) print(i) #运行结果:5

 3、生成多位随机验证码

import random

li = []
for i in range(6):
    temp = random.randrange(65, 91)
    c = chr(temp)
    li.append(c)

result = ''.join(li) #拼接列表的验证码
print(result)


#运行结果:XXVXOU

4、任意位置生成多个数字、字母混合的随机验证码

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))    #下面的join方法的时候要求需要全部是字符串,不支持数字,所以需要将数字转换成字符串
    else:
        temp = random.randrange(65,91)
        c = chr(temp)
        li.append(c)

result = ''.join(li)  #拼接列表的验证码
print(result)


#运行结果:HM6I93

5、固定位置生成多个数字、字母混合的随机验证码

注意点⚠️

使用join拼接功能的时候,需要全部是字符串,不可以是数字,需要将数字强制转换成字符串

import random

li = []
for i in range(6):
    if i == 2:  #随机生成的第三位永远都是数字
        num = random.randrange(0, 10)
        li.append(str(num))    #下面的join方法的时候要求需要全部是字符串,不支持数字,所以需要将数字转换成字符串
    else:
        temp = random.randrange(65,91)
        c = chr(temp)
        li.append(c)

result = ''.join(li)  #拼接列表的验证码
print(result)


#运行结果:HU2MUS 

二、map函数

1、map()函数

需求:对列表的每一个元素都加100

2、格式

map(函数,可迭代的对象(可以for循环的东西)),内部帮忙进行循环,具体的执行就是自己写的函数即可

#通过for循环来解决
li = [11,22,33,44,55]

def f1(args):
    result = []
    for i in args:
        result.append(100+i)

    return result
r = f1(li)
print(list(r))

#打印结果:[111, 122, 133, 144, 155]


#通过map函数实现 li = [11,22,33,44,55] def f2(a): return a+100 result = map(f2,li) print(list(result)) #打印结果:[111, 122, 133, 144, 155]
#lambda+map li = [11,22,33,44,55] result = map(lambda a:a + 100,li) print(list(result)) #打印结果:[111, 122, 133, 144, 155]

三、globals()、locals()

1、globals():所有的全局变量

2、locals():所有的局部变量

NAME = '张三'

def show():
    a = 123
    c = 123
    print(locals())
    print(globals())
show()

#打印结果
'''
{'c': 123, 'a': 123}
{'__name__': '__main__', '__doc__': None, '__package__': None, 
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1006d8550>, 
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 
'__file__': '/Users/monkey/eleme/code/515151/test.py', '__cached__': None, 'NAME': '张三', 
'show': <function show at 0x100662e18>}

'''

 

四、 hash()

1、定义

将我们传的对象转换成哈希值,并且保存在硬盘里面

无论我们输入的值是多少,生成的哈希值都是固定的(19位)

 

s = 'hhh'
print(hash(s))

#打印结果:8993219217206648805

 

 

 

2、应用

在字典里面,有的key是比较长的,所以一般在存储的过程中,程序会自动将key转换成哈希值来存储到硬盘当中1、存储空间变小

2、内部可以通过哈希值做一个索引来查找

dic = {'42adasdksabsafbjsvfaskfaskfskfvsfskf':1}

print(hash('42adasdksabsafbjsvfaskfaskfskfvsfskf'))  #实际程序中存储的内容为哈希值

五、id()、len()

1、id()

查看内存地址

2、len()

查看长度

python3可以通过字节(转换成字节)、字符的方式查看

python2里面智能通过字节的方式查看

 

s = '李四'
print(len(s))

#打印结果:2  python3里面默认的是字符找的,如果想要计算字节的话,转换成字节即可

s = '李四'
b = bytes(s,encoding='utf-8')
print(len(b))

#打印结果:6

 

 

 

六、 max() 、min() 、sum()

1、max()

取最大值

2、min()

取最小值

3、sum()

求和

s = [11,22,33,44,55]

print(sum(s))
print(max(s))
print(min(s))

#打印结果:
# 165
# 55
# 11 

七、memoryview()

1、定义

python里面新加的一种函数,查看内存地址相关的类

十、next()、iter():迭代器相关

十一、object()

所有类的父类

十二、pow()

求次方

 

2**20  #2的20次方

pow(2,20) #2的20次方

十三、property()、repr():面向对象里面的知识点

repr()

repr('zhangsan')  #自动执行str类里面的__repr__方法

十四、range()

取范围

十五、reversed()

反转

li = [11,22,33,44]
print(li.reverse())

#打印结果:None

十六、round()

定义

四舍五入

r = round(1.8)
print(r)

#打印结果:2

十七、slice()

1、定义

python3里面新加的函数

2、用途

类似于列表里面的切片的功能

li = [11222,33,22,44,23,4344]

s = li[0::2]
print(s)


#打印结果:[11222, 22, 23]

十八、sort()

1、定义

排序

li = [11,33,22,44]

li.sort()
print(sorted(li))  #等同于上句代码,排序作用

#打印结果:[11, 22, 33, 44] 

十九、vars()、zip()

1、vars()

当前模块可使用的变量

2、zip()

利用内置函数zip(),实现功能

l1 =['zhangsan',22,33,44,55]

l2 = ['is',22,33,44,55]

l3 = ['good',22,33,44,55]

l4 = ['boy',22,33,44,55]

请获取字符串s = 'zhangsan_is_good_boy'

l1 = ['zhangsan',22,33,44,55]
l2 = ['is',22,33,44,55]
l3 = ['good',22,33,44,55]
l4 = ['boy',22,33,44,55]

r = zip(l1,l2,l3,l4)
temp = list(r)[0]
ret = '_'.join(temp)
print(ret)

#打印结果:zhangsan_is_good_boy
l1 = ['zhangsan',22,33,44]
l2 = ['is',22,33,44]
l3 = ['good',22,33,44,55]
l4 = ['boy',22,33,44,55]

r = zip(l1,l2,l3,l4)
print(list(r))

#打印结果:[('zhangsan', 'is', 'good', 'boy'), (22, 22, 22, 22), (33, 33, 33, 33), (44, 44, 44, 44)]
#如果部分没有55的话就直接一一对应到44而已

二十、所有内置函数汇总

1、汇总图片

2、相关官方文档链接

https://docs.python.org/3/library/functions.html#next

3、划重点

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-09-12 16:26  猴砸  阅读(308)  评论(0编辑  收藏  举报