zoukankan      html  css  js  c++  java
  • day 10 函数的进阶

    动态传参 (重点)  *    **
    形参
     * args在形参位置, *表示不定参数--接受的是位置参数
      接受到的位置参数的动态传参:  都是元组
    形参的顺序:
    位置  *args 默认值  **kwargs   以后写参数,可以随意的进行搭配
    def chi(zhushi, cai, fushi, tang, tiandian):
        print(zhushi,cai,fushi,tang,tiandian)
     
     
    chi("大碗大米饭", "火爆大头菜", "把子肉", "西红柿鸡蛋汤", "烤地瓜")
    chi("小碗大米饭", "火爆大头菜") # 参数不够
     
    形参的顺序(重点):
      位置  *args  默认值  **kwargs
    以后写参数. 可以随意的进行搭配, 但是, 顺序不能串
    **kwargs在形参表示动态传参--关键字参数,关键字动态传参接收到的是字典
    **在形参表示动态传参-关键字参数
    关键字动态传参接收到的是字典
    def func(**kwargs):  # 也是聚合. ** 聚合成字典
        print(kwargs)
     
    # func(1,2,3,4,5,6,7) # 位置参数. 报错
    func(a=1, b=2, c=3, haha="呵呵", good="not bad")
    实参
    *在实参的是打散,把列表,元组,字符串打散成位置参数进行传递
    ** 在形参表示动态传参--关键字参数;打散,打散成关键字
    关于*和**
        形参:   聚合
                  位置参数*   ->元组
                  关键字**   ->  字典
        实参:   打散
                  列表,字符串,元素   ->  *
                  字典         ->**
    无敌传参
    def func(*args, **kwargs): arguments参数  keyword-arguments关键字参数
                pass
    作用域(重要)和名称空间
    名称空间:用来存放名字(变量,函数名,类名,引入的模块)的
    1.全局名称空间:我们在py文件中自己写的变量, 函数.....
    2.内置名称空间; 我们python解释器提供好的一些内置内容  (print,input..........)
    3.局部名称空间: 在我们执行函数的时候,会产生一个局部名称空间.放的是:函数内部的内容
    名称空间可能会有无数个,对于局部名称空间.相对是独立的,一般互不干扰
    作用域:
    1.全局作用域:  内置+全局
    2.局部作用域:   局部
    从全局找局部-> 找不到
    从局部找全局-> 可以找到
    怎么查看全局或局部中的内容:
      globals  全局作用域: 内置+全局名称空间
      locals  查看当前作用域的内容
    def chi():
        a = 20
        b = 30
        print(locals()) # 查看当前作用域中的内容
        print(globals()) # alex,老男孩儿, 武sir, 全局作用域中的内容
    chi()
    print(locals()) # 全局
    print(globals()) # 全局
    函数的嵌套
    nonlocal和global   关键字(重点)
    global  表示从全局把一个变量引入局部,后面使用的都是全局变量
    nonlocal   在局部,寻找离他最近的外层的一个变量
    如果没有global和nonlocal  ,查找的顺序:自己,上一层,上一层,上一层
    函数的互相调用
    def func1():
        print("我是神器的func1")
     
    def func2():
        func1()
        print("我是神器的func2")
     
    def func3():
        print("我是神器的func3")
        # func5()
     
    def func4():
        func3()
        print("我是神器的func4")
     
    def func5():
        func2()
        func3()
        print("我是神器的func5")
     
    def func6():
        func5()
        print("我是神器的func6")
        func3()
        func1()
     
    func6()
    def outer():
        def inner():
            print("我的天哪")
        print("还可以这样写???")
        inner()
     
    outer()
     
    inner() # 在全局不能找到局部的内容
     
    def func1():
        print("1")
        def func2():
            print("2")
            def func3():
                print("3")
            print("4")
            func3()
            print(5)
        print("6")
        func2()
        print("7")
     
    func1()
     
     
    全局变量一般是不能随意的修改的
    a = 10
    def func():
        # 慎用.
        global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
        a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
        print("里面的打印",a)
    func()
    print("外面的打印", a)
     
     
    a = 10
    def func():
        def inner():
            # 慎用.
            global a  # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
            a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在视图改全局变量
            print("里面的打印",a)
        inner()
    func()
    print("外面的打印", a)
     
    nonlocal  在局部, 寻找离他最近的外层的一个变量
    a = 50
    def func1():
        # a = 10 # 局部
        def func2():
            nonlocal a # 不找全局, global找全局
            a += 10 # a = a + 10 python不让这么干
            print("func2", a)
        func2()
        print(a)
    func1()
    print(a)
     
    如果没有nonlocal和global 查找的顺序: 自己, 上一层, 上一层, 上一层
     
    def func0():
        a = 50
        def func1():
            a = 10 # 局部
            def func2():
                nonlocal a # 不找全局, global找全局
                a += 10 # a = a + 10 python不让这么干
                print("func2", a)
            func2()
            print(a)
        func1()
        print(a)
    func0()
     
     
    a = 1
    def fun_1():
        a = 2
        def fun_2():
            nonlocal a
            a = 3
            def fun_3():
                a = 4
                print(a)
            print(a)
            fun_3()
            print(a)
        print(a)
        fun_2()
        print(a)
    print(a)
    fun_1()
    print(a)
     
    flag = False
     
    def login():
        global flag
        uname = input("用户名:")
        upwd = input("密码:")
        if uname == "alex" and upwd == "123":
            flag = True
        else:
            flag = False
     
    def fatie():
        if flag == True:
            print("可以发帖")
        else:
            print("滚去登录")
     
    login()
     
    fatie()
    fatie()
    fatie()
    fatie()
     
  • 相关阅读:
    26个高效工作的小技巧 z
    DevExpress控件水印文字提示 z
    c#枚举自定义,用于数据绑定。 z
    WeifenLuo.WinFormsUI.Docking"的使用 z
    解决 winform 界面对不齐 z
    WCF服务通过防火墙怎么设置
    Auto Updating the exe from a network location when application starts z
    怎样学法学?——民法学泰斗王利明教授的演讲 z
    JAVA常见算法题(十八)
    JAVA常见算法题(十七)
  • 原文地址:https://www.cnblogs.com/yanghongtao/p/10099090.html
Copyright © 2011-2022 走看看