zoukankan      html  css  js  c++  java
  • 函数的动态传参,命名空间,关键字,函数的嵌套

    day10 函数的动态传参,命名空间,关键字,函数的嵌套

    1.动态参数(形参) : 这个参数是时刻在变化的,动态格式 :   *函数名  = 动态参数, 例如 (* food)

      1>位置参数的动态传参, *args() 可以接收任意的位置参数

        例如 def func(*args)     .................................... 它接受所有位置参数

            print("我喜欢:", args)

          func("宝宝","鲜鲜") ................................... 此时打印的结果(一个元组)就是: 我喜欢:(宝宝,鲜鲜)

      *错误演示* def   func(*args,a,b)   会报错,因为位置参数会全部添加到 *args 中,所有后面的 形参a,b 将会无法接受数据.

      ###动态参数接受数据,必须放在位置参数后面

       def func(a,b,c="宝宝",*args)

       #### 由此可见:默认参数在动态参数前面时,只有一种情况默认值才会发生

      #  位置参数  *args  默认值参数   **kwargs

    2.动态接收关键字参数,用**kwargs 来接收关键字参数.

      2.1> def func(**keargs):

          print(kwargs)

        func(a=1,b=2,c=3)    --------------------------------  最终打印结果{a=1,b=2,c=3}返回是一个字典

    # def chi(good_food, bad_food,drink, ice, jiu):
    # print("我要吃", good_food, bad_food)
    #
    # chi("盖浇饭", "辣条")

    # 位置参数 > *动态参数 > 默认值参数


    # def chi( *food, a, b): # 可以传入任意的位置参数
    # print("我要吃", food) # 动态参数接收到的是tuple类型的数据
    # chi("盖浇饭", "辣条", "面条")


    # 动态接收关键字参数
    # *位置参数
    # **关键字参数
    # def func(**food): # **food动态接收关键字参数
    # print(food) # 接收到的是字典
    # func(good_food="盖浇饭", bad_food="辣条", drink="冰封")


    # 关键字参数一定在位置参数后面
    # 位置参数 > *args > 默认值 > **kwargs

    #----------------- 这个函数可以接收所有的参数(无敌的)
    # def func(*args, **kwargs):
    # print(args)
    # print(kwargs)
    # func(1, 2, 5, 6, name="taibai",age=18, sex="不详")


    # 把列表中的每一个元素作为参数, 传递给函数. 一次都传过去

    def func(*args, **kwargs): # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
    print(args)
    # print(kwargs)
    lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
    func(*lst) # 实参, 打散, 迭代产生的

    # def func(a, b):
    # """
    # 计算a+b的和, 返回一个数
    # :param a: 第一个数
    # :param b: 第二个数
    # :return: 返回计算之后的和
    # """
    # return a + b

    # 定义函数
    # def 函数名(形参): 1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs
    # 函数体 return 返回值
    # 函数名(实参) 1. 位置参数. 2.关键字参数. 3. 混合参数,

    3.命名空间:在我们定义函数和值之间的关系时,会开辟一个内存空间,这个空间就叫做命名空间

      命名空间的分类:

        1> 全局命名空间 --->  我们在.py文件中函数外声明的变量都属于全局命名空间

        2>局部命名空间---->  在函数内部声明的变量就放在局部命名空间

        3>内置函数空间 --->是python解释器中已有的函数命名

      加载顺序: 内置函数空间 -->  全局空间 -->局部命名空间(函数调用的时候)

      取消顺序: 局部命名空间 -->  全局命名空间  --> 内置命名空间

      3.1> 作用域: 就是作用的区域范围,因此分为全局作用域和局部作用域

         全局作用域包括: 全局命名空间 + 内置函数空间

         局部作用域包括: 局部命名空间

      用 globals() 来打印全局作用域的内容, locals() 是用来查看局部作用域中的内容(变量和值之间的关系)

    4.函数的嵌套 

      在函数内部再一次调用其他函数,叫做函数的嵌套

    例如:

    # def func1():
    # print("哈哈")
    # def func2():
    # func1()
    # print("呵呵")
    # func1()
    # func2()

    # 面试进阶题目

    # def func1():
    # print("呵呵")
    # def func2():
    # print("哈哈")
    # func2()
    # print("吼吼")
    # func1() #
    # def func1():
    # print("赵")
    # def func2():
    # print("钱")
    # def func3():
    # print("孙")
    # print("李")
    # def func4():
    # print("哈哈")
    # func2()
    # print("周")
    # func2()
    # func1()
  • 相关阅读:
    0723作业
    Kafka概述与设计原理
    Spring 装配Bean入门级
    logback节点配置详解
    Kafka问题排查(消费者自动关闭)
    .NET委托解析
    .NET可变性解析(协变和逆变)
    .NET泛型解析(下)
    .NET泛型解析(上)
    .NET动态调用WebService
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9513773.html
Copyright © 2011-2022 走看看