zoukankan      html  css  js  c++  java
  • python学习笔记,视频day15-全局变量与局部变量、风湿理论、函数递归

    上节课回顾

    1.函数  

       数学中函数:y=2*x+1

       python中参数:

        def test(x,y,type=None):

          "注释"

          代码块

          return res

        函数名代表内存地址、引用,调用时要加括号

    2.参数

      形参---调用时占内存,不调用时释放内存

    实参--占内存

    位置参数一一对应

    关键字参数

    默认参数

    位置参数在关键字参数左边

    3.

       def test(x,*args,**kwargs):

          "注释"

          代码块

          return res

    4.函数好处:

      减少重复代码

      易维护

      可扩展

    全局变量与局部变量

    • 全局变量:没有任何的缩进,在全局生效的变量
    • 局部变量:子程序中定义的变量
    • 只有函数有私密功能
    • 解释器从上到下运行,遇到函数只编译不执行

        规则:全局变量变量名大写,局部变量吧变量名小写

    global全局变量、nonlocal上一级变量

    name="yangzi"#全局变量
    def change_name():
        name="jinmi"#局部变量
        print("chang_name",name)
    change_name()
    print(name)
    # 结果
    # chang_name jinmi
    # yangzi

     global

      如果函数的内容无global关键字

      优先读取局部变量,无局部变量时,能读取全局变量,无法对全局变量进行赋值;对于可变变量可以对内部元素进行操作

    •   有声明局部变量
    name="yangzi"
    def change_name():
        name="jinmi"
        print("chang_name",name)
    change_name()
    # 结果
    # chang_name jinmi
    •   无声明局部变量
    name="yangzi"
    def change_name():
        print("chang_name",name)
    change_name()
    # 结果
    # chang_name yangzi
    name=["yangzi","jingtian"]
    def change_name():
        name.append("123")
        print("chang_name",name)
    change_name()
    # 结果
    # chang_name yangzi 

      有global关键字,变量本质上就是全局变量,可读取赋值 

    name=["产品经理","qianyue"]
    def change_name():
        global name
        name="jinmi"
        print("chang_name",name)
    change_name()
    print(name)
    # 结果
    # chang_name jinmi
    # jinmi
    NAME  ="海峰"
    def name1():
        name="huang"
        print(name)
        def liuyang():
            name="liuyang"
            print(name)
            def mulige():
                name="huzhihua"
                print(name)
            print(name)
            mulige()
        liuyang()
        print(name)
    
    name1()
    # 结果
    # huang
    # liuyang
    # liuyang
    # huzhihua
    # huang

    #global全局变量
    name ="yangzi" def weihou(): name="chenzhuo" def weiweihou(): global name name="lengjin" weiweihou() print(name) print(name) weihou() print(name) # 结果 # yangzi # chenzhuo # lengjin
    # nonlocal上一级变量
    name ="yangzi"
    def weihou():
        name="chenzhuo"
        def weiweihou():
            nonlocal name
            name="lengjin"
        weiweihou()
        print(name)
    print(name)
    weihou()
    print(name)
    
    # 结果
    # yangzi
    # lengjin
    # yangzi

    风湿理论

    函数即变量
    def foo():
        print("from foo")
        bar()
    def bar():
        print("from bar")
    foo()
    # 结果
    # from foo
    # from bar
    
    def foo():
        print("from foo")
        bar()
    foo()
    def bar():
        print("from bar")
    # 报错

    函数递归(在自己内部调用自己

    函数如何终止===return

    1. 必须有明确的结束条件
    2.  每进行一次递归,问题的规模比上次递归都减少
    3. 效率不高
    def calc(n):
        print(n)
        if int(n/2)==0:
            return n
        res=calc(int(n/2))
    
        return res
    res=calc(10)
    print(res)
    
    # 结果
    # 10
    # 5
    # 2
    # 1
    # 1
    # 问路
    import time
    person_list=["alex","wupeiqi","linhaifeng","zsc"]
    def ask_way(person_list):
        if len(person_list)==0:
            return "无人知晓"#print不会终止,return会终止
        # 针对传的是空列表,所以person_list.pop(0)放在 if len(person_list)==0:后
        person=person_list.pop(0)#一次从列表中弹出一个
        if person=="linhaifeng":
            # return 给wupeiqi
            return "%s知道,直走左拐就是"%person
        print("%s,敢问路在何方"%person)
        print("%s答:我帮你问问%s"%(person,person_list))
        print("__________")
        time.sleep(1)
        res=ask_way(person_list)#上面要有一个明确的返回值
        print("%s问的结果是:%res"%(person,res))
        return res
    res =ask_way(person_list)
    print(res)
    
    # 结果
    # alex,敢问路在何方
    # alex答:我帮你问问['wupeiqi', 'linhaifeng', 'zsc']
    # wupeiqi,敢问路在何方
    # wupeiqi答:我帮你问问['linhaifeng', 'zsc']
    # wupeiqi问的结果是:'linhaifeng知道,直走左拐就是'es
    # alex问的结果是:'linhaifeng知道,直走左拐就是'es
    # linhaifeng知道,直走左拐就是
    # 问路
    import time
    person_list=["alex","wupeiqi","linhaifeng","zsc"]
    def ask_way(person_list):
        if len(person_list)==0:
            return "无人知晓"#print不会终止,return会终止
        # 针对传的是空列表,所以person_list.pop(0)放在 if len(person_list)==0:后
        person=person_list.pop(0)#一次从列表中弹出一个
        if person=="linhaifeng":
            # return 给wupeiqi
            return "%s知道,直走左拐就是"%person
        print("%s,敢问路在何方"%person)
        print("%s答:我帮你问问%s"%(person,person_list))
        print("__________")
        time.sleep(1)
        res=ask_way(person_list)
        # print("%s问的结果是:%res"%(person,res))
        return res
    res=ask_way(person_list)
    print(res)
    
    # 结果
    # alex,敢问路在何方
    # alex答:我帮你问问['wupeiqi', 'linhaifeng', 'zsc']
    # __________
    # wupeiqi,敢问路在何方
    # wupeiqi答:我帮你问问['linhaifeng', 'zsc']
    # __________
    # linhaifeng知道,直走左拐就是
    View Code

     

  • 相关阅读:
    项目总结升级2
    项目总结升级1
    项目总结升级
    项目总结4
    项目总结3
    体温填报app2.0开发
    每日博客
    第一周开课博客
    学习日报
    学习日报
  • 原文地址:https://www.cnblogs.com/ppll/p/11545431.html
Copyright © 2011-2022 走看看