python第十一天

一、局部变量与全局变量

全局变量:无缩进,顶头写
name = "why"

局部变量:有缩进,可以在缩进所属区域调用

def chang_name():
    x = 1
    print("chang_name")
chang_name()

注:

—如果函数的内容无global关键字,有限读取局部变量,只能读取局部变量,无法对全局变量重新赋值

—如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值

 

1、全局变量命令(global)

使用golbal,定义后的变量将改变为后面定义内容,此项不需要顶格无缩进写

name = "why"
#全局变量:无缩进,顶头写
def chang_name():
    global name
    name = "帅哥"
    print("chang_name",name)
chang_name()

2、函数定义后代码运行顺序

name = "海风"   #1
def huangwei():   #2
    name = "黄伟"   #4.1
    print(name,2)   #4.2
    def liuyang():   #4.3
        name = "刘洋"   #4.4.1
        print(name,3)   #4.4.2
        def nulige():   #4.4.3
            name = "陆志华"   #4.4.5.1
            print(name,5)   #4.4.5.2
        print(name,4)   #4.4.4
        nulige()    #4.4.5
    liuyang()   #4.4
    print(name,6)   #4.5
print(name,1)   #3
huangwei()   #4
print(name,7)   #5

二、函数递归

递归的特性

—必须有一个明确的结束条件

—每次进入更深一层递归时,问题规模相比上次递归都应有所减少

—递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会自动加一层栈帧,每当函数返回,栈就会减一层栈帧。优于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

1、递归函数例子

def calc(n):
     print(n)
     if int(n/2) == 0:
         return n
     return calc(int(n/2))
calc(10)

例子2

import time
person_list = ["alex","wupeiqi","yuanhao","linhaifeng","shazi"]
def ask_way(person_list):
    print("-"*60)
    if len(person_list) == 0:
        return "根本没人知道"
    person = person_list.pop(0)
    if person == "linhaifeng":
        return "%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是"%person
    print("hi,美男[%s],敢问路在何方"%person)
    print("%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s"%(person,person_list))
    time.sleep(1)
    res = ask_way(person_list)
    return res
res = ask_way(person_list)
print(res)

 

三、函数

 1、函数的额作用域

def foo():
    name="lhf"
    def bar():
        name = "wpq"
        def tt():
            print(name)
        return tt
    return bar
foo()()()

 

 

posted @ 2024-01-03 23:51  贫道财迷  阅读(7)  评论(0)    收藏  举报