Python入门【函数用法和底层分析、函数简介 、函数的定义和调用、形参和实参、文档字符串(函数的注释) 、函数也是对象,内存底层分析】(十)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

🔥🔥🔥 python入门到实战专栏:从入门到实战
🔥🔥🔥 Python爬虫开发专栏:从入门到实战
🔥🔥🔥 Python办公自动化专栏:从入门到实战
🔥🔥🔥 Python数据分析专栏:从入门到实战
🔥🔥🔥 Python前后端开发专栏:从入门到实战    

目录

函数用法和底层分析

函数简介 

函数的定义和调用

形参和实参

文档字符串(函数的注释) 

函数也是对象,内存底层分析


函数用法和底层分析

1、 函数是可重用的程序代码块。

2、函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。

在编写函数时,函数体中的代码写法和我们前面讲述的基本一 致,只是对代码实现了封装,并增加了函数调用、传递参数、 返回计算结果等内容。

⚠️为了让大家更容易理解,掌握的更深刻。我们也要深入内存 底层进行分析。绝大多数语言内存底层都是高度相似的,这样 大家掌握了这些内容也便于以后学习其他语言。 

函数简介 

函数(function)的基本概念

1 一个程序由一个一个的任务组成;函数就是代表一个任务或者一个功能(function)。

2 函数是代码复用的通用机制

Python函数的分类

Python函数分为如下几类:

 1、 内置函数

我们前面使用的 str() 、 list() 、 len() 等这些都是内置函数,我们可以拿来直接使用。

2、 标准库函数 

我们可以通过 import 语句导入库,然后使用其中定义的函数

3 、第三方库函数

Python社区也提供了很多高质量的库。下载安装这些库后,也是通过 import 语句导入,然后可以使用这些第三方库的函数

4 、用户自定义函数 

用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。今天我们学习的就是如何自定义函数。

函数的定义和调用

核心要点 

Python中,定义函数的语法如下:

def  函数名 ([参数列表]) :
 '''文档字符串'''
 函数体/若干语句

简单定义一个函数:

def add(a,b,c):
    '''完成三个数的加法,并返回他们的和'''
    sum = a+b+c
    print("{0}、{1}、{2}三个数的和是:{3}".format(a,b,c,sum))
    return sum
add(10,20,30)
add(30,40,50)

要点: 

1 、我们使用 def 来定义函数,然后就是一个空格和函数名称; Python执行 def 时,会创建一个函数对象,并绑定到函数名变量上。

2 、参数列表

     2.1、圆括号内是形式参数列表,有多个参数则使用逗号隔开

      2.2、定义时的形式参数不需要声明类型,也不需要指定函数返回值类型

      2.3、调用时的实际参数必须与形参列表一一对应

3 return 返回值

      3.1、如果函数体中包含 return 语句,则结束函数执行并返回值;

      3.2、如果函数体中不包含 return 语句,则返回 None 值。

4 调用函数之前,必须要先定义函数,即先调用 def 创建函数对象

      4.1、内置函数对象会自动创建

      4.2、标准库和第三方库函数,通过 import 导入模块时,会执行模块中的def语句

实时效果反馈

1. 如下关于函数的说法,错误的是:

A 一个程序由一个个任务组成;函数就是代表一个任务或者一个 功能。

B 函数是代码复用的通用机制

C Python执行def时,不会创建一个函数对象 

D 如果函数体中包含return语句,则结束函数执行并返回值

形参和实参

形参和实参的要点:

圆括号内是形式参数列表,有多个参数则使用逗号隔开

定义时的形式参数不需要声明类型,也不需要指定函数返回值类型

调用时的实际参数必须与形参列表一一对应 

【操作】定义一个函数,实现两个数的比较,并返回较大的值

def  printMax(a,b):
    '''实现两个数的比较,并返回较大的值'''
    if a>b:
        print(a,'较大值')
        return a
    else:
        print(b,'较大值')
        return b
printMax(10,20)
printMax(30,5)

 执行结果:

20 较大值

30 较大值

上面的 printMax 函数中,在定义时写的 printMax(a,b) 。 a 和 b 称为“形式参 数”,简称“形参”。也就是说,形式参数是在定义函数时使用的。 形式参数的命名要符合“标识符”命名规则。

在调用函数时,传递的参数称为“实际参数”,简称“实参”。上面代码 中, printMax(10,20) , 10 和 20 就是实际参数。 

文档字符串(函数的注释) 

程序的可读性最重要,一般建议在函数体开始的部分附上函数定义说明,这就是“文档字符串”,也有人成为“函数的注释”。我们通过三 个单引号或者三个双引号来实现,中间可以加入多行文字进行说 明。 

【操作】测试文档字符串的使用

def print_star(n):
    '''
   根据传入的n,打印多个星号
   :param n: 传入的数字
   :return: n个星号拼接的字符串
   '''
    s = "*"*n
    print(s)
    return s
help(print_star)
print(print_star.__doc__)

 我们调用 help(函数名) 可打印输出函数的文档字符串。结果如下:

Help on function print_star in module main:

print_star(n)

根据传入的n,打印多个星号

我们也可以通过 函数名.__doc__ 直接获取到函数的文档字符串,自己进行打印。

print(print_star.__doc__)

实时效果反馈

1. 如下关于形式参数和实际参数的说法,错误的是:

A 函数定义时,参数是形式参数。

B 定义时的形式参数不需要声明类型,也不需要指定函数返回值 类型

C 调用时的实际参数必须与形参列表一一对应

D 函数调用时,参数是形式参数。

返回值

return 返回值要点:

1 如果函数体中包含 return 语句,则结束函数执行并返回值

2 如果函数体中不包含 return 语句,则返回 None 值

3 要返回多个值,使用列表、元组、字典、集合将多个值“存起来”即可 

【操作】定义一个打印n个星号的无返回值的函数

def print_star(n):
    print("*"*n)
print_star(5)

【操作】定义一个返回两个数平均值的函数

def my_avg(a,b):
    return (a+b)/2
#如下是函数的调用
c = my_avg(20,30)
print(c)

【操作】返回一个列表

def printShape(n):
    s1 = "#"*n
    s2 = "$"*n
    return [s1,s2]
s = printShape(5)
print(s)

实时效果反馈

1. 如下关于函数的返回值的说法,错误的是:

A 如果函数体中包含 return 语句,则结束函数执行并返回值

B 如果函数体中不包含 return 语句,则返回 None 值

C 要返回多个返回值,使用列表、元组、字典、集合将多个值“存 起来”即可

D 如果函数体中不包含 return 语句,则不返回任何值

函数也是对象,内存底层分析

Python中,“一切都是对象”。实际上,执行 def 定义函数后,系统就创建了相应的函数对象。我们执行如下程序,然后进行解释:

def print_star(n):                
    print("*"*n)

print(print_star)
print(id(print_star))

c = print_star
c(3)

 执行结果:

<function print_star at 0x0000000002BB8620>
45844000

上面代码执行 def 时,系统中会创建函数对象,并通过 print_star 这个变 量进行引用:

我们执行 c=print_star 后,显然将 print_star 变量的值赋给了变量 c ,内存 图变成了:

1、显然,我们可以看出变量 c 和 print_star 都是指向了同一个函数对象。因此,执行 c(3) 和执行 print_star(3) 的效果是完全一致的。 

2、 Python中,圆括号意味着调用函数。在没有圆括号的情况下,Python会把函数当做普通对象。

与此核心原理类似,我们也可以做如下操作:

zhengshu = int
zhengshu("234")

 显然,我们将内置函数对象 int() 赋值给了变量 zhengshu ,这样 zhengshu 和 int 都是指向了同一个内置函数对象。 ⚠️当然,此处仅限于原理性讲解,实际开发中没必要这么做。

实时效果反馈

1. 如下代码,说法错误的是: 

def print_star(n):                
    print("*"*n)
c = print_star
c(3)

A 会有一个函数对象

B c 和 print_star 变量指向了两个独立的函数对象

C c 和 print_star 变量指向了同一个函数对象

D print_star 变量指向了函数对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 “小小容器” WasmEdge 里运行小小羊驼 llama 2

昨天&#xff0c;特斯拉前 AI 总监、OpenAI 联合创始人 Andrej Karpathy 开源了 llama2.c 。 只用 500 行纯 C 语言就能训练和推理 llama 2 模型的框架&#xff0c;没有任何繁杂的 python 依赖。这个项目一推出就受到大家的追捧&#xff0c;24 小时内 GitHub 收获 4000 颗星&am…

机器学习深度学习——权重衰减

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——模型选择、欠拟合和过拟合 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你…

Spring Boot 缓存 Cache 入门

Spring Boot 缓存 Cache 入门 1.概述 在系统访问量越来越大之后&#xff0c;往往最先出现瓶颈的往往是数据库。而为了减少数据库的压力&#xff0c;我们可以选择让产品砍掉消耗数据库性能的需求。 当然也可以引入缓存,在引入缓存之后&#xff0c;我们的读操作的代码&#xff…

嵌入式硬件系统的基本组成

嵌入式硬件系统的基本组成 嵌入式系统的硬件是以包含嵌入式微处理器的SOC为核心&#xff0c;主要由SOC、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 每个嵌入式系统至少包含一个嵌入式微处理器 嵌入式微处理器体系结构可采用冯.诺依曼&#xff08;Von Neumann&…

leetcode 55. 跳跃游戏

2023.7.29 本题不用纠结于可以跳几步&#xff0c;可以聚焦于覆盖范围&#xff0c;即 当前位置当前跳数 能够覆盖的范围&#xff0c;若这个范围足以到达最后一个位置&#xff0c;则返回true&#xff1b;若for循环结束&#xff0c;则还没返回true&#xff0c;则返回false。 下面看…

24考研数据结构-第一章 绪论

数据结构 引用文章第一章&#xff1a;绪论1.0 数据结构在学什么1.1 数据结构的基本概念1.2 数据结构的三要素1.3 算法的基本概念1.4 算法的时间复杂度1.4.1 渐近时间复杂度1.4.2 常对幂指阶1.4.3 时间复杂度的计算1.4.4 最好与最坏时间复杂度 1.5 算法的空间复杂度1.5.1 空间复…

如何建立Docker私有仓库?

文章目录 docker私有仓库harborHarbor仓库部署Harbor仓库使用 docker私有仓库 Docker 私有仓库是一个用于存储和管理 Docker 镜像的私有存储库。它允许你在内部网络中创建和管理 Docker 镜像&#xff0c;并提供了更好的安全性和控制&#xff0c;因为你可以完全控制谁能够访问和…

jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序&#xff1a; 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围&#xff1a; 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…

PyCharm安装pip依赖,如何添加国内镜像源?

目录 前言 PyCharm如何安装依赖 PyCharm如何配置国内镜像源 前言 首先我们都知道&#xff0c;使用pip安装依赖的方式&#xff0c;却很少有人知道使用PyCharm如何安装依赖。 PyCharm如何安装依赖 但你会发现&#xff0c;基本都是安装失败的&#xff0c;因为你是去外网下载的…

[JAVAee]文件操作-IO

本文章讲述了通过java对文件进行IO操作 IO:input/output,输入/输出. 建议配合文章末尾实例食用 目录 文件 文件的管理 文件的路径 文件的分类 文件系统的操作 File类的构造方法 File的常用方法 文件内容的读写 FileInputStream读取文件 构造方法 常用方法 Scan…

探索容器镜像安全管理之道

邓宇星&#xff0c;Rancher 中国软件架构师&#xff0c;7 年云原生领域经验&#xff0c;参与 Rancher 1.x 到 Rancher 2.x 版本迭代变化&#xff0c;目前负责 Rancher for openEuler(RFO)项目开发。 最近 Rancher v2.7.4 发布了&#xff0c;作为一个安全更新版本&#xff0c;也…

【bar堆叠图形绘制】

绘制条形图示例 在数据可视化中&#xff0c;条形图是一种常用的图表类型&#xff0c;用于比较不同类别的数据值。Python的matplotlib库为我们提供了方便易用的功能来绘制条形图。 1. 基本条形图 首先&#xff0c;我们展示如何绘制基本的条形图。假设我们有一个包含十个类别的…

ElasticSearch 7.x

前言 elastic表示可伸缩&#xff0c;search表示查询。所以es的核心即为查询。通常情况下&#xff0c;我们的数据可以分为三类&#xff1a;结构化数据、非结构化数据、半结构化数据。 结构化数据&#xff1a;一般会用特定的结构来组织和管理数据&#xff0c;表现为二维表结构。…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后&#xff0c;性能优化是重中之重&#xff0c;其中包括了包体积&#xff0c;UI 渲染、交互等多个方面。 通过 Flutt…

码农该如何延长周末体验感

码农该如何延长周末体验感 码农该如何延长周末体验感 码农该如何延长周末体验感1.制定合理的工作计划&#xff1a;2.实践工作与生活的平衡&#xff1a;3.学习新技术或扩展知识领域4.参与开源项目或个人项目&#xff1a;5.与同事或朋友组织活动&#xff1a;6.自己写博客或者总结…

百万数据快速导入导出

百万数据快速导入 pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.0</version></dependency>Resourceprivate SalariesListener salariesListener;private ExecutorService…

求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

首先可以将方程两边同时加上x&#xff0c;&#xff0c;这时候两边同时再除以1x&#xff0c;就得到了&#xff0c;变形为。&#xff08;变性后的迭代式不唯一&#xff0c;这里随便选取一个&#xff09; 当x是准确值的时候&#xff0c;两边应该是相等的&#xff0c;如果x是近似值…

【Git】分支管理之创建、切换、合并、删除分支以及冲突处理

目录 一、理解分支 二、创建、切换、合并分支 三、删除分支 四、冲突处理 五、合并模式 六、合并策略 七、Bug分支处理 八、强制删除分支 一、理解分支 master其实就是一个指针 &#xff0c;他指向的是主分支最近一次commit。我们可以创建新的分支&#xff0c;在新的分…

Arcgis之 KML/KMZ文件转shp

一般我们在Goole Earth上勾画的区域导出后都为KML或者KMZ格式的&#xff0c;但无法在arcgis等软件上直接应用&#xff0c;故需进行一定的转换 1.打开ArcMap&#xff0c;选择ArcToolbox->Conversion Tools->From KML->KML To Layer 得到如下结果&#xff08;由于本KML…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤&#xff0c;这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右&#xff0c;所以在学习js前是需要学习html和css 的&#xff0c;这两部分不用花特别多的时间&#xff08;虽然css如果想做一些非常炫酷的效果个人认为…