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

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()

 

posted @ 2018-07-13 20:29  Anna_kc  阅读(174)  评论(0编辑  收藏  举报