动态传参
# def chi(good_food, good_food1, junk_food, drink, sweet): # print(good_food,good_food1, junk_food, drink, sweet) # # chi("胡辣汤", "烤全羊", "薯条", "奶茶", "圣代") # 动态传参 # *表示动态传参. 可以接受所有的位置参数 # 传参的时候自动的把实参打包成元组 交给形参 # def chi(*food): # print(food) # chi() # 动态传参可以不传参数 # chi(good_food = "胡辣汤") # 关键字传参 # chi("胡辣汤", "疙瘩汤", "西红柿鸡蛋汤") # chi("大猪蹄子","大汉堡","薯条","圣代","雪顶","拿铁") # ** 表示接收关键字的动态传参 # 接收到的内容放在字典里 # def chi(**food): # print(food) # # chi(good_food = "哈哈", junk_food="呵呵", drink="吼吼") # # chi("大猪蹄子","大汉堡","薯条","圣代","雪顶","拿铁") # 顺序 位置 > *args > 默认值参数 > **kwargs # 在以上顺序中可以任意的进行搭配 # 实参: 位置 > 关键字 # 位置, *args, 默认值参数, **kwargs # def chi(a = "男", **kwargs ): # print(a, kwargs) # chi(1, b = "女") # 无敌传参 # 顺序 位置 > *args > 默认值参数 > **kwargs # def func(*args, **kwargs): # print(args, kwargs) # func(1,2,"哈哈",3,4,5,a=6,b=7,c=8,d=9, e=18 ) # lst = ["火腿肠","方便面","有调料包","被捏碎了", "韭菜", "大白菜"] # def chi(*food): # 形参上的* : 动态接收位置参数 # print(food) # # # 把列表中的所有食物传递给chi # chi(*lst) # 把一个列表或者元组或者字符串.打散成参数. 传递给形参 # # dic = {"张无忌":"倚天屠龙记", "乔峰":"天龙八部", "郭靖":"射雕"} # # def da(**kwargs): # 动态传参. 接收关键字参数 # print(kwargs) # # da(张无忌=dic['张无忌']) # da(**dic) # 把字典打散成关键字参数 # *, ** : 在形参: 聚合, 实参: 打散
名称空间和作用域
# 在我们程序运行的时候, 首先 加载的并不是我们的代码 # 先加载的是内置的一些东西 # a = 10 # def chi(): # a = 20 # print(a) # # print(a) # 10 # chi() # 20 # print(a) # 10 # def print(*args): # pass # # print(args) # maximum recursion depth exceeded # # def func(): # print("呵呵") # # func() def chi(): p = 30 print(locals()) # {'p': 30} locals()可以查看局部作用域中的内容 print(p) # chi() print(locals()) # 查看当前作用域中的名字 print(globals()) # a = 10 # 全局 # b = 20 # print(globals()) # 查看全局作用域中(内置+全局)的内容
函数的嵌套
# 一个套一个 def outer(): print("我是outer") # 在函数内部声明的函数, 只能在函数内部访问 def inner(): print('我是inner') inner() print("我是outer_end") outer() # def fun2(): # print(222) # def fun3(): # print(666) # print(444) # fun3() # print(888) # print(33) # fun2() # print(555) # 33 222 444 666 888 555
global和nonlocal
# a = 10 # def func(): # global a # 直接从全局把变量引入进来 # a = 20 # # # # a = 20 # 并没有改变全局变量, 创建了一个自己的变量 # # 全局变量在局部, 可以用, 但是, 不能改 # # a = a + 10 # print(a) # # func() # print(a) # def func(): # global a # 可以创建(升华)一个局部变量为全局变量 # a = 30 # func() # print(a) # nonlocal 在局部, 引入上一层名称空间中的名字. 如果上一层没有, 继续上一层 ..... # def outer(): # a = 10 # def inner(): # nonlocal a # a = 20 # print(a) # print(a) # 10 # inner() # 20 # print(a) # 20 # outer() 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) # 1234331