标签:斐波那契数 span 元组 文件 停止 bin 输入 ima http
只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先给实参赋值
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定了参数名的参数就叫关键参数),但记住一个要求就是,关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后
每个函数里的变量是互相独立的,变量的查找顺序也是从当前层依次往上层找。
#这段代码 def calc(x,y): return x**y print(calc(2,5)) #换成匿名函数 calc = lambda x,y:x**y print(calc(2,5))
在函数内部,可以调用其他函数。如果一个函数在内部调用自已本身,这个函数就叫做递归函数。
应用举例:用递归实现2分查找的算法,以从列表 a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107] 查找指定的值。
a = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69, 107] def binary_search(start,end,n,d_list): mid = int((end+start)/2) print("当前中间位置:%s;数字是%s"%(mid,d_list[mid])) if start < end: if d_list[mid] < n: print("往右边找") binary_search(mid+1,end,n,d_list) elif d_list[mid] > n: print("往左边找") binary_search(start,mid,n,d_list) else: print("找到了,数字%s的位置是%s"%(n,mid)) else: print("没有找到指定的数 %s"%(n)) binary_search(0,len(a),22,a)
名称空间就是存放名字的地方。举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方
locals -> enclosing function -> globals ->builtins。
# -*- encoding:utf-8 -*- import time def timer(func): def wrapper(*args,**kwargs): start_time = time.time() print("start_time:",start_time) res = func(*args,**kwargs) end_time = time.time() print("end_time:",end_time) print("run time is %s"%(end_time-start_time)) return res return wrapper @timer # 相当于执行了foo=timer(foo) def foo(a): time.sleep(3) print(a) print("from foo") foo("a-a")
import time def timer2(b): def timer(func): def wrapper(*args,**kwargs): start_time = time.time() print("start_time:",start_time) print(b) res = func(*args,**kwargs) end_time = time.time() print("end_time:",end_time) print("run time is %s"%(end_time-start_time)) return res return wrapper return timer @timer2("b-b") # 相当于执行了foo=timer(foo);和上面的例子相比,这边多了参数 def foo(a): time.sleep(3) print(a) print("from foo") foo("a-a")
一边循环一边计算后面元素的机制,称为生成器:generator。
def fib(n): a = 0 b = 1 i = 0 while i < n: yield b # 暂停,return tmp = a a = b b = tmp + b i += 1 f = fib(10) print(type(f)) print(f.__next__()) for i in f: print("i--",i)
函数生成器接受外部参数;利用生成器实现单线程多并发的例子,包子的故事
def consumer(name): print("消费者%s准备吃包子"%name) while True: baozi = yield #接受外部的参数 print("消费者%s收到包子编号:%s"%(name,baozi)) c1 = consumer("c1") c2 = consumer("c2") c3 = consumer("c3") c1.__next__() c2.__next__() c3.__next__() for i in range(10): print("----生成第%s批包子----"%i) c1.send(i) c2.send(i) c3.send(i)
标签:斐波那契数 span 元组 文件 停止 bin 输入 ima http
原文地址:https://www.cnblogs.com/wiaowupy/p/12254460.html