python之路--动态传参,作用域,函数嵌套

一 . 动态传参(重点)  * ,  **

  * 与 **

* 在形参位置. * 表示不定参数, 接收的是位置参数
接收到的位置参数的动态传参: 都是元组
def eat(*food): # 在形参这里把传递过来的实参进行了聚合,聚合成了元组
print(food)
eat("小米粥")
eat("小米粥", "咸鸭蛋")
eat("小米粥", "爆米花", "咸鸭蛋", "蒜茄子")
**在形参表示动态传参-关键字参数
关键字动态传参接收到的是字典
def func(**kwargs): # 也是聚合. ** 聚合成字典
print(kwargs)
func(a=1, b=2, c=3, haha="呵呵", good="not bad")

  无敌传参

# 无敌传参
def func(*args, **kwargs): # 参数没有限制. 随便传递
print(args)
print(kwargs)
func(1,2,3,4, a=3,b=5)

  聚合与打散

def chi(*food):  # 这里是形参  聚合
print(food)
lst = ["胡萝卜", "大白菜", "大萝卜", "草", "果冻"] # 这里要输入列表或元组
chi(*lst) # 这里的*是打散 形成元组 def chi(**food): # 聚合, 聚合成字典
print(food)
dic = {"主食":'面条', "副食":"土豆泥", "汤":"疙瘩汤"} # 这里要输入字典
chi(**dic, 甜点="冰激凌") # 打散. 打散成关键字, 甜点 = '冰激凌' 可加可不加 # * 与 ** 放在形参是聚合, 放在实参是打散

  传参顺序

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

二 . 作用域与名称空间

名称空间顾名思义就是装名称的,比如我定义一个a = 10,那么这个a 所在的空间就是名称空间
作用域可以理解为起作用的区域,全局作用域就是在全局都起作用的,是内置+全局名称空间, print , input 就是内置,局部作用域就是在局部起作用的区域.   globals() 查看全局作用域
locals() 查看当前作用域

三 . 函数的嵌套

  函数的嵌套: 在函数中声明函数

    函在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置 

def outer():
def inner():
print("我的天哪")
print("还可以这样写???")
inner()
outer()

四 . nonlocal 和 global关键字

  global: 在局部引入全局变量

  nonlocal: 在局部..内层函数引入外层理他最近的那个变量

# 全局变量一般是不能随意的修改的
a = 10
def func():
# 慎用.
global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在试图改全局变量
print("里面的打印",a)
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)

  

  

上一篇:JavaScript按纯数字排序


下一篇:WebRTC for UWP