Day4 Python的函数和参数机制
函数的定义与调用最基本的函数结构如下def greet(name): return fHello, {name}! print(greet(Alice))def定义函数调用时传入对应参数如果参数数量或顺序不匹配就会报错这是最常见的问题之一。默认参数默认参数的作用是让函数调用更灵活同时减少重复传参。def greet(name, prefixHello): return f{prefix}, {name}! print(greet(Alice)) # Hello, Alice! print(greet(Alice, Hi)) # Hi, Alice!默认参数的规则是必须放在普通参数后面调用时可以选择是否覆盖默认参数的“坑”直接看例子def append_item(item, lst[]): lst.append(item) return lst print(append_item(1)) # [1] print(append_item(2)) # [1, 2]很多人以为第二次会返回[2]但结果是[1, 2]。原因是默认参数只在函数定义时创建一次。正确写法是def append_item(item, lstNone): if lst is None: lst [] lst.append(item) return lst可变参数 *args、**kwargs当参数数量不固定时就需要用到可变参数。*args接收位置参数先看一个例子def func(*args): print(args) print(type(args)) func(1, 2, 3) # (1, 2, 3) # class tupleargs本质是一个元组即Python会把所有位置参数收集起来按顺序打包成一个元组相当于在函数内部args (1, 2, 3)。def add(a, b, c): return a b c nums (1, 2, 3) print(add(*nums)) # 等价于 add(1, 2, 3)在函数调用时*的作用是把一个可迭代对象拆成多个位置参数。*解包不仅限于元组只要是可迭代对象list、tuple、甚至字符串都可以。num (1,2,3,4,5) print(*num) # 1 2 3 4 5 # ---- def show(a, b, c): print(a, b, c) show(*abc) # a b c**kwargs接收关键字参数同样我们先来看一个例子def show_info(**kwargs): print(kwargs) print(type(kwargs)) show_info(nameAlice, age20) # {name: Alice, age: 20} # class dict**kwargs在函数内部其实就是一个字典dict。调用时传入的所有关键字参数都会被收集到这个字典里。在函数调用时**的作用是把一个字典拆开变成多个关键字参数传给函数。例如def connect(host, port): print(host, port) config { host: localhost, port: 3306 } connect(**config) # localhost 3306相当于执行了 connect(hostlocalhost, port3306)注意字典的 key 必须和函数参数名一致否则会报错。回调函数函数在 Python可以作为参数传递称为回调函数。回调函数本身不复杂但是有一些细节需要注意。回调要传函数不要加括号直接来看一个例子def apply(func): return func() def say_hi(): print(hi) apply(say_hi()) # ❌ 错误写法这段代码的问题在于say_hi()在传参之前就已经执行了传进去的是返回值这里是None。正确写法应该是直接传函数本身不要加括号。正确写法是apply(say_hi)。回调函数的参数要匹配def add(a, b): return a b def apply(func): return func(10) apply(add) # ❌ 报错apply只传了一个参数但add需要两个。要么修改add为只有一个参数的函数要么lambda来适配参数即apply(lambda x: add(x, 5))。lambda是一个轻量级的匿名函数写法适合在需要函数的地方快速写一个“一次性的小逻辑”。lambda的结构为lambda 参数: 返回值。例如def add(x, y): return x y # 用 lambda 写 add lambda x, y: x ylambda常用于回调函数可以作为传入函数的参数。但lambda并不是def的完全替代它有明显限制1只能写一行表达式2不能写复杂的逻辑例如多行代码、循环、复杂判断回调参数的应用场景1排序最常见data [apple, banana, cherry] print(sorted(data, keylen))这里keylen就是回调函数意思是按照字符串长度排序。2简单策略切换def process(x, func): return func(x) print(process(10, lambda x: x * 2)) print(process(10, lambda x: x 5))不同逻辑通过不同回调实现。3) 事件 / 异步在一些框架中如 GUI、网络请求回调用于“某个事件发生后执行”。例如伪代码button.on_click(handle_click)点击按钮时才执行handle_click总结这篇文章系统讲解了Python函数参数机制涵盖基础定义、默认参数、可变参数*args和**kwargs的使用与解包技巧以及回调函数的正确传参方式和应用场景。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2465703.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!