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模块

Python 小栈_09:Python 生成器

python基础-函数_递归_内置函数

python - 为啥必须在递归中使用 return 语句?

15.python变量,递归

Python Day05 python 环境变量和import模块导入