python内置函数

一.lamda匿名函数

定义:为了解决一些简单的需求而设计的函数.

语法:函数名=lambda 参数 : 返回值

1,函数的声明
def func(n):
    '''
    此函数接收一个参数n
    计算n的n次方
    :param n:  传递进来的n
    :return:  n的n次方
    shijian
    zuozhe
    '''
    return n**n
r = func(3) # 函数的调用
print(r)

#print(func.__name__) #查看函数名
#print(func.__doc__) #查看注释文档
例一:
a = lambda n: n**n # 匿名函数, 一般不会用来做复杂的操作
r=a
print(r)
例二
# 写一个lambda 计算字符串长度并返回 # len()
a = lambda s: len(s)
例三:
# 写一个lambda 给函数传递两个参数, a, b 计算a+b的结果
a = lambda m, n: m + n

  

注意:
1. 函数的参数有多个,多个参数之间用逗号隔开
2. 匿名函数不管有多复杂,只能写一行,且逻辑结束后直接返回数据
3.返回值和正常的函数一样,可以是任意数据类型

二:排序函数sorted()

语法:sorted(Iterable, key=None, reverse=False)

Iterable: 可迭代对象
key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函
数的参数. 根据函数运算的结果进⾏排序
reverse: 是否是倒叙. True: 倒叙, False: 正序

例一
list=[1,5,3,4,6]
lst=sorted(list)
print(lst)
print(list)
例二
dic={1:'A',3:'c',2:'b'}
print(sorted(dic))
例三和函数一起使用
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)))
例五:
lst=[{"id":1,"name":'alex',"age":18},
     {"id":2,"name":"wusir","age":16},
     {"id":3,"name":"taibai","age":17}
     ]
print(sorted(lst,key=lambda e:e["age"]))

三fitter()筛选函数

语法: filter(function. Iterable)

function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后
根据function返回的True或者False来判断是否保留此项数据
Iterable: 可迭代对象

例一
lst=[1,2,3,4,5,6,7,8,9,10]
ll=filter(lambda  x: x%2==0,lst)
print(ll)
print(list(ll))
例二
lst=[{"id":1,"name":'alex',"age":18},
     {"id":2,"name":"wusir","age":16},
     {"id":3,"name":"taibai","age":17}
     ]
fl =filter(lambda e: e[age]>16,lst)
print(list(f1))
例三
c=lambda a,b: a+b
r=c(3,4)
print(r)
例四
lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
ll=lambda s: len(s)
r=ll
print(r)
例五
lst=["精卫填海","放羊的星星","年轮","灵魂摆渡","蜗居","第八号当铺","惊魂"]
f=filter(lambda s: len(s)>2,lst)
print(f)
print("__iter__" in dir(f))
for i in f:
     print(i)
例六
lst=[{"id":1,"name":'alex',"age":18},
     {"id":2,"name":"wusir","age":16},
     {"id":3,"name":"taibai","age":34},
     {"id": 3, "name": "太白", "age": 49},
     {"id": 3, "name": "太黑", "age": 26},
     {"id": 3, "name": "骚逼", "age": 17}
     ]
f2=filter(lambda e:e["age"]>=30,lst)
print(f2)
print("__iter__" in dir(f2))
for j in f2:
     print(j)

四map函数(映射函数)

语法: map(function, iterable) 可以对可迭代对象中的每一个元素进行映射,分别取执行function

例一:计算列表中每个元素的平方返回新列表
lst=[2,3,4,5,6,7]
m=map(lambda s:s**2,lst)
print("__iter__" in dir(m))
for i in m:
     print(i)

n=filter(lambda x:x**2,lst)
for j in n:
     print(j)
例二:查找是否在列表里面
用户:alex
密码:456
lst=["alex_123", "alex_456", "wusir_123", "wusir_456", "alex_789"]
m=list(map(lambda s:"yes" if s=="alex_456" else "false" ,lst))
print(m)
m=list(map(lambda s:s.split("_")[0]=="alex" and  s.split("_")[1] =="123" ,lst))
print(m)
print("__iter__" in dir(list))
例三:计算两个列表相同位置的数据的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

  

五;递归:在函数中调用函数本身,就是递归(python中最大递归深度998)

例一
def func():
     print("我是谁")
     func()
func()
def foo(n):
     print(n)
    n += 1
    foo(n)
foo(1)
递归的应⽤: 
 我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统.
 可以使用递归来遍历该文件夹中的所有文件
def func(path, ceng): # path: d:/a
    lst = os.listdir(path)
    for el in lst: # 哈哈
        # el 文件名
        rp = os.path.join(path, el) # d:/a/哈哈
        if os.path.isdir(rp):
            print("	"*ceng, el, sep="")
            func(rp, ceng+1)
        else:
            print("	"*ceng,el, sep="")
func("e:/哈哈", 0)

lst = os.listdir(path) # 打开一个文件夹. 获取到文件夹内的所有内容 ["a","b"]
for el in lst: # 当前文件夹内的所有的文件名(包括文件夹名字)
    # 拼接文件的真实路径
    file_real_path = os.path.join(path, el)
    # 判断这个路径是文件还是文件夹
    if os.path.isdir(file_real_path):
        # 递归的入口
        print(el)
        func(file_real_path) # 重新执行刚才的操作

    else: # 不是文件夹, 是文件
        # 递归的出口
        print(el)

 

六. 二分查找
二分查找. 每次能够排除掉⼀半的数据. 查找的效率非常⾼. 但是局限性比较大. 必须是有
序序列才可以使用二分查找
要求: 查找的序列必须是有序序列.

判断n是否在lst中出现,如果出现请返回n所在的位置
1.二分法查找-----非递归算法
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("不存在")       

2. 普通递归版本⼆分法
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))
3. 另类⼆分法, 很难计算位置.
def binary_search(ls, target):
     left = 0
     right = len(ls) - 1
     if left > right:
         print("不在这⾥")
     middle = (left + right) // 2
     if target < ls[middle]:
         return binary_search(ls[:middle], target)
     elif target > ls[middle]:
         return binary_search(ls[middle+1:], target)
     else:
         print("在这⾥")
binary_search(lst, 567)            

  

原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/9910781.html