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