1. 动态参数
位置参数的动态参数: *args
关键字参数的动态参数 : **kwargs
顺序:
位置,*args,默认值,**kwargs
在形参上*聚合, **聚合
在实参上*打散, **打散
例
# 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(a, b, c, *args, d = 5):
# print(a, b, c, d, args)
#
# func(1,2,3)
# func(1,2,3,4,5,6,7, d ="马大哈")
# def chi(*food):
# print("我要吃", food)
# 写函数. 给函数传递任意个整数. 返回这些数的和
# def he(*n):
# sum = 0
# for e in n:
# sum += e
# return sum
# print(he(5))
# 动态接收关键字参数
# *位置参数
# **关键字参数
# 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) # 实参, 打散, 迭代产生的
#
# dic = {"name":"太白", "alex":"wuse"}
# func(**dic) # 把字典打散. 以key=value形式进行传参
# 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. 混合参数,
2. 命名空间和作用域
命名空间:
1. 内置命名空间: python解释内部运行时的变量函数
2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
3. 局部命名空间: 在函数内部声明的变量和函数.
作用域:
1.全局作用域:内置+全局
2.局部作用域:局部
globals() 查看全局作用域中的名字
locals() 查看当前作用域中的名字
例
# a = "123" # 全局
# b = 36 # 全局
# def func(): # 全局
# c = "马化腾" # 局部
#
# def func2():
# print(c)
a = 10
def func():
a = 20
print(a) # 就近原则
print(globals()) # globals() 获取到全局作用域(内置,全局)中的所有名字
print(locals()) # locals() 查看当前作用域中的所有名字
func()
3. global和nonlocal
global: 把全局变量拿到局部来用.
nonlocal: 把离他最近的一层的变量拿过来.不会找全局
例
# def func():
# global a # a 不再是局部变量. 是全局变量
# a = 30 # 把全局中的a重新赋值成30
# print(a)
# func()
# print(a)
# a = 10
# def func1():
#
# def func2():
# nonlocal a # 找局部作用域中 离他最近的那个变量引入进来
# a = 20
# print(a)
# func2()
# print(a)
# func1()
4.函数的嵌套
例
# def chi():
# print("我要吃")
#
# print(chi())
# 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()