#全局变量与局部变量,全局变量大写,局部变量小写
NAME='ladfs'        #定义全局变量,全局作用域顶格
def change_name():
    print('change_name',NAME)       #调用全局变量
change_name()
#全局变量与局部变量
NAME='ladfs'        #定义全局变量
def change_name():
    name="高高兴兴地"
    print('change_name',name)       #局部作用域缩进,调用局部变量,只在函数里面生效,不改变全局变量的值
change_name()
print(NAME)
#全局变量与局部变量
NAME='ladfs'        #定义全局变量
def change_name():
    global NAME                    #改变全局变量 ,和下面的name这行不能对调位置
    NAME="高高兴兴地"
    print('change_name',NAME)       #调用局部变量,只在函数里面生效,不改变全局变量的值
change_name()
print(NAME)
#全局变量与局部变量
NAME='开开心心'        #定义全局变量
def change_name1():
    name='嘻嘻哈哈'            #优先读取局部变量,没有则读取全局变量
    print('你调皮',name)       #
change_name1()
def change_name2():
    global NAME                 #声明即将修改全局变量
    NAME='兴高采烈'              #修改全局变量值
    print('你调皮',NAME)
change_name2()
def change_name3():
    name='开心唱歌'                  #
    print('你调皮',name)
change_name3()
NAME=['飞龙在天','见龙在田','潜龙勿用']
def longge():
    NAME.append('亢龙有悔')      #对全局变量进行增加
    print(NAME)
longge()
def longge2():
    print(NAME)                 #全局变量已经用增加之后的
longge2()
#函数嵌套
NAME='天下'                     #1
def zhuhou():
    name ='诸侯'                #3
    print(name)                 #4
    def gelao():
        name="阁老"              #6
        print(name)             #7
        def dacheng():
            name="大臣"          #10
            print(name)         #11
        print(name)             #8
        dacheng()               #9
    gelao()                     #5
    print(name)                 #12
zhuhou()                        #2
name = '互联网'
def wangzhan():
    name = "网站"
    def shoujiwangzhan():
        global name
        name = '自适应'
    shoujiwangzhan()
    print(name)
print(name)
wangzhan()
print(name)
NAME = '互联网'  # 定义全局变量
def wangzhan():
    name = "网站"  # 定义局部变量
    def shoujiwangzhan():
        global NAME  # 声明NAME为全局变量
        NAME = '自适应'  # 修改全局变量的值
    shoujiwangzhan()  # 调用嵌套函数
    print('wangzhan内部:', NAME)  # 打印修改后的全局变量值
# 注意:这里的print将打印全局变量的初始值
print('调用wangzhan之前:', NAME)
wangzhan()  # 调用函数,修改全局变量NAME的值
print('调用wangzhan之后:', NAME)  # 打印修改后的全局变量值
# 下面的print会引发NameError,因为name是wangzhan的局部变量
# print(name)  # 这将引发NameError
name = '互联网'
def wangzhan():
    name = "网站"
    def shoujiwangzhan():
        nonlocal name          #nonlocal:改变上一级的值
        name = '自适应'
    shoujiwangzhan()
    print(name)
print(name)
wangzhan()
print(name)
#风湿理论之函数即变量
#向前引用
def bar():
    print('from bar')
def foo():
    print('from too')
    bar()
foo()
# 定义bar函数
def bar():
    print('from bar')
# 定义foo函数,它调用了bar函数
def foo():
    print('from foo')  # 首先打印from foo
    bar()  # 然后调用bar函数,打印from bar
# 调用foo函数
foo()  # 输出将会是:
# from foo
# from bar
def foo():
    print('from too')
    bar()
def bar():
    print('from bar')
foo()
# 递归调用:在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身
# 递归特性:
# 1. 必须有一个明确的结束条件
# 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
# 3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
def calc(n):
    print(n)
    if int(n/2) ==0:
        return n
    return calc(int(n/2))
calc(10)
# 递归函数示例
import time  # 导入time模块以使用time.sleep函数
person_list = ['guanyu', 'zhangfei', 'zhaoyun', 'zhugeliang', 'liubei']
def ask_way(person_list):
    print('-0' * 60)  # 打印分隔线
    if len(person_list) == 0:
        return '没人去过这个地方'  # 基本情况:如果列表为空,返回特定消息
    person = person_list.pop(0)  # 从列表中移除第一个人名
    if person == 'zhugeliang':
        return '%s告诉你要去的地方在上方谷' % person  # 如果第一个人名是'zhugeliang',返回特定消息
    print('请问将军[%s]要去找粮食怎么样走?' % person)  # 打印询问消息
    print('%s回答道:我不知道,但我可以帮你问问%s...' % (person, ', '.join(person_list)))  # 打印当前询问人和剩余人名列表
    time.sleep(3)  # 暂停3秒以模拟询问过程
    res = ask_way(person_list)  # 递归调用自身以继续询问
    return res  # 返回递归调用的结果
# 调用函数
result = ask_way(person_list)
print(result)  # 打印最终结果
    柳志军:13418977808(手机微信),QQ:93684042
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号