公司动态
Python函数:定义、参数与返回值
Python函数定义、参数与返回值函数是代码复用的基本单位本篇将学习如何定义函数、各种参数类型以及返回值的使用。一、函数基础1. 为什么需要函数代码复用避免重复编写相同逻辑模块化将复杂程序拆分为小模块便于维护抽象调用者只需知道功能不需了解实现细节2. 定义函数def函数名(参数列表):函数文档字符串函数体return返回值示例defgreet(name):向指定的人打招呼returnf你好{name}# 调用函数print(greet(小明))# 你好小明3. 查看函数文档print(greet.__doc__)# 向指定的人打招呼help(greet)# 查看详细帮助二、参数类型1. 位置参数按顺序传递的参数最基本的形式。defadd(a,b):returnabprint(add(3,5))# 82. 默认参数定义时给参数默认值调用时可省略。defpower(base,exp2):returnbase**expprint(power(3))# 9使用默认exp2print(power(3,3))# 27⚠️重要规则默认参数必须放在位置参数后面。⚠️经典坑默认参数不要用可变对象如列表因为它只初始化一次。# 错误示范defappend_item(item,lst[]):lst.append(item)returnlstprint(append_item(1))# [1]print(append_item(2))# [1, 2] 不是预期的[2]# 正确写法defappend_item(item,lstNone):iflstisNone:lst[]lst.append(item)returnlst3. 关键字参数调用时通过参数名值的形式传递不受顺序限制。defintroduce(name,age,city):print(f我叫{name}今年{age}岁来自{city})introduce(age18,city北京,name小明)# 顺序可以任意4. 可变参数*args收集任意数量的位置参数为元组**kwargs收集任意数量的关键字参数为字典defsum_all(*args):计算所有参数的和returnsum(args)print(sum_all(1,2,3))# 6print(sum_all(1,2,3,4,5))# 15defprint_info(**kwargs):打印所有关键字参数forkey,valueinkwargs.items():print(f{key}:{value})print_info(name小明,age18,city北京)# 输出:# name: 小明# age: 18# city: 北京5. 参数组合参数定义的顺序必须是位置参数 → 默认参数 → *args → 命名关键字参数 → **kwargsdefcomplex_func(a,b,c0,*args,d,**kwargs):print(fa{a}, b{b}, c{c})print(fargs{args})print(fd{d})print(fkwargs{kwargs})complex_func(1,2,3,4,5,d6,e7,f8)# a1, b2, c3# args(4, 5)# d6# kwargs{e: 7, f: 8}三、返回值1. 基本返回值defadd(a,b):returnab resultadd(3,5)print(result)# 82. 返回多个值Python函数可以返回多个值本质是返回元组。defcalculate(a,b):返回和、差、积、商returnab,a-b,a*b,a/b resultcalculate(10,3)print(result)# (13, 7, 30, 3.333...)# 解包接收add_result,sub_result,mul_result,div_resultcalculate(10,3)3. 没有return的函数没有return语句或return后没有值的函数默认返回None。defsay_hello():print(Hello)resultsay_hello()print(result)# None4. 提前返回defget_grade(score):ifscore0orscore100:return无效分数# 提前返回ifscore90:returnAelifscore80:returnBelifscore60:returnCelse:returnD四、变量作用域1. 局部变量与全局变量x10# 全局变量deffunc():x20# 局部变量和全局x是两个不同的变量print(f函数内x {x})func()# 函数内x 20print(f函数外x {x})# 函数外x 102. global关键字在函数内修改全局变量需要用global声明。count0defincrement():globalcount# 声明使用全局变量count1increment()increment()print(count)# 23. LEGB规则Python查找变量的顺序Local局部→Enclosing嵌套函数的外层→Global全局→Built-in内置xglobaldefouter():xenclosingdefinner():xlocalprint(x)# localinner()outer()五、实战常用工具函数集importmathdefis_prime(n):判断是否为素数ifn2:returnFalseforiinrange(2,int(math.sqrt(n))1):ifn%i0:returnFalsereturnTruedeffibonacci(n):生成斐波那契数列前n项ifn0:return[]ifn1:return[0]seq[0,1]for_inrange(2,n):seq.append(seq[-1]seq[-2])returnseqdefbinary_search(arr,target):二分查找返回索引不存在返回-1left,right0,len(arr)-1whileleftright:mid(leftright)//2ifarr[mid]target:returnmidelifarr[mid]target:leftmid1else:rightmid-1return-1# 测试print(is_prime(17))# Trueprint(fibonacci(10))# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]print(binary_search([1,3,5,7,9],7))# 3六、课后练习编写函数判断一个字符串是否为回文字符串正读反读一样编写函数统计字符串中字母、数字、空格和其他字符的个数编写函数实现冒泡排序算法七、小结本篇学习了函数的定义、五种参数类型、返回值以及变量作用域。函数是编程的核心概念掌握好函数能让你的代码更简洁、更易维护。下一篇预告《Python函数进阶可变参数、匿名函数与作用域》本专栏持续更新中欢迎点赞、收藏、关注三连支持