day05匿名函数,内置函数,二分法,递归,模块

yield作为表达式来使用的方式

#grep -rl ‘python /root

"""

查找root下文件中含有python的文件

"""

import os

def init(func):

def wrapper(*args,**kwargs):

g=func(*args,**kwargs)

next(g)

return g

return wrapper

@init

def search(target):

while True:

search_path = yield

g=os.walk(search_path)

# print(g)

for par_dir,dirnames,files
in g:#g的属性dirpath, dirnames该目录下的文件夹, filenames

for file in files:

file_abs_path=r‘%s\%s‘ %(par_dir,file)

#
print(file_abs_path)

target.send(file_abs_path)

@init

def openner(target):

while True:

open_path = yield

with open(open_path,encoding=‘utf-8‘) as f:

target.send((open_path,f))#双括号是以元组形式传送了一个值

@init

def cat(target):

while True:

open_path,f=yield

for line in f:

tag=target.send((open_path,line))

if tag:

break

@init

def grep(target,word):

tag = False

while True:

open_path,line = yield tag

tag=False#发送完成就重置为False,否则后面的文件都不会再正常运行

if word in line:

tag=True

target.send((open_path))

@init

def printer():

while True:

open_path = yield

print((open_path))

g=search(openner(cat(grep(printer(),‘python‘))))

# print(g)

g.send(r‘D:\kinggsoft\python_file\day05\a‘)

‘‘‘

面向过程的程序设计:是一种流水线式的编程思路,是机械式

优点:

程序的结构清晰,可以把复杂的问题简单

缺点:

1
扩展性差

应用场景:

1
linux内核,git,httpd

‘‘‘

匿名函数lambda

# def func(x,y):

#    
return x+y

# func(1,2)

a=lambda x,y,z:x+y+z

print(a(1,2,3))

print(a)è
<function <lambda> at 0x0000000001171400>

这样是没有意义的,通常用在不需要名字的地方

max、min、sorted、zip

salaries={‘alex‘:1000,

‘dodo‘:300000,

‘egon‘:2000,

‘yric‘:200

}

# (max(salaries))#这里比较的是key的值的首字母的大小

# res=zip(salaries.values(),salaries.keys())#

# print(list(zip))

# print(max(res))

print(max(salaries,key=lambda x:salaries[x]))

print(min(salaries,key=lambda x:salaries[x]))

print(sorted(salaries,key=lambda x:salaries[x]))

map、reduce、filter

map:

l=[‘alex‘,‘wupeiqi‘,‘yuanhao‘]

res=map(lambda x:x+‘_SB‘,l)

print(list(res))

print(res)

输出结果:

[‘alex_SB‘, ‘wupeiqi_SB‘, ‘yuanhao_SB‘]

<map object at 0x0000000000A90400>

reduce:

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])è    ((((1+2)+3)+4)+5).

from functools import reduce

l=[‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]

print(reduce(lambda x,y:x+y,l,‘a‘))è a12345

filter:

l=[‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]

# print(reduce(lambda x,y:x+y,l,‘a‘))

l=list(map(lambda x:x+‘a‘,l))

res=filter(lambda x:x.endswith(‘a‘),l)

print(res)

print(list(res))

输出结果:输出以a结尾的l中的所有元素

<filter object at 0x00000000011904E0>

[‘1a‘, ‘2a‘, ‘3a‘, ‘4a‘, ‘5a‘]

二分法

#二分法
l=[1,3,4,5,3,5,6,2]
l.sort()
# print(l)
word=4
while True :
    max_item = len(l)-1
    min_item = 0
    mid_item = int((max_item-min_item)/2)+1
    # print(l[mid_item])
    if max_item>min_item:
        if word > l[mid_item]:
            l=l[mid_item:max_item]
        elif word < l[mid_item]:
            l=l[min_item:mid_item]
        else:
            print(‘word is finded‘)
            break
    else:
        print(‘not find‘)
        break

找到最大值和最小值,在找到中间值,和中间值进行比较,用切片来缩小范围

递归调用

递归调用:在函数调用过程中,直接或间接地调用了函数本身,这就是函数的递归调用

def age(n):

if n == 1:

return 18

return age(n-1)+2

print(age(5))

时间: 2024-12-28 05:37:32

day05匿名函数,内置函数,二分法,递归,模块的相关文章

函数递归+匿名函数+内置函数day15

一.函数递归 什么是函数递归: 函数递归调用是一种特殊的嵌套调用,在调用一个函数的过程中,又直接或间接地调用了该函数本身. 其中,函数的递归有明确的结束条件,不能无限制的调用,否则会撑破内存,在Python中限定递归最多调用1000层. 1000层这个值是大概的数值,这个数值可以通过Python内置的功能进行更改. 递归必须要有两个明确的阶段: 递推:一层层递归调用下去,强调每次进入下一次递归,问题规模都在减小 回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层层回溯 其中,

4/2 三元表达式/函数递归/匿名函数/内置函数

三元表达式 def max2(x,y) if x > y: return x else return y res=max2(10,11) 三元表达式仅应用于: 1 条件成立返回一个值 2 条件不成功返回一个值 def max2(x,y): return x if x>y else y print (max2(2,10)) 10 函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数的本身. 直接调用 def foo(): print ('fffff') foo() 间接调用

学习python的第十七天(二分法,有名函数,匿名函数,内置函数)

06.04 学习总结 一.二分法 二分法个人理解是一种算法的方式在一个有序的序列,区中间值,把中间值与想要的值进行对比从而一次一次的减少搜索范围举例 #给与一个列表1-100, num_list = [num fornum in range(1,101)] #给予一个num让你在列表中寻找他 mid_num_index = int(len(num_list)/2) mid_num = num_list[mid_num_index] if len(num_list)==1: if num_list

python基础12_匿名_内置函数

一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, 66] def binary_search(dataset, find_num): print(dataset) if len(dataset) > 1: mid = int(len(dataset) / 2) if dataset[mid] == find_num: # find it print

函数-内置函数,匿名函数,嵌套函数,高阶函数,序列化

函数简单说明 # 函数即"变量" # 高阶函数 # a.把一个函数名当做实参传给另一个函数(在不修改被装饰函数的源代码的情况下,为其添加功能) # b.返回值中包含函数名(不修改函数的调用方式) ''' import time def bar(): print("in the bar!") time.sleep(2) def foo(func): start_time = time.time() func() #根据内存地址,执行代码 stop_time = tim

生成器 三元表达式 列表生成式 匿名函数 内置函数

生成器 1.什么是生成器? ? -生成的工具 ? -生成器是一个自定义的迭代器,本质上是一个迭代器. 2.如何实现生成器? -但凡在函数内定义的yield ? -调用函数时,函数体代码不会执行 ? 会返回一个结果,这个结果就是生成器. 3.yield ? -每一次的yield都会往生成器对象中添加一个值. ? -yield只能在函数内定义 ? -yield可以保存函数的暂停状态 yield和return的对比 ? -相同点: ? 返回值的是不限制的: ? -不同点 ? return一次只可以返回

python测试开发(01-递归函数+内置函数)

# 生成器三个方法:send,close throw# send()发送数据 f# def gen():# for i in range(10):# j=yield i# print(j)# g=gen()## print(next(g))# print(g.send(100))# print(next(g))# print(next(g))# print(g.send(10000))# print(next(g))## close()关闭生成器# g.close()# print(g.send

Python学习(五)函数 —— 内置函数 lambda filter map reduce

Python 内置函数 lambda.filter.map.reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python 的 lambda.filter.map.reduce 进行初步的学习. lambda 匿名函数 lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值. lambda语句构建的其实是一个函数对象,参考下例来感受下 lambda 匿名函数: 1 def f(i): # 用户自定义返回平方数 2 retur

pythopn 函数(内置函数)

内置函数(Py3.5) 重要的内置函数: 1. filter(function, sequence) # 描述: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判, 然后返回 True 或 False,最后将返回 True 的元素放到新列表中. # 语法: 以下是 filter() 方法的语法: filter(function,sequence) # 参数: funct

Mysql函数(内置函数,自定义函数)

简述 SQL:结构化查询语言,是一门编程语言,是用于管理数据库的编程语言. 元素:数据,数据类型,变量,函数,流程控制,运算符,注释. 注释: 行: # –[空格] 块: /* */ select * from swpu_stu #where id=2; ; select * from swpu_stu -- where id=2; ; 结束符: select * from swpu_stu where id=2\g select * from swpu_stu where id=2\G 可以使