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()()()

浙公网安备 33010602011771号