Python 小栈_05:Python 变量和递归函数
Posted 211293dlam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 小栈_05:Python 变量和递归函数相关的知识,希望对你有一定的参考价值。
今日学习:python函数变量和递归函数
一、全局变量和局部变量
全局变量:没有缩进,在顶头的变量。一般用大写字母表示
局部变量:在子程序中定义的变量。一般用小写字母表示
当全局变量与局部变量同名时:
global +变量名:表示引用和读取全局变量。
nonlocal +变量名:表示引用和读取局部变量。
NAME = "apple" def taxt(): name="banana" print(name) def num(): global NAME NAME = "cat" num() print(NAME) taxt() print(NAME)
>>> apple
banana
cat
补充:
1.若函数内部无关键字(global),则优先读取局部变量,没有再读取全局变量,且无法对全局变量重新赋值,对于全局变量为可变类型(即元祖、字典)时,则可以对内部元素进行改增删。
2.若函数内部有关键字(global),则本质上就是调用了全局那个变量,可读取可修改。
3.在读取变量时,优先在自己的作用域中寻找,没有再往后一层层找。
二、风湿理论:函数即变量
函数其实就相当于把里面的函数体当做一个个字符存放在内存中,需要调用函数时再进入这段存储函数的内存中存取出来,内部有嵌套就一一往内读取,再往外一层层return回值。
def foo(a): print("apple")
coo() def coo(b) print(2) foo()
三、递归函数
函数自己调用自己的函数名就叫递归.
特性:1、必须要有一个明确的结束条件(用return);
2、每进入深一层递归时,问题规模相比上次递归都应有所减少;
3、效率不高,递归层次过多会导致栈溢出(内存撑爆)。
def calc(n): print(n) if int(n/2)==0: return n return calc(int(n/2)) calc(10)
>>> 10
5
2
1
示例:问路
import time list=["apple","banana","cat","dog") def like(list): print("-"*60) if len(list)==0: print("没人知道") li=list.pop(0) if li=="cat": print("%s说:我知道路在哪,在莱茵湖边"%li) print("hi,%s,你知道路在哪里吗"%li) print("%s说,我不知道,我帮你问问%s"%(li,list)) time.sleep(5) res=like(list) return res res=like(list) print(res)
>>>
----------------------------------------
hi,apple,请问你知道路往哪走吗
apple回答说:不知道,我帮你问问[‘banana‘, ‘cat‘, ‘dog‘]
----------------------------------------
hi,banana,请问你知道路往哪走吗
banana回答说:不知道,我帮你问问[‘cat‘, ‘dog‘]
----------------------------------------
cat说,我知道在哪里,在莱茵湖边
练习&复习
1、有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {‘k1‘: 大于66的所有值, ‘k2‘: 小于66的所有值}
a = [11,22,33,44,55,66,77,88,99,90] b = {"key1":[],"key2":[]} for i in a: if i>=66: b["key1"].append(i) elif i<66: b["key2"].append(i) print(b)
2、查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。
li = ["alec", " aric", "Alex", "Tony", "rain"] tu = ("alec", " aric", "Alex", "Tony", "rain") dic = {‘k1‘: "alex", ‘k2‘: ‘a ric‘, "k3": "Alex", "k4": "Tony"} for a in range(len(li)): li[a]=li[a].replace(" ","") print(li) tu = list(tu) for b in range(len(tu)): tu[b]=tu[b].replace(" ","") tu = tuple(tu) print(tu) for c in dic: dic[c]=dic[c].replace(" ","") print(dic) for a1 in li: if (a1.startswith("a") or a1.startswith("A")) and a1.endswith("c"): print(a1) for b1 in tu: if (b1.startswith("a") or b1.startswith("A")) and b1.endswith("c"): print(b1) for c1 in dic: c2=dic[c1] if (c2.startswith("a") or c2.startswith("A")) and c2.endswith("c"): print(c2)
3、商品
a = ["手机", "电脑", ‘鼠标垫‘, ‘游艇‘]
for i,a1 in enumerate(a,1): print(i,a1) b=input("请输入商品编号") b1=int(b) print(a[b-1])
以上。
以上是关于Python 小栈_05:Python 变量和递归函数的主要内容,如果未能解决你的问题,请参考以下文章
Python 小栈_13:Python ossysxmljsonpickle模块