函数
- 函数的快速体验
- 函数的基本使用
- 函数的参数
- 函数的返回值
- 函数的嵌套调用
- 在模块中定义函数
01.函数快速体验
- 所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用
- 函数的使用包含两个步骤
- 定义函数 - - 封装独立的功能
- 调用函数 - - 享受封装的成果
- 函数的作用 ,在开发程序时,使用函数可以提高编写的效率以及代码的重用
def multiple_table():
row = 1
while row <=9:
col =1
while col <=row:
print("%d x %d = %d" %(col,row,col * row), end="\t")
col += 1
print("")
row += 1
print("调用函数打印出乘法表")
multiple_table()
调用函数打印出乘法表
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36
1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49
1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64
1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
02.函数的定义
def 函数名():
函数封装的代码
......
def
是英文define
的缩写- 函数名称应该能够表达函数封装代码的功能,方便后续的调用
- 函数名称的命名应该符合标识符的命名规则
- 可以由字母、下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
def multiple_table():
row = 1
while row <=9:
col =1
while col <=row:
print("%d x %d = %d" %(col,row,col * row), end="\t")
col += 1
print("")
row += 1
print("调用函数打印出乘法表")
multiple_table()
函数的调用
通过函数名()
即可完成对函数的调用
第一个函数体验
需求:
- 编写一个打招呼
say_hello
的函数,封装三行打招呼的代码 - 在函数下方调用打招呼的代码
def say_hello():
print("hello1")
print("hello2")
print("hello3")
say_hello()
## 注意:定义好函数之后,只表示这个函数封装了一段代码而已,如果不主动调用函数,函数是不会执行的。
函数的文档注释
- 在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号
- 在连续的三对引号之间编写对函数的说明文字
- 在函数调用位置,使用快捷键
ctrl + Q
可以查看函数的说明信息
注意:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行,调用函数的代码与函数体保留两个空行
格式:
# 注释信息或者其他代码
def say_hello():
"""打招呼"""
print("hello1")
print("hello2")
print("hello3")
say_hello()
03 函数的参数
演练需求
- 开发一个
sum_2_num
的函数 - 函数能够实现两个数字的求和功能
演练代码如下:
def sum_2_num():
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = %d" % (num1,num2,result))
sum_2_num()
上面代码存在一个问题就是只能实现两个固定数字的求和
如何解决:
- 如果能够把需要计算的数字,在调用函数时,传递到函数内部就好了!
函数参数的使用
-
在函数名的后面的小括号内部填写参数
-
多个参数之间使用
,
分割def sum_2_num(num1, num2): """对两个数字求和""" result = num1 + num2 print("%d + %d = %d" % (num1, num2, result)) sum_2_num(10, 20)
形参和实参
- 形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
- 实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部中用的
04 参数的返回值
-
程序开发中,有时候,会希望一个函数执行结束后,告诉调用者一个结果,以便调用者对具体结果做后续处理
-
返回值是函数完成工作后,最后给调用者的一个结果
-
在函数中使用
return
关键字可以返回结果 -
调用函数一方,可以使用变量来接收函数的返回结果
注意:
return
表示返回,后续的代码都不回被执行
def sum_2_num(num1, num2):
"""对两个数字求和"""
result = num1 + num2
return result # 注意:return下方不应该增加代码!
sum_result = sum_2_num(20, 20)
print("计算结果 %d" % sum_result)
05 函数的嵌套调用
-
一个函数里面有调用了另一个函数,这就是函数嵌套调用
-
如果函数
test2
中,调用了另外一个函数test1
- 那么执行到调用
test1
函数是,就会先把函数test1
中的任务都执行完 - 才会回到
test2
中调用函数test1
的位置,继续执行后续的代码
def test1(): print("*" * 20) def test2(): print("-" * 20) test1() print("+" * 20) test2() 输出: -------------------- ******************** ++++++++++++++++++++
- 那么执行到调用
函数嵌套演练-- 打印分割线
需求1:
-
定义一个
print_line
函数能够打印任意字符组成的一条分割线def print_line(char): print(char * 20) print_line("-") # ‘-’可以改为任意字符
需求2:
- 要求
print_line
函数能都打印 任意字符 由 任意的重复次数 组成的一天分割线
def print_line(char, times):
print(char * times)
print_line("7", 20)
需求3:
- 定义一个函数能够打印 5 条分割线,并且要满足于任意字符 和 字符的重复次数 组成
def print_line(char, times):
print(char * times)
def print_line2(char, times):
line = 0
while line < 5:
print_line(char, times)
line += 1
print_line2("-", 20)
输出:
--------------------
--------------------
--------------------
--------------------
--------------------
06 使用模块中的函数
模块是 Python 程序架构的一个核心概念
- 模块就好比是工具包,要想使用这个工具包中的工具,就需要导入
import
这个模块 - 每一个以扩展名
py
结尾的python
源代码文件都是一个模块 - 在模块定义的全局变量、函数都是模块能够提供给外界直接使用的工具
第一个模块体验
-
新建
分割线模块.py
文件,将上面分割线演练的代码复制到里面 -
def print_line(char, times): """打印分割线 :param char:字符 :param times:字符重复的次数 """ print(char * times) def print_line2(char, times): line = 0 while line < 5: print_line(char, times) line += 1 name = "分割线模块"
-
新建一个
分割线调用.py
的文件来调用上面的分割线模块 -
import 分割线模块 ## 先导入模块 分割线模块.print_line2("-", 5) ## 调用模块的print_line2函数 print(分割线模块.name) ## 调用模块中的name变量 输出: ----- ----- ----- ----- ----- 分割线模块
体验小结:
- 可以在一个Python文件中定义函数和变量
- 然后在另一个文件中,使用
import
导入这个模块 - 导入之后,就可以使用
模块名.变量
模块名.函数
的方式,使用模块中定义的函数或者变量 - 模块可以让曾经写过的代码 方便的被 复用
模块名和标识符
模块名也是一个标识符
- 标识符可以由字母、下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
注意:现在如果给Python文件起名的时候,以数字开头是无法在pycharm中导入这个模块的
Pyc文件
C
是 complied
编译过的意思
- 浏览程序目录会发现一个,
_pycache_
的目录 - 目录下会有
cpython-37.pyc
结尾的文件,cpython-37
表示解释器的版本 - 这个
pyc
文件是有python
解释器将模块的源码编译成了二进制文件,转换为字节码Python
这样保存字节码是作为一种启动速度的优化