匿名函数、冒泡排序,二分法, 递归
匿名函数 lambda 匿名函数 格式 lambda 参数:返回值 函数名统一叫lambda,最多只能写一行 普通的正常的函数 def func(n): return n * n lambda匿名函数写法 a = lambda n : n**2 print(a(3)) 当有多个返回值时 suiyi = lambda x, y : (1, 2) # 笔试题 返回值有多个要用(),返回值时已元组方式返回的 print(suiyi) #==》<function <lambda> at 0x03713420> print(suiyi(250,38)) #==》(1, 2) 递归 在函数中调用自己,python最大递归层数是1000,不到1000就会提前报错,sys.setrecursionlimit(10000000),可以更改递归最大层数 import sys sys.setrecursionlimit(10000000) n = 0 def story(): global n n += 1 print(n) story() story() 遍历 D:/sylar文件夹, 打印出所有的文件和普通文件的文件名 import os def func(filepath, n): # d:/sylar/ # 1,打开这个文件夹 files = os.listdir(filepath) # 2. 拿到每一个文件名 for file in files: # 文件名 # 3. 获取到路径 f_d = os.path.join(filepath, file) # d:/sylar/文件名/ # 4. 判断是否是文件夹 if os.path.isdir(f_d): # 5. 如果是文件夹. 继续再来一遍 print("\t"*n, file,":") # 打印文件名 func(f_d, n + 1)#如果是文件夹继续循环调用 else: # 不是文件夹. 普通文件 print("\t"*n, file) func("d:/sylar",0) 二分法查找 二分法思想:二分法的序列必须是有序的,从小到大排序,先和中间的比较大小如果比中间的值大,则所取值在右侧,左边值右移,如此循环比较 lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789] def fun(n): left = 0 right = len(lst) - 1 while lst[left] <= lst[right]: mid = (left+right) // 2 if n > lst[mid]: left = mid + 1 if n < lst[mid]: right = mid - 1 if n == lst[mid]: print('yes', mid) break else: print('no') fun(101)
冒泡排序
lst = [22, 13, 44, 55, 66, 77, 88, 99, 101 , 8 , 345 , 456 , 57 , 678 , 789] def fun(lst): for i in range(len(lst)): for i in range(len(lst)-1): if lst[i] > lst[i+1]: lst[i], lst[i + 1] = lst[i+1], lst[i] return lst print(fun(lst))