博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day 15 内置函数补充
阅读量:4982 次
发布时间:2019-06-12

本文共 4797 字,大约阅读时间需要 15 分钟。

内置函数

 

1, lambda 匿名函数

lambda 参数: 返回值   函数名统一都叫lambd

# print("你好. 我\\叫周润发") # 对用户是友好的. 非正式的字符串## # 正式(官方)的字符串, 面向对象的时候# print(repr("你好, 我\'叫周润发")) # 程序中内部存储的内容, 这个是给程序员看的# print("我叫%r" % "周润发") # %r 实际上调用的是repr()# 原样输出# print(r"马化腾说:\"哈哈哈, \" \n\t")print("你好") # 用户看着舒服print(repr("你好")) # 真实的字符串表示形式(正式的)__str__()__repr__()
# 普通的正常的函数# def func(n):#     return n * n## # ret = func(9)# # print(ret)# ## # # 匿名函数, 语法: lambda 参数: 返回值# a = lambda n : n * n# # ret = a(9)# # print(ret)# b = lambda x: x+1# print(a(5)) # 函数的名字可以认为是a## print(func.__name__) # 查看函数的名字# print(a.__name__) # __name__的值都是
# print(b.__name__)# def func(a, b):# return a + b## x = lambda a, b: a+b## print(x(1,2))# def func(x, y):# return x, y## print(func(1,2))# # 1, 2# suiyi = lambda x, y : 1, 2 # 笔试题# print(suiyi)# print(suiyi(250,38))# lambda 参数: 返回值# 匿名函数, 给函数传递2给参数. 返回最大值# fn = lambda *args: max(args) # 单行函数## print(fn(1,2,5,2,3,4,156,3,2,2,4,5,56,34,34,34,34,88))

3. filter() 过滤函数

  filter(function, iterable)
  把可迭代对象中的每一个元素交给前面的函数进行筛选. 函数返回True或者False

def func():    print("你好")def func2():    print("不好")def gn(fn): # fn是一个参数. 根据实参给的值的变化而变化    print(fn.__name__) # func    fn()gn(func2)
# lst = [16, 18, 32, 54, 12, 9]# lst.sort() # list的方法# print(lst)#  内置函数中提供了一个通用的排序方案, sorted()# s = sorted(lst)# print(s)#       0       1          0          1         1        0      0# lst = ["聊斋", "西游记", "三国演义", "葫芦娃", "水浒传", "年轮", "亮剑"]## def func(s):#     return len(s)%2## ll = sorted(lst, key=func)## print(ll)# key: 排序方案, sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key# 后面的key计算出一个数字. 作为当前这个元素的权重, 整个函数根据权重进行排序lst = [    {
'name':"汪峰","age":48}, {
"name":"章子怡",'age':38}, {
"name":"alex","age":39}, {
"name":"wusir","age":32}, {
"name":"赵一宁","age":28} ]ll = sorted(lst, key=lambda el: len(el['name']), reverse=True)print(ll)

4. map() 映射函数

  map(function, iterable)
  把可迭代对象中的数据交给前面的函数进行执行. 返回值就是map的处理结果

# lst = ["张无忌", "张铁林", "赵一宁", "石可心","马大帅"]# def func(el):#     if el[0] == '张':#         return False # 不想要的#     else:#         return True # 想要的# 筛选,# f = filter(lambda el: el[0]!="张", lst) # 将lst中的每一项传递给func, 所有返回True的都会保留, 所有返回False都会被过滤掉## print("__iter__" in dir(f)) # 判断是否可以进行迭代# for e in f:#     print(e)# lst = [#     {"name":"汪峰", "score":48},#     {"name":"章子怡", "score":39},#     {"name":"赵一宁","score":97},#     {"name":"石可心","score":90}# ]## f = filter(lambda el: el['score'] < 60 , lst) # 去16期的人## print(list(f))

5. 递归

  函数自己调用自己
  最大深度: 1000 . 到不了1000就停了
  import sys
  sys.setrexxxxx

# 递归函数, 自己调用自己# count = 1# def func():#     global count#     print("alex是很帅的", count)##     count = count + 1#     func()# func()# 递归深度. 你可以自己掉用自己的次数,# 官方文档中递归最大深度是1000. 在这之前就会给你报错# 遍历 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)

6. 二分法

  核心: 掐头去尾取中间. 一次砍一半
  两种算法: 常规循环, 递归循环

dic = {'5':1,'6':1} o(1)

# 时间复杂度最低, 空间复杂度最低

  lst1 = [5,6,7,8]
  lst2 = [0,0,0,0,0,1,1,1,1]
for el in lst1:
  lst2[el] = 1

  lst2[4] == 1 # o(1)

 

# lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789 ]# n = 79# for el in lst:#     if el == n: # O(1)#         print("找到了")#         break# else:#     print("没有")# 使用二分法可以提高效率, 前提条件:有序序列# lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]## n = 88# ## left = 0# right = len(lst)-1## while left <= right: # 边界, 当右边比左边还小的时候退出循环#     mid = (left + right)//2 # 必须是整除. 因为索引没有小数#     if lst[mid] > n:#         right = mid - 1#     if lst[mid] < n:#         left = mid + 1#     if lst[mid] == n:#         print("找到了这个数")#         break# else:#     print("没有这个数")# 递归来完成二分法lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]def func(n, left, right):    if left <= right: # 边界        print("哈哈")        mid = (left + right)//2        if n > lst[mid]:            left = mid + 1            return func(n, left, right) # 递归  递归的入口        elif n < lst[mid]:            right = mid - 1            # 深坑. 函数的返回值返回给调用者            return func(n, left, right)    # 递归        elif n == lst[mid]:            print("找到了")            return mid            # return  # 通过return返回. 终止递归    else:        print("没有这个数") # 递归的出口        return -1 # 1, 索引+ 2, 什么都不返回, None# 找66, 左边界:0,  右边界是:len(lst) - 1ret = func(70, 0, len(lst) - 1)print(ret) # 不是None

 

 

 

转载于:https://www.cnblogs.com/songhuasheng/p/9481914.html

你可能感兴趣的文章