代码获取:https://github.com/qingxuly/hsp_python_course
完结版:Python基础学习(完结版)
函数
函数介绍
基本介绍
- 为完成某一功能的程序指令(语句)的集合,称为函数。
- 在 Python 中,函数分为:系统函数、自定义函数。
- 即:内置函数和模块中提供的函数都是系统函数(由 Python 提供),自定义函数是程序员根据业务需要开发的。
函数的好处
- 提供代码的复用性。
- 可以将实现的细节封装起来,然后供其他用户来调用即可。
函数的定义
基本语法
- 函数代码块以
def
关键字开头,后接函数标识符名称和圆括号()。 - 函数内容以冒号
:
开始,并且缩进。 - 函数参数
(a, b)
,可以有多个,也可以没有,即直接是()
,(a, b)
也称为形参列表。 - 函数可以有返回值,也可以没有,如果没有 return 相当于返回 None。
函数的调用
- 函数定义好了,并不会自动执行,需要程序员调用,才会执行。
- 调用方式:函数名(实参列表),比如:max(10, 20)。
快速入门
# 自定义cry 函数,输出“喵喵喵”
# 定义函数
def cry():
print("喵喵喵")
# 调用函数
cry()
# 自定义cal01 函数,可以计算从 1+...+1000的结果
def cal01():
total = 0
for i in range(1, 1001):
total += i
print("total =", total)
cal01()
# 自定义cal02 函数,该函数可以接收一个n,计算从 1+...+n 的结果
def cal02(n):
total = 0
for i in range(1, n + 1):
total += i
print("total =", total)
# (10) 表示我调用函数时,出入了实参 10,即把10赋给了形参n:n = 10
cal02(10)
# 自定义get_sum 函数,可以计算两个数的和,并返回结果
def get_sum(num1, num2):
return num1 + num2
"""
1.调用get_sum(10, 50) 调用get_sum
2.(10, 50) 表示传入了两个实参10, 50,把10赋给num1,把50赋给num2
3.result 就是接收get_sum 函数返回的结果
"""
result = get_sum(20, 30)
print("result =", result)
# 使用函数解决计算问题
def cal04():
n1 = float(input("请输入第一个数:"))
n2 = float(input("请输入第二个数:"))
oper = input("请输入运算符 + - * / :")
res = 0.0
if oper == "+":
res = n1 + n2
elif oper == "-":
res = n1 - n2
elif oper == "*":
res = n1 * n2
elif oper == "/":
res = n1 / n2
else:
print("输入的运算符错误")
print(n1, oper, n2, "=", res)
cal04()
函数的调用机制
函数调用过程
return 语句
- 基本语法
def 函数名(参数列表):
语句...
return 返回值
- 说明:如果没有 return 语句,默认返回
None
,None
是 内置常量,通常用来代表空值的对象。
def f1():
print("hi")
result = f1()
# r: None <class 'NoneType'> 140736690859152
print("r:", result, type(result), id(result))
函数注意事项和使用细节
-
函数的参数列表可以是多个,也可以没有,如:
()
,(n1, n2...)
。 -
函数的命名规范遵循标识符命名规则和规范,具体参考前面讲过的标识符命名规则和规范。
-
函数中的变量是局部的,函数外不生效。
def hi():
n = 10
print("n:", n)
hi()
# 函数内部定义的n,在函数外部不能使用
# print("n:", n)
- 如果同一个文件,出现两个函数名相同的函数,则以就近原则进行调用。
def cry():
print("hi")
def cry():
print("ok")
# 这个ry会默认就近原则,即第二个cry(),输出OK。
cry()
- 调用函数时,根据函数定义的参数位置来传递参数,这种传参方式就是位置参数,传递的实参和定义的形参顺序和个数必须一致,同时定义的形参,不用指定数据类型,会根据传入的实参决定。
def car_info(name, price, color):
print(f"name: {
name}, price: {
price}, color: {
color}")
# 传递的实参和定义的形参顺序和个数必须一致,否则报 TypeError 错误
# car_info("宝马", 500000, "red", 1) # TypeError: car_info() takes 3 positional arguments but 4 were given
car_info("宝马", 500000, "red")
- 函数可以有多个返回值,返回数据类型不受限制。
def f2(n1, n2):
return n1 + n2, n1 - n2
r1, r2 = f2(10, 20)
print(f"r1: {
r1}, r2: