Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元组类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python高级编程

第二十章: Python项目实战

首页 > Python基础教程 > 第十四章: Python函数处理 > 14.1节: 函数的基础概念

14.1节: 函数的基础概念

薯条老师 2020-05-21 08:21:19 233291 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

14.1.1 理解函数类型

在Python中,函数也是一种数据类型。在理解函数类型之前,我们先看一段简单的代码实例,计算某个区间范围内的所有合数的和:

# __desc__ = 计算某区间范围内的所有合数的和
 
# 定义变量sum_of_numbers用来保存所有合数的和
sum_of_numbers = 0
 
# 合数指自然数中除了能被1和本身整除外
# 还能被其他数(0除外)整除的数
# 所以首先排除1与2
 
for number in range(3, 10):
    # 通过for循环和range来遍历从2到number之间的所有自然数
    for divisor in range(2, number):
        # % 是Python中的求余计算符号
        if number % divisor == 0:
            # number能被其他数整除时,余数为0
            # 如果余数为0,说明为合数
            sum_of_numbers += number  
            break
else:
    print(sum_of_numbers)

在以上代码中,通过for循环来计算1到10之间的所有合数的和。如果需要在下文中计算100到1000之间的所有合数的和?那么,该如何编写代码?最简单的做法是再次使用for循环来编写一段逻辑相同的代码,但这样会造成代码的冗余。

在计算机程序设计中,可将需重复使用的代码块封装到一个函数中,这样下次使用时再直接调用即可,无需重复编写。同学们可以将函数理解为一个从输入到输出的转换器,比如语言翻译器就是一种函数,将一种语言输出为另外一种语言。

image.png

14.1.2 函数的定义

在Python中使用关键字def来定义函数,关于def的定义,可以在交互模式中执行help("def")来进行查找:
>>> help("def")
Function definitions
********************
A function definition defines a user-defined function object (see
section The standard type hierarchy):
......

函数定义的基本语法:


def function_name(parameter_list):
    return value

function_name表示函数名,在下文中再次调用函数时,需要通过函数名来进行引用,没有函数名的函数被称为匿名函数。

Python中的函数名通常为小写的英语单词或单词的组合。在为函数取名的时候,函数名应当具备较强的可读性,即通过函数名就可以知道该函数的功能。函数名可以参考变量的命名风格。
parameter_list表示参数列表,参数列表是指函数可以包含多个参数,参数以英文逗号进行分隔。所谓的参数是指函数的输入。函数通常会有一个输出,在Python中通过return语句来结束函数的执行并返回一个值。
同学们可以将Python简单的理解为从输入到输出的转换,通过参数列表来定义函数的输入,通过函数的返回值,来定义输出的值。函数中的return不是必须的,这意味着函数可以没有返回值。
现在我们将计算区间范围内的合数的和来通过函数进行定义,以彻底的理解函数。

代码实例:


# __desc__ = 定义函数,计算某区间范围内的所有合数的和
 
# 使用def来定义函数
def sum_of_composite_numbers(start, stop):
  # 函数名为sum_of_composite_numbers
  # 在函数的参数列表中定义了两个形参,分别是start,stop
  # start表示区间的起始位置,stop表示区间的结束位置
 
  # 定义变量sum_of_numbers用来保存所有合数的和
  sum_of_numbers = 0
 
  # 合数指大于1的自然数中除了能被1和本身整除外
  # 还能被其他数(0除外)整除的数
 
  # 如果参数start的值大于2,那么保持原始的输入,否则赋值为3
  start = start if start >2 else 3
 
  for number in range(start, stop):
    
    # 通过for循环和range来遍历从2到number之间的所有自然数
    for divisior in range(2, number):
      # % 是Python中的求余计算符号
      if number % divisior == 0:
        # number能被其他数整除时,余数为0, 如果余数为0,说明为合数,执行break退出循环
        sum_of_numbers += number
        break
    
  # 通过 return将合数的和进行返回
  return sum_of_numbers

14.1.3 函数的形参,实参,以及调用

在14.1.2节中定义了一个sum_of_composite_numbers函数,用来计算区间范围内的合数的和。在函数定义时所声明的函数,就叫做形参,形参相当于位置占位符。在调用函数时实际传递的参数,被称为实参。函数调用的语法:

function_name(arguments_list)
function_name表示函数的名称,arguments_list表示实参列表,参数以逗号进行分隔。调用函数时所传递的参数必须与函数定义时的个数一致,而且Python会将实参的位置与形参的位置一一对应起来。这种参数被称为位置参数。在Python中还可以通过关键字参数的形式来调用函数,在下节内容中会进行详细讲解。

代码实例:

# __desc__ = 调用函数,计算某区间范围内的所有合数的和
 
"""
(1) 调用在14.1.2节中定义的函数
(2) Python是一种解释型编程语言,在调用函数时,必须在当前文件中找到函数的定义
"""
 
sum_of_numbers = sum_of_composite_numbers(1, 100)
# 实参1对应的是形参start,实参100对应的是形参stop
# 这种参数传递方式即为位置参数
 
# 当我们需要计算其它区间的合数的和时,再传递其它的参数即可
sum_of_numbers = sum_of_composite_numbers(10, 50)
 
# 通过函数,将相同逻辑的代码封装起来,减少了程序中的代码冗余

在调用函数时,如果参数与函数定义时的个数不一致,那么Python会抛出类型错误的异常信息:

>>> sum_of_composite_numbers(100)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: sum_of_composite_numbers() missing 1 required positional argument: 'stop'

在Python中一切皆对象,函数也是一种数据类型,可以通过type将函数的类型名进行输出,直接在type中传递函数名:
>>> type(sum_of_composite_numbers)
<class 'function'>

从输出中可以看出,Python中的函数类型名是function。

14.1.4 函数的返回值

函数通常有一个返回值,在Python中通过return将值进行返回,返回的值可以是任何数据类型。当需要返回多个值时,以逗号进行分隔。Python函数中的“多个返回值”实质是一个元组类型。

代码实例:

# __desc__ = 返回多个值给调用方
 
# 简单的定义一个返回多个值的函数
def just_return():
  # 返回值1,2,3,实质是一个元组
  return 1,2,3
 
# numbers是一个元组类型
numbers = just_return()
 
# 也可以在调用函数时,直接对返回的元组进行解包
x,y,z = just_return()
 
# x的值为1,y的值为2,z的值为3

14.1.5 函数的命名规范

在Python中,函数命名也有它的一套规范,函数名首先得符合变量命名的基本规则。
对变量命名规范还不是很熟悉的读者,可以复习6.1节"变量命名"中的内容。

在基本规则之外,函数名还应当符合以下两个重要的规则:
1. 保持良好的可读性: 即函数名要有意义,读者看到函数名可以立即知道函数的用途。此外尽量使用英文单词来对函数进行命名。
2. 函数名使用小写:使用小写是为与全局变量名,类名等区分开来,全局的变量名一般使用大写,而类名使用单词首字母大写的形式。若函数名需要使用多个单词来进行命名时,单词之间以下划线"_"来进行分隔。

关于函数命名规范的更多细节,读者可以参考著名的PEP8规范

14.1.6 知识要点

(1) Python中的函数也是一种抽象数据类型,可以通过type来输出函数的类型名
(2) 在Python中使用关键字def来定义函数,函数定义时的参数列表为形参,函数调用时的参数列表为实参
(3) 函数的基本属性:函数名,参数,返回值

14.1.7 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: