函数是Python编程中最重要的概念之一。它们就像是一个个可以重复使用的小工具,每个工具都有自己特定的功能。学会使用函数,能让你的代码更加整洁、高效,也更易于维护。
函数是一段组织好的、可以重复使用的代码,用来完成特定的任务。Python本身提供了很多内置函数,比如我们经常用到的print()。除此之外,我们还可以创建自己的函数,这些叫做自定义函数。
使用函数主要有两个好处:一是让程序结构更清晰,二是避免重复写相同的代码。
定义函数需要遵循几个基本规则:
使用def关键字开头,后面跟着函数名和圆括号
圆括号内可以定义参数
函数的第一行可以写一个文档字符串,用来描述函数的作用
函数内容以冒号开始,并且要缩进
使用return语句返回结果,如果没有return,函数会返回None
基本语法如下:
def 函数名(参数列表):
函数体让我们从一个简单的例子开始:
def hello():
print("Hello World!")
hello()这个函数不需要任何参数,调用它就会输出"Hello World!"。
再看一个带参数的例子:
def max(a, b):
if a > b:
return a
else:
return b
result = max(4, 5)
print(result) # 输出:5这个函数比较两个数字,返回较大的那个。
再来一个计算面积的例子:
def area(width, height):
return width * height
def print_welcome(name):
print("Welcome", name)
print_welcome("fly63")
w = 4
h = 5
print("宽度 =", w, " 高度 =", h, " 面积 =", area(w, h))定义函数后,我们可以在其他函数中调用它,也可以在Python解释器中直接调用。
def printme(str):
print(str)
return
printme("第一次调用函数!")
printme("第二次调用函数!")理解Python中的参数传递很重要。在Python中,变量本身没有类型,类型属于对象。
Python中有两种类型的对象:
不可变对象:数字、字符串、元组
可变对象:列表、字典
对于不可变对象,函数内修改参数值不会影响原始数据:
def change(a):
print("函数内修改前:", a) # 输出:1
a = 10
print("函数内修改后:", a) # 输出:10
a = 1
change(a)
print("函数外:", a) # 输出:1对于可变对象,函数内修改会影响原始数据:
def changeme(mylist):
mylist.append([1,2,3,4])
print("函数内取值:", mylist)
mylist = [10,20,30]
changeme(mylist)
print("函数外取值:", mylist)两个print语句都会显示[10, 20, 30, [1, 2, 3, 4]]。
必需参数必须在调用函数时提供,并且顺序要正确。
def printme(str):
print(str)
return
printme() # 这样调用会报错使用参数名来指定值,这样顺序就不重要了。
def printinfo(name, age):
print("名字:", name)
print("年龄:", age)
printinfo(age=50, name="fly63")可以为参数设置默认值,调用时不传递就使用默认值。
def printinfo(name, age=35):
print("名字:", name)
print("年龄:", age)
printinfo(name="fly63") # age使用默认值35
printinfo(age=50, name="fly63")有时候我们不知道函数会接收多少个参数,这时可以使用不定长参数。
使用*接收元组形式的不定长参数:
def printinfo(arg1, *vartuple):
print("输出:")
print(arg1)
for var in vartuple:
print(var)
printinfo(10)
printinfo(70, 60, 50)使用**接收字典形式的不定长参数:
def printinfo(arg1, **vardict):
print("输出:")
print(arg1)
print(vardict)
printinfo(1, a=2, b=3)Python 3.8引入了新的参数语法,可以强制某些参数必须通过位置传递。
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
# 正确用法
f(10, 20, 30, d=40, e=50, f=60)
# 错误用法
f(10, b=20, c=30, d=40, e=50, f=60) # b不能使用关键字参数
f(10, 20, 30, 40, 50, f=60) # e必须使用关键字参数lambda函数是一种简单的、在一行内定义函数的方式。
基本语法:lambda [参数]: 表达式
x = lambda a: a + 10
print(x(5)) # 输出:15
sum = lambda arg1, arg2: arg1 + arg2
print(sum(10, 20)) # 输出:30lambda函数可以嵌套在其他函数中:
def myfunc(n):
return lambda a: a * n
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(mydoubler(11)) # 输出:22
print(mytripler(11)) # 输出:33return语句用来从函数返回结果。如果没有return语句,或者return后面没有跟表达式,函数会返回None。
def sum(arg1, arg2):
total = arg1 + arg2
print("函数内:", total)
return total
result = sum(10, 20)
print("函数外:", result)好的函数名能让人一眼就知道这个函数是做什么的。
# 不好的命名
def abc(x, y):
return x * y
# 好的命名
def calculate_area(width, height):
return width * height一个函数应该只做一件事情,这样更容易测试和维护。
# 不好的做法:一个函数做多件事情
def process_data_and_save(filename):
# 处理数据...
# 保存文件...
pass
# 好的做法:拆分成多个函数
def process_data(data):
# 处理数据...
return processed_data
def save_to_file(data, filename):
# 保存文件...
pass为函数添加文档字符串,说明函数的作用、参数和返回值。
def calculate_circle_area(radius):
"""
计算圆的面积
参数:
radius -- 圆的半径
返回:
圆的面积
"""
return 3.14159 * radius * radius避免参数过多,如果参数太多,考虑使用字典或类来组织数据。
# 参数太多,不易使用
def create_user(name, age, email, phone, address, city, country):
pass
# 更好的方式
def create_user(user_info):
pass
user_data = {
'name': '张三',
'age': 25,
'email': 'zhangsan@fly63.com'
}
create_user(user_data)# 错误做法
def append_to_list(item, my_list=[]):
my_list.append(item)
return my_list
# 正确做法
def append_to_list(item, my_list=None):
if my_list is None:
my_list = []
my_list.append(item)
return my_list# 不好的做法
def process_data(data):
# 处理数据但没有返回结果
data.sort()
# 好的做法
def process_data(data):
processed_data = data.copy()
processed_data.sort()
return processed_data函数是Python编程的基础构件,掌握函数的使用对写出好代码至关重要。记住这些要点:
使用有意义的函数名
保持函数功能单一
合理设计参数
为函数添加文档说明
理解参数传递的机制
善用各种参数类型
通过不断练习,你会越来越熟练地使用函数,写出更加优雅和高效的Python代码。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!