✅函数中不确定参数数量的问题
✅函数作用域
✅匿名函数:lambda 表达式
✅函数嵌套:函数里面套函数
# 定义函数,接收任意数量的数字,返回它们的和def add(*args):"""计算任意多个数字的和"""sum = 0for i in args: # 遍历所有的参数数字sum += i # 对所有参数进行相加操作return sum# 调用函数,可以传任意数量的参数print(add(1, 2)) # 输出:3print(add(1, 2, 3)) # 输出:6print(add(1, 2, 3, 4, 5)) # 输出:15print(add()) # 输出:0(不传参数也可以)
接收任意数量的关键字参数,会打包成字典(可以自定义参数名)
# 定义一个函数,接收任意数量的关键字参数,打印学生信息def st(**kwargs):"""打印学生信息"""print("学生信息:")for key, value in kwargs.items(): # 遍历字典print(f"{key}:{value}")# 调用函数,可以传任意数量的关键字参数st(name="小明", age=15, grade="六年级")print("=" * 10) # 分割一下控制台结果,没有其它作用st(name="小红", age=14, score=95, gender="女")

def demo(a, b=10, *args, **kwargs):print(f"必选参数a:{a}")print(f"默认参数b:{b}")print(f"可变位置参数args:{args}")print(f"可变关键字参数kwargs:{kwargs}")# 调用函数demo(1)print("=" * 10)demo(1, 20, 3, 4, 5, name="小明", age=15)

def j():# x是局部变量,只能在函数内部使用x = 10print(f"函数内部x:{x}")j() # 输出:函数内部x:10# 错误:函数外部无法访问局部变量# print(x) # 报错:NameError
# x是全局变量x = 10def q():# 函数内部可以读取全局变量print(f"函数内部读取x:{x}")q() # 输出:函数内部读取x:10print(f"函数外部x:{x}") # 输出:函数外部x:10
global关键字声明x = 10def f():global x # 声明x是全局变量x = 20 # 修改全局变量print(f"函数内部修改x:{x}")f() # 输出:函数内部修改x:20print(f"函数外部x:{x}") # 输出:函数外部x:20(全局变量被修改了)
lambda关键字定义,适合写简单的、一行就能写完的函数lambda + 参数列表: 表达式# 定义加法匿名函数,赋值给变量addadd = lambda a, b: a + b# 调用匿名函数print(add(1, 2)) # 输出:3print(add(10, 20)) # 输出:30# 相当于于这种函数def add(a, b):return a + b
sorted()、map()等函数# 按列表中字典的age排序st = [{"name": "小明", "age": 15},{"name": "小红", "age": 14},{"name": "小刚", "age": 16}]# 按age升序排序st_sorted = sorted(st, key=lambda x: x["age"])print(st_sorted)
def w():#外层函数print("这是外层函数")def n():#内层函数print("这是内层函数")# 调用内层函数n()# 调用外层函数w()# 错误:外层函数外部无法访问内层函数# inner() # 报错:NameError
nonlocal关键字声明def w():x = 10 # 外层函数的变量def n():nonlocal x # 声明x是外层函数的变量x = 20 # 修改外层函数的变量print(f"内层函数x:{x}")n()print(f"外层函数x:{x}")w()
def d1(*args):"""计算任意多个数的平均值"""if len(args) == 0:return 0t = sum(args)return t/ len(args)# 调用函数print(d1(1, 2, 3)) # 输出:2.0print(d1(10, 20, 30, 40)) # 输出:25.0print(d1()) # 输出:0
import randomdef ps(len=8, inc_s=True):st = "abcdefghijklmnopqrstuvwxyz"sd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"n = "0123456789"s = "!@#$%^&*()"# 基础字符库 组合chars = st + sd + n# 如果包含特殊符号,添加进去if inc_s:chars += s# 随机生成密码password = "".join(random.choice(chars) for _ in range(len))return password# 调用函数print(ps()) # 生成8位包含特殊符号的密码print(ps(len=12)) # 生成12位包含特殊符号的密码print(ps(inc_s=False)) # 生成8位不包含特殊符号的密码
# 按字符串长度排序w = ["apple", "banana", "cherry", "date"]wst= sorted(w, key=lambda x: len(x))print(wst) # 输出:['date', 'apple', 'banana', 'cherry']# 按数字的绝对值排序num = [-5, 3, -2, 7, -1]num1= sorted(num, key=lambda x: abs(x))print(num1) # 输出:[-1, -2, 3, -5, 7]