# def test(x) : #形参:不占内存空间,调用函数时传入值,程序完成形参释放内存
# # 注释内容
# # 代码内容
# y = x*2
# print(y)
# # return
# # test(2)
# 4 PS:位置参数必须在定义函数左边,必须一一对应
# 默认参数在定义的时候直接调用函数设置的时候的默认值,而不设置函数的值
# test(x,*args,**kwargs)*args **kwargs可以接收多个参数,*args接收列表,表示为元祖 **kwargs接收字典
# 可以减少重复代码;保持一致性,易维护;可扩展性
###############################################上节课复习#########################################################
########################################局部变量与全局变量#########################################################
# 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
# 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
# 当全局变量与局部变量同名时:
# 在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
# name = 'lhf'#没有任何缩进的就是全局变量,任何情况下都可以调用
# def change_name():
# print('change_name')
# change_name()在子函数过程中定义的变量成为局部变量
# 变量私有化的只能是函数
# global 如果函数的内部无global关键字,优先读取局部变量,读取全局变量,无法重新赋值
# 如果函数中有global关键字,变量本质就是全局的变量,可以读取可以重新赋值
#对于可变对象,可以对内部的全局变量进行元素操作进行任何的内部方法
###########全局变量全部大写###############
###########局部变量全部小写###############
# NAME = '海风'----1
# def huangwei():----3
# name = "黄伟"
# print(name)----4
# def liuyang():----6
# name = "刘洋"
# print(name)----7
# def nulige():----10
# name = '沪指花'
# print(name)---11
# print(name)----8
# nulige()----9
# liuyang()-----5
# print(name)----12
# huangwei()----2
# 黄伟
# 刘洋
# 刘洋
# 沪指花
# 黄伟
#################################################################################################################
##################################前向引用#######################################################################
# def foo():
# print('from foo')
# bar()#未定义该函数,所以运行时报错
# foo()
# def bar():
# print('from bar')
# def foo():
# print('from foo')
# bar()
# #未定义该函数,所以运行时报错
# foo()
#风湿理论:函数即变量
###############################################递归############################################################
# import time
# def calc(n):
# print(n)
# time.sleep(1)
# calc(n)
# calc(10)
# 用栈的方式去保存,递归占用内存导致最终报错
#递归特性:
# 1.需要明确的结束条件(可以设置条件判断return)
# 2.每次进入更深一层时,问题规模相比上次递归应有所减少
# 3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,
# 每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,
# 所以,递归调用的次数过多,会导致栈溢出)
# import time
# person_list = ['alex','wupeiqi','yuanhao','lihaifeng']
# def ask_way(person_list):
# if len(person_list) == 0:
# return '根本没人知道'
# person = person_list.pop(0) # 依次弹出列表中的元素
# if person == 'lihaifeng':
# return '%s说:我认识路'%person
# print('问[%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)
##########################################################################################################