携程函数、递归、二分法、import、from。。。import

携程函数 与yield类似 yield:

1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器

2:与return功能类似,都可以返回值,但不同的是,return只能 返回一次值,而yield可以返回多次值

3:函数暂停与再继续运行的状态是有yield保存

def func(count):

  print(‘start‘)

  while True:

    yield count

    count+=1

g=func(10)

print(g)

print(next(g))

print(next(g))

yield的表达式形式的应用

def eater(name):

  print(‘%s 说:我开动啦‘ %name)

  while True:

    food=yield         print(‘%s eat %s‘ %(name,food))

alex_g=eater(‘alex‘)

print(alex_g)

print(next(alex_g))

print(‘==============>‘)

print(next(alex_g))

print(‘==============>‘)

print(next(alex_g))

用法: def eater(name):

print(‘%s 说:我开动啦‘ %name)     f

ood_list=[]

while True:

food=yield food_list

food_list.append(food) #[‘骨头‘,‘菜汤‘]

print(‘%s eat %s‘ %(name,food))

alex_g=eater(‘alex‘)

第一阶段:初始化 next(alex_g) #等同于alex_g.send(None) print(‘===========>‘)

第二阶段:给yield传值 print(alex_g.send(‘骨头‘))

#1 先给当前暂停位置的yield传骨头

2 继续往下执行,直到再次碰到yield,然后暂停并且把yield后的返回值当做本次调用的返回值

def eater(name):     print(‘%s 说:我开动啦‘ %name)     food_list=[]     while True:         food=yield food_list         food_list.append(food) #[‘骨头‘,‘菜汤‘]         print(‘%s eat %s‘ %(name,food))

def producer():     alex_g=eater(‘alex‘)

#第一阶段:初始化     next(alex_g)

#第二阶段:给yield传值

while True:

food=input(‘>>: ‘).strip()

if not food:continue

print(alex_g.send(food))

producer()

print(‘===========>‘)

print(alex_g.send(‘菜汤‘))

print(alex_g.send(‘狗肉包子‘))

#解决初始化问题

def init(func):

def wrapper(*args,**kwargs):

g=func(*args,**kwargs)

next(g)

return g

return wrapper

@init def eater(name):

print(‘%s 说:我开动啦‘ %name)

food_list=[]

while True:

food=yield food_list

food_list.append(food) #[‘骨头‘,‘菜汤‘]

print(‘%s eat %s‘ %(name,food))

alex_g=eater(‘alex‘) 第二阶段:给yield传值 print(alex_g.send(‘骨头‘))

#1 先给当前暂停位置的yield传骨头

2 继续往下执行,直到再次碰到yield,然后暂停并且把yield后的返回值当做本次调用的返回值 print(‘===========>‘)

面向过程编程

--------------------------------------------------------

面向过程:核心是过程二字,过程即解决问题的步骤,像一条工业流水线,是一种机器式的思维方式 优点:程序结构清晰,可以把负载的问题简单化,流程化 缺点:可扩展性差,一条线只是用来解决一个问题 应用场景:linux内核,git,httpd,shell脚本 grep -rl ‘error‘ /dir/ 第一阶段:找到所有文件的绝对路径 第二阶段:打开文件 第三阶段:循环读出每一行内容 第四阶段:过滤 第五阶段:打印该行属于的文件名

--------------------------------------------------------------------

递归与二分法

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

def func():

print(‘from func‘)

func()

func()

间接 def foo():

print(‘from foo‘)

bar()

def bar():

print(‘from bar‘)

foo()

foo()

age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=18

age(n)=age(n-1)+2 #n>1 age(1)=18 #n=1

def age(n):     if n == 1:         return 18     return age(n-1)+2

print(age(5))

递归的执行分为两个阶段: 1 递推 2 回溯

l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15,[16,[17,]],19]]]]]]]

def search(l):

for item in l:

if type(item) is list:

search(item)

else:

print(item)

search(l)

二分法

l = [1,2,5,7,10,31,44,47,56,99,102,130,240]

def binary_search(l,num):

print(l) #[10, 31]

if len(l) > 1:

mid_index=len(l)//2 #1

if num > l[mid_index]:

#in the right

l=l[mid_index:] #l=[31]

binary_search(l,num)

elif num < l[mid_index]:

#in the left

l=l[:mid_index]

binary_search(l,num)

else:

print(‘find it‘)

else:

if l[0] == num:

print(‘find it‘)

else:

print(‘not exist‘)

return

binary_search(l,32)

======================================================================

软件开发规范: 把一个程序分成各个包并且来互相调用功能: bin、conf、core、log、lib、db

======================================================================

模块与包的使用 import from。。。import

---------------------------------------

导入模块干了哪些事: 1、执行源文件 2、以一个源文件的全局名称空间 3、在当前位置拿到一个模块名,指向2创建的名称空间

from。。。improt 优点:使用源文件内的名字是无需加前缀,使用方便 缺点:容易与当前文件的名字混淆

模块只会在第一次执行时才会导入,之后导入都是直接引用内存里的东西

模块搜索路径: 注意:自定义的模块名一定不要与python自带的模块重名 内存》内置模块》硬盘中

时间: 2024-08-25 05:29:39

携程函数、递归、二分法、import、from。。。import的相关文章

14 内置函数 递归 二分法查找

今日主要内容 1. 昨日补充 repr() 显示出字符串的官方表示形式 chr() ord() 2. 递归 自己调用自己 递归的入口(参数) 和 出口(return) 树形结构的遍历 3. 二分法 掐头结尾取中间 查找效率非常的高 1.递归2.二分法查找 原文地址:https://www.cnblogs.com/work14/p/10209198.html

线程、进程、携程

进程: qq 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等...对各种资源管理的集合 就可以成为 进程 线程: 是操作系统最小的调度单位, 是一串指令的集合(在python中同一时间执行的线程只有一个)python多线程 不适合cpu密集操作型的任务,适合io操作密集型的任务 进程 要操作cpu , 必须要先创建一个线程 ,所有在同一个进程里的线程是共享同一块内存空间的 进程与线程的区别?1.线程共享内存空间,进程的内存是独立的 2.同一个进程的线

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就

python_递归_协程函数(yield关键字)_匿名函数_模块

协程函数(yield) 协程函数:生成器:yield关键字的另一种用法 例:装饰器自动初始化函数(生成器函数)deco 1 yield的语句形式: yield 1 2 #yield的表达式形式: x=yield 3 4 5 6 #协程函数 7 8 def deco(func): 9 def wrapper(*args,**kwargs): 10 res=func(*args,**kwargs) 11 next(res) 12 return res 13 return wrapper 14 15

函数递归与二分法(python3入门)

1 import sys 2 3 print(sys.getrecursionlimit()) # 查询递归保护限制次数 4 5 # 函数递归:在调用函数的过程中又 直接或者间接的调用该函数本身,称之为函数的递归调用 6 7 # 函数递归必须满足: 8 # 1 必须有一个明确的结束条件 9 # 2 每进入下一层递归,问题的规模都应该有所减少 10 11 # 由上述两个条件可以推导出递归应该有两个明确的阶段: 12 # 1 回溯:一层一层的递归调用下去 13 # 2 递推:在某一层结束掉递归,开始

Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法

一. lamda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n**n print(f(10)) lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法: 函数名 = lambda 参数: 返回值 注意: 1. 函数的参数可以有多个. 多个参数之间用逗号隔开 2. 匿名函数不管多复杂. 只能写一行, 且逻辑结束后直接返回数据 3

函数递归,算法二分法

函数的递归 # 函数递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用 # 调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无需调用本身,python解释器的内存管理机制为了防止其无限制占用内存,对函数的递归调用做了最大的层级限制 #查看递归次数上限和修改次数上限 import sys # print(sys.getrecursionlimit()) # 结果不是很精确997次左右 # sys.setrecursionlimit(2000) 参数是上

十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数

一.函数递归: 函数的递归:函数在调用阶段直接或间接的又调用自身 递归分为两个阶段 1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降 直到有一个最终的结束条件 2.递推:一次次往回推导的过程 3.递归函数在运行过程中一定要有出口,否则会无限循环下去 # 1.求4以内的和: def sum_numbers(num): if num == 1: return 1 return num + sum_numbers(num - 1) # 递归特点:函数内部自己调用

【Python 生成器 匿名函数 递归 模块及包的导入 正则re】

一.生成器 1.定义 生成器(generator)是一个特殊的迭代器,它的实现更简单优雅,yield是生成器实现__next__()方法的关键.它作为生成器执行的暂停恢复点,可以对yield表达式进行赋值,也可以将yield表达式的值返回. 也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态. yield的功能: 1.相当于为函数封装好__iter__和__next__ 2.return只能返回一次值,函数就终止了,而yield能返