me)
huangwei()
def weihou():
name = "陈卓"
def weiweihou():
global name
name = "冷静"
weiweihou()
print(name)
print(name)
weihou()
print(name)
输出结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
刚娘
陈卓
冷静
代码运行示例图:
使用nonlocal 指定上一级变量
name = "刚娘"
def weihou():
name = "陈卓"
def weiweihou():
nonlocal name #nonlocal,指定上一级变量
name = "冷静"
weiweihou()
print(name)
print(name)
weihou()
print(name)
运行结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
刚娘
冷静
刚娘
四、递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身
def calc(n):
print(n)
if int(n/2) == 0:
return n
return calc(int(n/2))
calc(10)
输出结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
10
5
2
1
__author__ = 'zhurui'
import time
person_list=['zhurui','caiyunjie','yuanhao','simon','william','zcz']
def ask_way(person_list):
print('-'*60)
if len(person_list) == 0:
return '没人知道'
person=person_list.pop(0)
if person == 'simon':
return '%s说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是' %person
print('hi 美男[%s],敢问路在何方' % person)
print('%s回答道:我不知道,但你慧眼识珠,我去帮你问问%s...' % (person,person_list) )
time.sleep(3)
res = ask_way(person_list)
print('%s问的结果是: %res' %(person,res))
return res
res = ask_way(person_list)
print(res)
运行结果如下:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
------------------------------------------------------------
hi 美男[zhurui],敢问路在何方
zhurui回答道:我不知道,但你慧眼识珠,我去帮你问问['caiyunjie', 'yuanhao', 'simon', 'william', 'zcz']...
------------------------------------------------------------
hi 美男[caiyunjie],敢问路在何方
caiyunjie回答道:我不知道,但你慧眼识珠,我去帮你问问['yuanhao', 'simon', 'william', 'zcz']...
------------------------------------------------------------
hi 美男[yuanhao],敢问路在何方
yuanhao回答道:我不知道,但你慧眼识珠,我去帮你问问['simon', 'william', 'zcz']...
------------------------------------------------------------
yuanhao问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
caiyunjie问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
zhurui问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是
Process finished with exit code 0
递归特性:
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
五、作用域
示例代码如下:
#1、作用域即范围
- 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效
- 局部范围(局部名称空间属于该范围):临时存活,局部有效 #2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下 x = 1 def f1(): def f2(): print(x) return f2 x = 100 def f3(func): x=2 func() x = 10000 f3(f1()) 结果: C:\Python35\python3.exe G:/python_s3/day16/作用域.py 10000 #3、查看作用域:globals(),locals() LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__ locals 是函数内的名字空间,包括局部变量和形参 enclosing 外部嵌套函数的名字空间(闭包中常见) globals 全局变量,函数定义所在模块的名字空间 builtins 内置模块的名字空间
六、匿名函数
代码如下:
#1、 代码方式一
def calc(x):
return x+1 res = calc(10) print(res) 输出结果为: C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py 11 #2、用lambda方式表达 print (lambda x:x+1) #代表单纯的输出内存地址 func=lambda x:x+1 print (func(10)) 输出结果为: <function <lambda> at 0x00000000006EE0D0> 11