1. 函数的定义
定义函数的格式如下 :
def 函数名():
函数封装的代码
......
-
def 是英文 define 的缩写 (定义的意思)
-
函数名称 应该能够表达 函数封装代码 的功能, 方便后续的调用
函数名称 的命名应该 符合 标识符的命名规则
数字,字母,下划线组成,不能数字开头。 -
函数的调用
调用函数很简单, 通过 函数名() 即可完成对函数的调用 -
第一个函数演练
需求 -
编写一个 say_hello 的函数, 封装一行打招呼的代码
2.在函数下方抵用打招呼的代码
#注意: 定义好函数之后, 只表示这个函数封装了一段代码而已
#如果不主动调用函数, 函数是不会主动执行的
#代码规范函数上面要空两行
name = "kkw"
def say_hello():
"""这里写函数的注释也可以"""
print("hello world")
print(name)
#只有在调用函数时, 函数才会被执行
#函数执行完成之后, 会重新回到之前的程序中, 继续执行后续的代码
say_hello()
print(name)
#执行结果 :
#kkw
#hello world
#kkw
- 定义好函数之后, 只表示这个函数封装了一段代码而已,如果不主动调用函数, 函数时不会主动执行的
注意 :
能否将 函数调用 放在 函数定义 的上方? 不能 ! 因为在 使用函数名 调用函数之前, 要保证 Python 已经知道函数的存在
否则控制台会提示 : 名字未定义的错误
-
PyCharm 的调试工具
F8 Step Over 可以单步执行代码, 会把函数调用看作是一行代码直接执行(over跳过的意思)
F7 Step Into 可以但不执行代码, 如果是函数, 会进入函数内部(into进入的意思) -
函数的文档注释
- 在开发中, 如果希望给函数添加注释, 应该在 函数名 的下方, 使- 用 连续的三对引号
- 在 连续的三对引号 之间编写对函数的说明文字
- 在 函数调用 位置, 使用快捷键 CTRL + Q 可以查看函数的说明信息
注意: 因为 函数体相对比独立, 函数定义的上方, 应该和其他代码 (包括注释) 保留 两个空行
2. 函数的参数
1. 函数参数的使用
在函数名的后面的小括号内部填写 参数
多个参数之间使用 逗号 分隔
def sun_sum(num1, num2):
""""两个数求和"""
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sun_sum(2, 5)
#打印结果
#2 + 5 = 7
2. 参数的作用
-
函数, 把 具有独立功能的代码块 组织为一个小模块, 在需要的时候 调用
-
函数的参数, 增加函数的 通用性, 针对 相同的数据处理逻辑, 能够 适应更多的数据
1. 在函数 内部, 行数=变量 使用 2.函数调用时, 按照函数定义的 参数顺序, 把 希望在函数内部处理的数据, 通过参数 传递
3. 形参和实参
形参: 定义 函数时, 小括号中的参数, 是用来接收参数用的, 在函数内部 作为变量使用
实参: 调用 函数时, 小括号中的参数, 是用来把数据传递到 函数内部 用的
3. 函数的返回值
1. 函数的返回值
- 在程序开发中, 有时候, 会希望 一个函数执行结束后, 告诉调用者一个结果, 以便调用者针对具体的结果做后续的处理
- 返回值 是函数 完成工作 后, 最后 给调用者的 一个结果
- 在函数中适用 return 关键字可以返回结果
- 调用函数一方, 可以 使用变量 来 接收 函数的返回结果
注意: return 表示返回, 后续的代码都不会被执行
def sun_sum(num1, num2):
""""两个数求和"""
result = num1 + num2
# 使用返回值, 告诉调用函数一方计算的结果
return result
# 注意: return 就表示返回, 下方的代码不会被执行
#使用变量接收
sum_result = sun_sum(2, 5)
4. 函数的嵌套调用
一个函数里面 又调用了 另一个函数, 这就是函数嵌套调用
4.1. 函数嵌套的演练 ---- 打印分割线
多变的需求 -----
需求 1
定义一个 print_line 函数能够打印 * 组成的 一条分割线
def print_line1():
print("*" * 50)
print_line1()
需求 2
定义一个函数能够打印 由任意字符组成 的分隔线
def print_line2(line):
print(line * 50)
print_line2("-")
需求 3
定义一个函数能够打印 任意重复次数 的分割线
def print_line3(line, num):
print(line * num)
print_line3("+", 50)
需求 4
定义一个函数能够打印 5 行 的分隔线, 分割线要求符合 需求 3
提示: 工作中针对需求的变化, 不要轻易修改之前的封装好的函数
def print_line4(line, num):
"""
打印多行分割线
:param line: 分割线字符
:param num: 分割线数量
"""
row = 0
while row < 5:
print(line * num)
print("") # 换行
row += 1
print_line4("-", 50)
需求 5
定义一个函数能够自定义打印行数 的分隔线, 分割线要求符合 需求 3
def print_line3(line, num):
print(line * num)
def print_line5(num):
"""
:param num: 要打印的行数
"""
row = 0
while row < num:
print_line3("+", 50) # 嵌套调用
print("")
row += 1
print_line5(5)
感觉这些例子没多大意义。
注释的快捷键,添加的时候,点击函数名,出来一个小灯泡,选择就会出来注释块。
查看的时候,点击函数调用时候的名字,然后CTRL+q就出来了。
5. 函数的包装模块
模块是 Python 程序架构的一个核心架构的一个核心概念
模块 就好比是 工具包, 想要使用这个工具包中的工具, 就需要 import 这个模块
每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
在模块定义的 全局变量 , 函数 都是模块能够提供给外界直接使用的工具
1. 模块
- 可以 在一个 Python 文件 中 定义 变量 或者 函数
- 然后在 另外一个文件中 使用 import 导入这个模块
- 导入之后, 就可以使用 模块名.变量 / 模块名.函数 的方式, 使用这个模块中定义的变量或者函数
- 模块 可以让 曾经编写过的代码 方便的被 复用 !
2. 模块名也是一个标识符
- 标示符可以由 字母 , 下划线 和 数字 组成
- 不能以数字开头
- 不能与关键字重名
注意: 如果在给 Python 文件起名时, 以数字开头 是无法再 PyCharm 中通过导入这个模块的
6. Pyc 文件
字节码其实就是二进制文件,在执行具有import
关键字的py文件的时候,import的文件就会先生成一个二进制文件。这样的话可以提交代码的执行效率。