day15

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

 

posted @ 2018-08-18 14:38  漫语慢蜗牛  阅读(193)  评论(0编辑  收藏  举报