1. 定义一个函数
可以根据自己的需求定义函数。以下是定义函数的基本规则:
函数代码块以 def 关键字开头,后跟函数名和圆括号 ()。
任何传入的参数和自变量必须放在圆括号内。
函数的第一行语句可以选择性地使用文档字符串(docstring)来说明函数的功能。
函数体从冒号 : 开始,并且必须缩进。
return [表达式] 语句用于退出函数并返回一个值给调用方。不带表达式的 return 相当于返回 None。
🌈语法:
def 函数名(参数列表): """函数文档字符串(可选)""" # 函数体 return [表达式] # 可选
实例 1:定义一个简单的问候函数
以下函数接收一个名字作为参数,并打印一句问候语。
def greet(name): """接收一个名字,打印问候语""" print(f"你好,{name}!欢迎学习Python函数。")# 调用函数greet("小明")greet("小红")
以上实例输出结果:
你好,小明!欢迎学习Python函数。你好,小红!欢迎学习Python函数。
实例 2:带返回值的函数 - 计算矩形面积
def rectangle_area(length, width): """计算并返回矩形的面积""" area = length * width return area# 调用函数l = 10w = 5print(f"长为{l},宽为{w}的矩形面积是:{rectangle_area(l, w)}")length2 = 7.5width2 = 3.2area2 = rectangle_area(length2, width2)print(f"长为{length2},宽为{width2}的矩形面积是:{area2}")
以上实例输出结果:
长为10,宽为5的矩形面积是:50长为7.5,宽为3.2的矩形面积是:24.0
实例 3:判断一个数是否为偶数
def is_even(num): """如果数字是偶数,返回True;否则返回False""" if num % 2 == 0: return True else: return False# 测试函数numbers = [10, 15, 22, 37]for n in numbers: if is_even(n): print(f"{n} 是偶数") else: print(f"{n} 是奇数")
以上实例输出结果:
2. 函数调用
定义一个函数后,你可以通过另一个函数调用它,或者直接从 Python 提示符执行。
💭实例:在另一个函数中调用函数
def get_square(x): """返回一个数的平方""" return x * xdef print_squares_up_to(n): """打印从1到n(包含n)的所有整数的平方""" print(f"1到{n}的平方:") for i in range(1, n+1): square = get_square(i) # 在这里调用 get_square 函数 print(f"{i}的平方 = {square}")# 调用 print_squares_up_to 函数print_squares_up_to(5)
以上实例输出结果:
1到5的平方:1的平方 = 12的平方 = 43的平方 = 94的平方 = 165的平方 = 25
3. 参数传递
在 Python 中,类型属于对象,变量只是对象的引用。理解这一点对于掌握参数传递至关重要。
⚗️实例:传递不可变对象
def try_modify_int(x): print(f"函数内部,初始x的id: {id(x)}") x += 10 # 尝试修改 print(f"函数内部,修改后x的id: {id(x)},值: {x}") return xa = 5print(f"调用前,a的id: {id(a)},值: {a}")result = try_modify_int(a)print(f"调用后,a的id: {id(a)},值: {a}")print(f"函数返回值的id: {id(result)},值: {result}")
以上实例输出结果(具体id数字可能不同):
调用前,a的id: 140736574012232,值: 5函数内部,初始x的id: 140736574012232函数内部,修改后x的id: 140736574012552,值: 15调用后,a的id: 140736574012232,值: 5函数返回值的id: 140736574012552,值: 15
分析:可以看到,整数 a 是不可变对象,函数内修改时创建了新对象,原始 a 不受影响。
✨实例:传递可变对象
def add_item(my_list, item): """向列表末尾添加一个元素""" print(f"函数内部,初始列表的id: {id(my_list)}") my_list.append(item) print(f"函数内部,添加后列表的id: {id(my_list)},内容: {my_list}")shopping_list = ["苹果", "香蕉"]print(f"调用前,列表的id: {id(shopping_list)},内容: {shopping_list}")add_item(shopping_list, "牛奶")print(f"调用后,列表的id: {id(shopping_list)},内容: {shopping_list}")
以上实例输出结果:
调用前,列表的id: 4567890123,内容: ['苹果', '香蕉']函数内部,初始列表的id: 4567890123函数内部,添加后列表的id: 4567890123,内容: ['苹果', '香蕉', '牛奶']调用后,列表的id: 4567890123,内容: ['苹果', '香蕉', '牛奶']
分析:列表是可变对象,函数内修改其内容时,原始列表也被修改了,因为它们是同一个对象的引用。