python开发学习 day15-python函数

全局变量和局部变量

# name='lhf'
#
#
# def change_name():
#   global name
#   name='帅了一比'
#   print('change_name',name)
#
#
# change_name()
# print(name)

# name='lhf'
#
# def change_name():
#   name1='帅了一比'
#    name2='帅了一比'
#    name3='帅了一比'
#    print('change_name',name)

# globals

# NAME = "杠娘"
#
# def yangjian():
#    # NAME = "史正文"
#   global NAME
#    NAME = "小东北"
#    print('我要搞', NAME)
#
# def qupengfei():
#    # NAME = "基"
#    print('我要搞', NAME)
#
# yangjian()
# qupengfei()


# NAME = "产品经理"
#
# def yangjian():
#    # NAME = "史正文"
#   global NAME # 已经声明,NAME就是全局的的那个变量
#    print('我要搞', NAME)
#    NAME = "小东北" # 修改 全局的变量
#    print('我要搞', NAME)
#
# def qupengfei():
#    NAME = "基"
#    print('我要搞', NAME)

# 如果函数的内容无global关键字,
# - 有声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#    NAME = "自己"
#    print('我要搞', NAME)
# qupengfei()


# - 无声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#    NAME.append('XXOO')
#    print('我要搞', NAME)
# qupengfei()

 

# 如果函数的内容有global关键字
# - 有声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#    global NAME
#    NAME = "自己"
#    print('我要搞', NAME)
# qupengfei()
# 错误示例
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#    NAME = "自己"
#    global NAME
#    print('我要搞', NAME)
# qupengfei()


# - 无声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#    global NAME
#    NAME = ["阿毛"]
#    NAME.append('XXOO')
#    print('我要搞', NAME)
# qupengfei()

######## 全局变量变量名大写
######## 局部变量变量名小写


# 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
# 但是对于可变类型,可以对内部元素进行操作
# 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”
# qupengfei()
# yangjian()


# NAME = ["产品经理","廖波湿"]
#
# def yangjian():
#    # NAME = "史正文"
#    global NAME # 已经声明,NAME就是全局的的那个变量
#    print('我要搞', NAME)
#   NAME = "小东北" # 修改 全局的变量
#    print('我要搞', NAME)
#
# def qupengfei():
# # NAME = "aS"
#    NAME.append('天扎龙')
#    print('我要搞', NAME)
#
# qupengfei()


# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   name = "自己"
#   global NAME
#    print('我要搞', NAME)
# qupengfei()

# NAME = '海风'
#
# def huangwei():
#    name = "黄伟"
#    print(name)
#    def liuyang():
#      name = "刘洋"
#      print(name)
#       def nulige():
#          name = '沪指花'
#          print(name)
#       print(name)
#       nulige()
#   liuyang()
#     print(name)
#
# huangwei()

name = "刚娘"

def weihou():
  name = "陈卓"
def weiweihou():
  nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
  name = "冷静"

weiweihou()
print(name)

print(name)
weihou()
print(name)
# 刚娘
# 冷静
# 刚娘

 

递归

 一层一层往下走

递归的特性

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(计算机中,函数是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会见一层栈帧。由于栈的大小不是无限的,所以递归函数调用的次数过多,会导致栈溢出)

 

# def calc(n):
#   print(n)
#     if int(n / 2) == 0:
#   return n
# res=calc(int(n / 2))
# return res
#
#
# res=calc(10)
# print(res)

# while True:
#    print(10)
#
# import time
#
# person_list=['alex','wupeiqi','linhaifeng','zsc']
# 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(100)
#   res=ask_way(person_list)
#   print('%s问的结果是: %res' %(person,res))
#   return res
#
# res=ask_way(person_list)
# print(res)
# 我 来英 杨建 是征文
# res等沙河 res等沙河 res等 沙河 return ‘沙河’
# print printres


import time
res=time.sleep(100)
print('----------->')

 

 前向引用

 引用定义在前面

# def foo():
#    print('from foo')
#    bar()
#
# foo()

# def bar():
#    print('from bar')
# def foo():
#    print('from foo')
#    bar()
#
# foo()

 

# def foo():
#    print('from foo')
#    bar()
#
# def bar():
#    print('from bar')
#    foo()

def foo():
  print('from foo')
  bar()

foo()

def bar():
  print('from bar')

 

posted @ 2018-09-02 16:19  apoorgod  阅读(68)  评论(0)    收藏  举报