【摘要】40岁辞职学AI的第6天,学完Python函数进阶(默认参数、不定长参数、函数作为参数),分享3个踩坑经验+1个意外发现。
前言
40岁,学AI。
很多人说我疯了,但这个决定我做得很认真。
今天是第6天,学完了Python函数的进阶用法(第65-67课)。 分享一下学习过程和踩的3个坑,希望能帮到同样在自学的小伙伴。
一、默认参数:看似简单,一写就错
先看这段代码:
def reg_stu(name, age, gender=“男”, city=“北京”):
print(f"注册成功, 姓名:{name}, 年龄:{age},性别:{gender}, 城市:{city}") return {“name”: name, “age”: age, “gender”: gender, “city”: city}
调用时可以不传有默认值的参数:
stu = reg_stu(“王林”, 20) # 使用默认值 gender=“男”, city=“北京” stu = reg_stu(“李慕婉”, 18, gender=“女”) # 只覆盖gender
但有个坑:默认参数必须放在没有默认值的参数后面!
错误写法:
def reg_stu(name, gender=“男”, age): # ❌ SyntaxError! pass
正确写法:
def reg_stu(name, age, gender=“男”): # ✅ pass
**二、不定长参数:*args 和kwargs
这是今天最有用的知识点!
*args - 接收不定长的位置参数,封装成元组
def calc_data(*args): min_data = min(args) max_data = max(args) avg_data = sum(args) / len(args) return min_data, max_data, round(avg_data, 1)
data = calc_data(10, 20, 30, 40, 50) # (10, 50, 30.0)
**kwargs - 接收不定长的关键字参数,封装成字典
def calc_data_v2(*args, **kwargs): if kwargs.get(“print”): print(f"最小值:{min(args)}, 最大值:{max(args)}") return min(args), max(args), sum(args)/len(args)
calc_data_v2(2, 7, 9, 10, 45, round=3, print=True)
参数顺序规则(重要!): 位置参数 → 默认参数 → *args → **kwargs
三、函数作为参数:传的是逻辑,不是数据
这个一开始很难理解,直到我写了这个例子:
def add(x, y): return x + y
def multiply(x, y): return x * y
def calc(x, y, oper): # oper接收的是一个函数! return oper(x, y)
result1 = calc(10, 20, add) # 30 result2 = calc(10, 20, multiply) # 200
关键区别:
add → 函数对象,✅可以当参数 add() → 函数调用,❌会报错 “add” → 字符串,❌不能调用
记住:函数名不加括号,括号引号都不行!
四、今天的意外收获:发现了一个bug
课程文档里说 calc_data 函数支持 round 参数控制小数位数。 但我看代码,发现 round(avg_data, 1)是写死的!
也就是说,即传了 round=3,也不会生效。
修复方法:
原来的代码(有bug)
avg_data = round(avg_data, 1) # 写死了
修复后的代码
round_param = kwargs.get(‘round’, 1) avg_data = round(avg_data, round_param)
学编程真的不能只看注释,要看实际执行逻辑!
五、总结:40岁学编程的优势
很多人担心年龄大了学不会。
但今天我发现,我们反而有优势:
今天学的3个知识点,我都整理成了记忆口诀:
默认参数放后面,可变对象别当值; 一颗星元组装,两颗星字典藏; 位置前关键后,顺序千万别反; 函数当参不加号,括号引号都不行!
后记
3年赚1000万的目标听起来疯狂,但我会一步步来。
今天是第6天,函数章节学完了。 明天开始学lambda匿名函数,然后是模块与包。
欢迎关注【小鹿的AI日记】,一起见证40岁宝妈的转行之路!
点击下方名片关注我 ↓↓↓