python基础(八、函数基础)

12.函数基础
1)函数的快速体验
(1)快速体验
所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用
函数的使用包含两个步骤:
①定义函数 — 封装独立的功能
②调用函数 — 享受封装的成果
函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用

(2)演练步骤
①新建“04_函数”项目

②复制之前完成的乘法表文件到“04_函数”文件夹中

③增加函数定义“multiple_table():”(第一行顶格),修改文件(调整缩进)

④新建另外一个文件,使用 import 导入并且调用函数

⑤右击新建的文件,运行即可打印九九乘法表

2)函数基本使用
(1)函数的定义
定义函数的格式如下:
def 函数名():
函数封装的代码
……
def是英文define的缩写
函数名称应该能够表达函数封装代码的功能,方便后续的调用
函数名称的命名应该符合标识符的命名规则:
①可以由字母、下划线和数字组成
②不能以数字开头
③不能与关键字重名

(2)函数调用
调用函数很简单的,通过函数名()即可完成对函数的调用

(3)第一个函数演练
①需求
(a)编写一个打招呼 say_hello 的函数,封装三行打招呼的代码
(b)在函数下方调用打招呼的代码
②代码
用单步执行F8和F7观察以下代码的执行过程

定义好函数之后,只表示这个函数封装了一段代码而已
如果不主动调用函数,函数是不会主动执行的
③思考
能否将函数调用放在函数定义的上方?
不能!
因为在使用函数名调用函数之前,必须要保证Python已经知道函数的存在。否则控制台会提示:
NameError: name 'say_hello' is not defined (名称错误:say_hello 这个名字没有被定义)

(4)PyCharm 的调试工具
①F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行
②F7 Step Into 可以单步执行代码,遇到函数调用,会进入函数内部单步执行

(5)函数的文档注释
①在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号。在连续的三对引号之间编写对函数的说明文字。
②在函数调用位置,使用快捷键CTRL + Q可以查看函数的说明信息

注意:因为函数体相对比较独立,函数定义的上方和下方,应该和其他代码保留两个空行

3)函数的参数
(1)函数参数的引入
①演练需求
(a)开发一个sum_2_num的函数
(b)函数能够实现两个数字的求和功能
②代码

③思考一下存在什么问题
函数只能处理固定数值的相加
如果能够把需要计算的数字,在调用函数时,传递到函数内部就好了!

(2)函数参数的使用
在函数名的后面的小括号内部填写参数
多个参数之间使用“,”分隔
修改代码

(3)参数的作用
函数,把具有独立功能的代码块组织为一个小模块,在需要的时候调用。
函数的参数,增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据
①在函数内部,把参数当做变量使用,进行需要的数据处理
②函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过参数传递

(4)形参和实参
形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的

4)函数的返回值
返回值是函数完成工作后,最后给调用者的一个结果。
在函数中使用return关键字可以返回结果。
调用函数一方,可以使用变量来接收函数的返回结果。
(1)函数不写return,返回值为None
(2)函数写了return,但return后面没有值,返回值为None。
(3)函数写了return,且return后面只有一个值,返回一个值。
(4)函数写了return,且return后面只有多个值(值1,值2,值3),返回元组。
注意:return表示返回,后续的代码都不会被执行

5)函数的嵌套调用
(1)函数嵌套的概念
一个函数里面又调用了另外一个函数,这就是函数嵌套调用

(2)函数嵌套演练:打印分隔线
①需求1:定义一个 print_line 函数能够打印 * 组成的 一条分隔线

②需求2:定义一个函数能够打印 由任意字符组成 的分隔线

③需求3:定义一个函数能够打印 任意重复次数 的分隔线

④4)需求4:定义一个函数能够打印 5 行 的分隔线,分隔线要求符合需求 3
提示:工作中针对需求的变化,应该冷静思考,不要轻易修改之前已经完成的,能够正常执行的函数!

12.5.3 函数嵌套演练:a的作用域
nonlocal:可以一层一层的往外找到最近的局部变量,但找到最外层的局部变量还没有时会报错,而且不会找到全局变量。

执行结果:

6)给函数添加注释
(1)方法一:


(2)方法二:

7)使用模块中的函数(重点)
模块是Python程序架构的一个核心概念
模块就好比是工具包,要想使用这个工具包中的工具,就需要导入import这个模块
每一个以扩展名py结尾的Python源代码文件都是一个模块
在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具

(1)第一个模块体验
①步骤
(a)新建 hm_10_分隔线模块.py
(b)复制 hm_09_打印多条分隔线.py 中的内容,最后一行 print 代码除外
(c)增加一个字符串变量: name = "黑马程序员"

(d)新建 hm_10_体验模块.py 文件,并且编写以下代码:

②体验小结:
a)可以在一个 Python 文件中定义变量或者函数
b)然后在另外一个文件中使用import导入这个模块
c)导入之后,就可以使用“模块名.变量”或“模块名.函数”的方式,使用这个模块中定义的变量或者函数
d)模块可以让曾经编写过的代码方便的被复用!

(2)模块名也是一个标识符
标示符可以由字母、下划线和数字组成,
不能以数字开头,
不能与关键字重名
注意:如果在给 Python文件起名时,以数字开头是无法在PyCharm中通过导入这个模块的

(3)pyc文件(字节码文件)
c是compiled编译过的意思
①操作步骤
(a)浏览程序目录会发现一个“pycache” 的目录
(b)目录下会有一个“hm_10_分隔线模块.cpython-35.pyc”文件,cpython-35表示Python解释器的版本(C语言编写的35版)
(c)这个pyc文件是由Python解释器将模块的源码转换为字节码,Python这样保存字节码是作为一种启动速度的优化
②字节码
Python在解释源程序时是分成两个步骤的:
(a)首先处理源代码,编译生成一个二进制字节码
(b)再对字节码进行处理,才会生成CPU能够识别的机器码
有了模块的字节码文件之后,下一次运行程序时,如果在上次保存字节码之后没有修改过源代码,Python将会加载 .pyc 文件并跳过编译这个步骤。
当Python重编译时,它会自动检查源文件和字节码文件的时间戳。如果你又修改了源代码,下次程序运行时,字节码将自动重新创建。
模块是 Python 程序架构的一个核心概念

①②③④⑤⑥⑦⑧⑨⑩

posted on 2020-11-30 11:09  叮当2000  阅读(157)  评论(0编辑  收藏  举报