y=2*x+1
def test(x,y,z)
'注释'
代码
return res
test()
局部变量与全局变量
全局变量
顶头写的
局部变量
子程序中定义的变量
nam='sb'
def change():
nam="dog"
print(nam)
change()
print(nam)
#结果
dog
sb
nam='sb'
def change():
global name
nam="dog"
print(nam)
change()
print(nam)
如果函数的内容无global关键字,优先读取局部变量,无法对全局变量重新赋值,
但是对可变对象,可以对内部元素进行操作
如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值
全局变量名大写
局部变量名小写
name='gangniang'
def weihou():
name='chengzhuo'
def weiweihou():
global name
name='lengjing'
weiweihou()
print(name)
print(name)
weihou()
print(name)
#结果
gangniang
chengzhuo
lengjing
name='gangniang'
def weihou():
name='chengzhuo'
def weiweihou():
nonlocal name #上一级变量
name='lengjing'
weiweihou()
print(name)
print(name)
weihou()
print(name)
#结果
def foo()
print("from foo")
bar()
foo() #有问题
def bar():
print('bar')
def foo()
print("from foo")
bar()
foo() #没问题
def foo()
print("from foo")
bar()
def bar():
print('bar')
foo() #没问题
def foo()
print("from foo")
bar()
foo()
def bar():
print('bar') # 有问题
风湿理论:函数即变量
递归
def calc(n):
print(n)
calc(n)
calc(10) #死循环
def calc(n):
print(n)
if int(n/2)==0:
return n
res=cal(int(n/2))
return res
calc(10)
递归特性:
必须有一个明确的结束条件
每次进入更深层次递归,问题规模比上一次递归有所减少
递归效率不高,递归层次过多会导致栈溢出
person_list=['alex','wupeiqi','yuanhao','linhaifeng','zsc']
def ask_way(person_list):
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))
res=ask_way(person_list)
print('%s问的结果是:%s' %(person,res))
return res
res=ask_way(person_list)
print(res)
2018-08-18