内置函数、递归、二分法
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()
delattr() hash() memoryview() set()
作用域相关
locals() 返回当前作用域的名字
globals() 返回全局作用域中的名字
迭代器相关
range() 生成数据
next( 迭代器向下执行一次,内部实际调用了__next__()函数
iter() 获取迭代器,内部实际调用了__iter__()函数
字符串类型代码的执行
eval() 执行字符串类型的求值表达式的执行,并且有返回值
exec() 执行字符串类型的流程语句或是程序执行,没有返回值
compile() 函数是将字符串类型的代码进行编译
参数说明:
1,resouce 要执行的代码,动态代码段
2,文件名, 代码存放的文件名,当传入了第一个参数的时候,这个参数空着就可以了
3,模式:
模式有3个
exec :
eval:
single:resource存放的代码有交互的时候,mode应为 single, 但是执行的用exec
code 1 = "for iinrange(10):print(i)"
c1 = compile(code1,"",mode=exec)
exec(c1)
code2 = "1+2+3"
c2 = compile(code2, "", mode="eval")
a = eval(c2)
print(a)
code3 = "name = input('请输⼊入你的名字:')"
c3 = compile(code3, "", mode="single")
exec(c3)
print(name)
输入和输出相关
input()
print()
内存相关
id() 获取对象的内存地址
hash()获取对象的哈希值
文件操作相关:
open() 用于打开一个文件, 创建一个文件句柄
模块相关:
__import__() 用于动态加载类和函数
帮助:
help() 函数⽤用于查看函数或模块⽤用途的详细说明
调用相关:
callable() 用于检查⼀一个对象是否是可调用的. 如果返回True, object有可能调⽤用失败, 但
如果返回False. 那调用绝对不会成功
查看内置属性:
dir() 查看对象的内置属性, ⽅方法. 访问的是对象中的__dir__()⽅方法
基础数据类型相关:
数字相关:
bool() 将给定的数据转换成bool值. 如果不给值. 返回False
int() 将给定的数据转换成int值. 如果不给值, 返回0
float() 将给定的数据转换成float值. 也就是小数
complex(a,b) 创建一个复数. 第一个参数为实部, 第二个参数为虚部. 或者第一个参数直接用字符串串来描述复数
进制转换
bin()
otc()
hex()
数学运算
abs() 返回绝对值
divmode() 返回商和余数
round(数据,要保留的小数位数) 四舍五入,还可以设置略到哪一位. 如果要整数,就只写一个要处理的数据就可以了,不用再写后面省略的位数了.
pow(x,y,z) 求幂 还有第三个参数用来求余余
sum() 求和 参数需要可迭代对象,,后面可以加一个起始值参数,以这个参数值为起点继续加.
min()函数,求最小值,里面可以放一个可迭代对象,与lambda函数连用,也可以直接放数据
max()求最大值
# a = [8,34,6,45,32] # d =lambda x:x%2 # s = max(a,key=d) # print(s)
和数据结构相关
list() tuple()
reversed 序列反转 返回翻转序列的迭代器
sllice() 切片
st = "⼤大家好, 我是麻花藤"
s = slice(1, 5, 2)
print(st[s])
字符串相关
str()
format() 可以看思维导图的例子
bytes() 把字符串转换为bytes类型
s = "你好"
bs = s.encode("UTF-8")
print(bs)
s1 = bs.decode("UTF-8")
print(s1)
bs = bytes(s, encoding="utf-8") # 把字符串串编码成UTF-8
print(bs)
bytearray() 返回⼀一个新字节数组. 这个数字⾥里里的元素是可变的, 并且每个元素的值得范围是[0,256)
ret = bytearray('alex',encoding='utf-8')
print(ret[0])
print(ret)
memoryview()
# 查看bytes字节在内存中的情况
s = memoryview("麻花藤".encode("utf-8"))
print(s)
ord() 输入字符找字符编码位置
chr() 输入位置数字找出对应的字符
ascii() 如果是ascii中的值 就返回,不是就返回 \u...
# 找到对应字符的编码位置
print(ord('a'))
print(ord('中'))
# 找到对应编码位置的字符
print(chr(97))
print(chr(20013))
# 在ascii中就返回这个值. 如果不不在就返回\u...
print(ascii('a'))
print(ascii('好')
repr() 返回一个字符串的标准形式
数据集合
dict() 创建一个字典
set() 创建一个集合
frozenset() 创建一个冻结的集合,冻结的集合不能进行添加和删除的操作
len() 返回长度
sorted() 排序函数 sorted(iterable ,key=None,Reverse = False)
key=排序规则(排序函数)在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数,根据函数结果进行排序
reverse 默认是升序,reverse=True 是降序.
不会更改原列表,会生成新列表
lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst) # 原列列表不不会改变
print(lst2) # 返回的新列列表是经过排序的
dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic)) # 如果是字典. 则返回排序过后的key
# 根据字符串串⻓长度进⾏行行排序
lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
# 计算字符串串⻓长度
def func(s):
return len(s)
print(sorted(lst, key=func))
# 根据字符串串⻓长度进⾏行行排序
lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
# 计算字符串串⻓长度
def func(s):
return len(s)
print(sorted(lst, key=lambda s: len(s)))
firter()筛选函数 filter(function,iterable)
function:用来筛选的函数,在filter()函数中会自动把iterable中的元素传递给function.然后根据function返回的True或者是False来判断是否保留此数据
# 根据字符串串⻓长度进⾏行行排序
lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
# 计算字符串串⻓长度
def func(s):
return len(s)
print(sorted(lst, key=lambda s: len(s)))
map()映射函数 map(function,iterable)可以对可迭代对象中的每一个 元素进行映射,分别去执行function
def func(e):
return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp)
print(list(mp))
# 计算两个列列表相同位置的数据的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))
递归
在函数中调用函数本身就是调用
def func():
print("我是谁")
func()
func(
在python中递归的最大深度是998,,在1000次之前进行报错
二分查找 必须查找有序序列
# 判断n是否在lst中出现. 如果出现请返回n所在的位置
# ⼆二分查找---⾮非递归算法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
middle = (left + right) // 2
if n < lst[middle]:
right = middle - 1
elif n > lst[middle]:
left = middle + 1
else:
print(count)
print(middle)
break
count = count + 1
else:
print("不不存在")
递归查找,二分法
def binary_search(n, left, right):
if left <= right:
middle = (left+right) // 2
if n < lst[middle]:
right = middle - 1
elif n > lst[middle]:
left = middle + 1
else:
return middle
return binary_search(n, left, right) # 这个return必须要加. 否则接收
到的永远是None.
else:
return -1
print(binary_search(567, 0, len(lst)-1))

浙公网安备 33010602011771号