Python入门教程+项目实战-14.1节-程序实战-二分查找算法

news2025/2/24 15:02:47

目录

14.1.1 理解函数类型

14.1.2 函数的定义

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

14.1.4 函数的返回值

14.1.5 函数的命名规范

14.1.6 知识要点

14.1.7 系统学习python


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循环来编写一段逻辑相同的代码,但这样会造成代码的冗余。

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

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

 薯条老师简介:资深技术专家,技术作家,著有《Python零基础入门指南》,《Java零基础入门指南》等技术教程。薯条老师的博客:http://www.chipscoco.com, 系统学习后端,爬虫,数据分析,机器学习、量化投资。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——详解类模板与友元函数

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 类模板与友元函数1️⃣非模板友元函数2️⃣约束模板友元函数3️⃣非约束模板友元函数 类模板与友元函数 模板类的友元函数有三类&#xff1a; …

Qt/C++编写手机版本视频播放器和Onvif工具(可云台和录像)

一、前言 用Qtffmpeg写播放器很多人有疑问&#xff0c;为何不用Qt自己的多媒体框架来写&#xff0c;最重要的原因是Qt自带的目前都依赖具体的本地解码器&#xff0c;如果解码器不支持&#xff0c;那就是歇菜的&#xff0c;最多支持个MP4格式&#xff0c;而且在手机上也都是支持…

C国演义 [第七章]

第七章 最长重复子数组题目理解步骤dp含义递推公式初始化为啥dp数组如此奇怪 遍历顺序 代码 最长公共子序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 总结 最长重复子数组 力扣链接 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子…

设计模式之中介者模式笔记

设计模式之中介者模式笔记 说明Mediator(中介者)目录中介者模式示例类图抽象中介者类抽象同事类租房者类房主类具体的中介者角色类测试类 说明 记录下学习设计模式-中介者模式的写法。JDK使用版本为1.8版本。 Mediator(中介者) 意图:用一个中介对象来封装一系列的对象交互。…

剑指 Offer 68 - II. 二叉树的最近公共祖先 / LeetCode 236. 二叉树的最近公共祖先(搜索与回溯)

题目&#xff1a; 链接&#xff1a;剑指 Offer 68 - II. 二叉树的最近公共祖先&#xff1b;LeetCode 236. 二叉树的最近公共祖先 难度&#xff1a;中等 上一题博客&#xff1a;剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 / LeetCode 235. 二叉搜索树的最近公共祖先&#xf…

python:并发编程(二十四)

前言 本文将和大家一起探讨python并发编程的实际项目&#xff1a;win图形界面应用&#xff08;篇六&#xff0c;共八篇&#xff09;&#xff0c;系列文章将会从零开始构建项目&#xff0c;并逐渐完善项目&#xff0c;最终将项目打造成适用于高并发场景的应用。 本文为python并…

Pandas进阶修炼120题-第二期(Pandas数据处理,21-50题)

文章目录 Pandas进阶修炼120题第二期 Pandas数据处理21.读取本地EXCEL数据22.查看df数据前5行23.将salary列数据转换为最大值与最小值的平均值方法一&#xff1a;正则表达式&#xff08;分别使用apply()&#xff0c;applymap(),map()来实现&#xff09;方法二&#xff1a;apply…

wifi芯片原理

一、在系统中的位置 基带&#xff08;baseband&#xff09; 基带的作用有三个&#xff1a; 1、队列包的管理 2、调试解调 3、CSMA/CA机制 CSMA/CA的全称是Carrier Sense Multiple Access with Collision Avoidance&#xff0c;即载波侦听多路访问&#xff0f;冲突避免。 各…

java——集合框架

文章目录 接口实现&#xff08;类&#xff09;算法1. 排序算法2. 查找算法3. 拷贝算法4. 填充算法5. 比较算法6. 随机算法7. 迭代器算法8. 交集、并集、差集9. 分割集合10. 数组和集合的互转 集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容&#x…

C++手撕红黑树

目录&#xff1a; 红黑树的概念红黑树的性质红黑树节点的定义 红黑树结构红黑树的插入操作红黑树的验证红黑树的代码实现 红黑树的删除红黑树与AVL树的比较红黑树的应用 总结 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结…

DevOps系列文章之 Spring Boot Docker打包

应用准备容器化&#xff0c;因为几十个应用从测试到发布太麻烦了&#xff0c;而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境&#xff0c;就引进了容器技术&#xff0c;而目前常用的应用使用基于spring boot的。 在Spring Boot应用…

AI数字人之语音驱动面部模型及超分辨率重建Wav2Lip-HD

1 Wav2Lip-HD项目介绍 数字人打造中语音驱动人脸和超分辨率重建两种必备的模型&#xff0c;它们被用于实现数字人的语音和图像方面的功能。通过Wav2Lip-HD项目可以快速使用这两种模型&#xff0c;完成高清数字人形象的打造。 项目代码地址&#xff1a;github地址 1.1…

Canal监听MySQL

Canal监听MySQL 1、Mysql数据库开启binlog模式 注意&#xff1a;Mysql容器&#xff0c;此处Mysql版本为5.7 #进入容器 docker exec -it mysql /bin/bash #进入配置目录 cd /etc/mysql/mysql.conf.d #修改配置文件 vi mysqld.cnf(1) 修改mysqld.cnf配置文件&#xff0c;添加如…

Android:安卓开发使用okHttp进行网络请求和MySQL数据库完成图书馆管理系统APP

1、总体目标 1.1 项目概述 项目名称&#xff1a;基于安卓平台的图书管理系统。 本项目旨在研发一个图书管理系统&#xff0c;实现图书馆的信息化管理。在方便用户在线浏览&#xff0c;借阅&#xff0c;归还图书&#xff0c;方便图书馆管理员对图书进行管理。能很好的为用户提…

从零开始理解Linux中断架构(7)--- Linux执行上下文之中断上下文

1 中断处理程序的基本要求 当前运行的loop是一条执行流,中断程序运行开启了另外一条执行流,从上一节得知这是三种跳转的第三类,这个是一个大跳转。对中断程序的基本要求就是中断执行完毕后要恢复到原来执行的程序,除了时间流逝外,原来运行的程序应该毫无感知。 具体到Armv…

如何设计一个短信发送功能

本文主要分享了如何设计一个发送短信功能。 一、总结简述 1.梳理多个平台短信API的发送参数&#xff0c;集成封装提供统一的API&#xff0c;支持多个短信平台&#xff08;阿里云、腾讯云、百度云、京东云、七牛云&#xff09;灵活切换 2.提供存储方案&#xff0c;表结构设计…

Redis数据库操作

Redis 命令参考 — Redis 命令参考http://doc.redisfans.com/ 1、Redis&#xff0c;远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库 特征&#xff1a; 键值型&#xff0c;支持多种不同数据结构&#xff0c;功能丰富 单线程&#xff0c;每个命令具备原子性 …

C语言督学营(中级阶段)

文章目录 中级阶段9.数据结构概述逻辑结构 与 存储结构时间复杂度、空间复杂度 10.11.12.线性表 (代码实战)线性表的定义、特点1.线性表的顺序存储(顺序表示)&#xff1a;顺序表静态分配动态分配顺序表的定义、初始化、插入、删除、按值查找、按位查找 操作 (代码)&#xff1a;…

go开发多云资产管理平台

go开发多云资产管理平台cmdb 代码仓库github.com/yunixiangfeng/gocmdb 云主机管理 主机资源监控 开发流程 Welcome to Beego | Beego bee new gocmdb/servercd gocmdb/servergo mod tidygo get -u github.com/beego/beego/v2 go get -u "github.com/astaxie/beego/o…

津津乐道设计模式 - 模版模式详解(以女友化妆流程带你彻底明白)

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…