0.1 函数的基本使用
1.1 基本概念
- 所谓函数,就是把具有独立功能的代码块 组织为一个整体,在需要的时候调用
- 函数的使用包括含两个步骤:
1.定义函数——在函数中编写代码,实现功能
2.调用函数——执行编写的代码 - 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用
1.2函数的定义
定义函数的格式如下:
def 函数名():
函数封装的代码
.....
1.def 是英文 define 的缩写
2.函数名称应该能够简单明确的表达函数功能,以方便后续的调用
3.函数名称的命名应该符合标识符的命名规则
- 可以由 字母 下划线和数字组成
- 不能以数字 开头
- 不能与关键字重名
1.3函数调用
调用函数很简单的,通过 函数名()即可完成对 函数的调用
1.4第一个函数演练
需求
-
1.编写一个打招呼say_hello的函数,封装三行打招呼的代码
-
1 在函数下方调用打招呼的代码
name = “小明”
#解释器知道这是定义了一个函数
def say_hello():
print("hello 1")
print("hello 2")
print("hello 3")
print(name)
# 只有在调用函数时,之前定义的函数才会被执行
#函数执行完成后,会重新回到之前的程序中,继续执行后续的代码
say_hello()
02.函数执行过程,文档注释
2.1PyCharm的单步调试
-
F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行
-
F7 Step Into 可以单步执行代码,如果是函数,会进入到函数内部
用单步执行F8和F7观察以下代码的执行过程 -
定义好函数之后,只表示这个函数封装了一段代码而已
-
如果不主动调用函数,函数是不会主动执行的
思考
-
能否将函数调用放在函数定义的上方
不能
因为在使用函数名调用函数之前,必须要保证Python已经知道函数的存在
否则控制台会提示 NameError: name ‘say_hello’ is not defined(名称错误:say_hello这个名字没有被定义)
2.2 函数的文档注释
- 在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号
- 在连续三对引号之间编写对函数的说明文字
- 在函数调用位置,使用快捷键CTRL+Q 可以查看函数的说明信息
函数执行过程,文档注释
def func_sum():
"""求和 1+2"""
sum_num = 1 + 2
print(sum_num)
func_sum()
注意:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行
03.函数的参数(一)
演练需求
1.开发一个sum_2_num 函数
2.函数能够实现 两个数字的求和 功能
演练代码如下:
def sum_2_num():
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = % d "%(num1, num2, result))
sum_2_num()
思考一下存在什么问题
函数只能处理 固定值 的相加
如何解决?
- 如果能够把需要计算的数字,在调用函数时,传递到函数内部就好了!
3.1 参数的概念
- 函数的参数,可以传递数据给函数内部,添加函数的通用性
1.在函数内部,把参数当做变量使用,进行需要的数据处理
2.函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过参数传递
3.2设置函数的参数
- 在函数名的后面的小括号内部填写参数
- 多个参数之间使用,分隔
def sum_2_num(num1, num2):
result = num1 + num2
print ("%d + %d = %d" % (num1, num2, result))
sum_2_num(20, 80)
3.3形参和实参
- 形参:定义函数时设置的参数,是用来代替真实数据的,在函数内部作为变量使用
- 实参:调用函数时设置的 真实数据,会被传递到函数内部
形参的作用域
以下程序两次打印a的结果是?
a = 5
def test1(a):
a += 1
print("%d" % a)
test1(2)
print("%d" % a)
- 形参的作用域(起作用的范围)只在定义函数的代码块中,一旦超出该范围再使用该参名,则使用的是同名自定义变量
- 编程中应该尽量避免函数的形参和同文件的变量名 同名
0.4函数的返回值(一)
4.1 概念
- 开发中,有时会希望一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理
- 返回值是函数给调用方提供放入结果
4.2 设置返回值
- 在函数中使用 return 关键字可以返回结果
- 调用函数一方,可以使用变量来接收函数的返回结果
def sum_2_num(num1, num2):
"""对两个数字的求和"""
return num1 + num2
#调用函数,并使用result 变量接收计算结果
result= sum_2_num(10, 30)
print("计算结果是 %d" % result)
⚠️注意:return表示返回,后续的代码都不会被执行
0.5 4种函数的类型
函数根据有没有参数,有没有返回值,可以相互组合,一共四种
- 无参数,无返回值
- 无参数,有返回值
- 有参数,无返回值
- 有参数,有返回值
5.1无参数,无返回值的函数
def print_menu():
"""打印菜单"""
print('--------------------------')
print(' xx涮涮锅 点菜系统')
print(' ')
print(' 1. 羊肉涮涮锅')
print(' 1. 牛肉涮涮锅')
print(' 1. 猪肉涮涮锅')
print('--------------------------')
5.2 无参数,有返回值的函数
def get_pi():
"""
获取圆周率
:return:圆周率,小数点后保留9位
"""
return 3.141592654
pi = get_pi()
print('圆周率为:%.9f' % pi)
5.3 有参数,无返回值的函数
def print_star(num):
"""
打印星星
:param num:星星数量
"""
print("*" num)
print_star(5)
5.4 有参数,有返回值的函数
def func_num(num):
"""
0-n累加求和
:param num:累加的最后一个数
:return:累加的和
"""
result = 0
i = 1
while i <= num:
result = result + i
i += 1
return result
result = func_sum(100)
print('1~100的累加和为:%d ' % result)
<5>小总结
- 函数根据有没有参数,有没有返回值可以相互组合
- 定义函数时,是根据实际的功能需求来设计的,所以不同开发人员编写的函数类型各不相同
0.6 函数的嵌套调用
- 一个函数里面又调用来另外一个函数,这就是函数嵌套调用
- 如果函数func2中,调用来另一个函数fun1
1.那么执行到调用func1函数时,会把函数func1中的任务都执行完
2. 才会回到func2中调用函数func1的位置,继续执行后续的代码
def func1():
print("func1开始")
print("func1结束")
def func2():
print("func1开始")
func1()
print("func1结束")
func2()
函数嵌套的演练-------打印分割线
需求1
- 定义一个print_line 函数能够打印 * 组成的一条分割线
def print_line():
print(" * " * 50)
需求2
- 定义一个函数能够打印由任意字符组成的分割线
def print_line(char):
print(char * 50)
需求3
- 定义一个函数能够打印任意长度的分割线
def print_line(char, length):
print(char * length)
需求4
- 定义一个函数能够打印5行的分割线,分割线要去符合需求3
def print_line(char, length):
print(char * length)
def print_lines(char * length):
row = 0
while row < 5:
print_line(char * length)
row += 1