在正式讲述函数之前,先给大家说明一点:编写函数就是“面向过程”的方式,编写类就是“面向对象“的方式。你如果不知道这是啥意思,至少别人提到这2个词你应该知道是在干嘛。

函数的相关概念解释

函数是带有特有名字的代码块儿,用于帮助我们实现具体的功能。在正式讲述Python函数之前,这里首先给大家讲述一下函数的概念、好处和注意事项。

  • 概念: 将一组逻辑语句封装在方法体中,对外暴露方法名;
  • 好处: 隐藏了实现细节,提高代码的重用性;
  • 注意事项: 编写并调用一个函数,我们必须要知道① 函数的功能;② 函数名;

函数的语法结构拆解

说了真么多,那么怎么样编写一个函数呢?这就涉及到函数的语法结构了。

# 定义函数
def 函数名(形式参数1,形式参数2,...):
"""文档描述"""
函数体
return 值 # 函数调用
函数名(实际参数1,实际参数2,...)

哈哈,对于没有学习函数的同学来说,是不是一脸茫然?接着我给大家讲解一下每一部分的含义,做一个大拆解。

  • def: 它是定义函数的关键字,看到这个关键字,表示我们定义了一个函数;
  • 函数名: 类似于我们定义一个变量。函数名直接指向的是函数的内存地址,表示对函数体代码的引用,因此我们可以直接通过函数名,来调用函数,实现既定功能;
  • 括号: 括号内用于参数传递,但是该参数是可有可无的;
  • 冒号: 这是语法结构,没有为什么,这个冒号要一再强调,不能省略;
  • """文档描述""": 用于描述该函数的功能,介绍一些参数信息,不是必须的,但是为了自己和他人以后能够看明白,建议加上;
  • 函数体: 用于实现特定功能的代码块儿;
  • return 值: 定义函数的返回值,return是可有可无的。

返回值

上面我们已经知道:函数的返回值是可有可无的,有时候我们只需要直接显示输出,但有时候我们需要利用返回值,做一些其他的操作。

下面的演示,可能会涉及到”传参‘,不明白不要紧,咋们后面会慢慢讲述。

无返回值

比如:我们只想做一个简单的自我介绍,我们直接显示输出就好。

name = "梁同学"
age = 18
addr = "山东"
def my_intro(name,age,addr): print(f"我的名字是{name}")
print(f"我今年{age}岁")
print(f"我来自{addr}") my_intro(name,age,addr)

结果如下:

有返回值

比如:求梁同学语数外三科的平均成绩,后面我要利用这个平均成绩,做一个汇报。

chinese = 91
math = 95
english = 90
def age_score(chinese,math,english):
avg = (english + math + chinese) / 3
return avg
avg = age_score(chinese,math,english)
print(f"我的平均成绩是:{avg}")

结果如下:

传递参数

观察函数的语法格式,函数名后面跟着一个括号,括号中可以传递参数,也可以不传递参数。

无参传递

对于一个简单的函数,我们不需要传递任何参数,当然也没有返回值。这样的函数无法实现复杂的功能,很简单,但我们需要了解。

def func1():
print("今天天气真是好!")
func1()

结果如下:

有参传递

有时候为了是的代码的可扩展性更高,需要给函数传递参数,来帮助我们实现更复杂的功能。在详细讲述有参传递之前,我们用一个简单的案例(如图所示),讲述“形参”和“实参”这两个概念。

name = "梁同学"
def func2(name):
print(f"我的名字叫做:{name}")
func2(name)

结果如下:

上面的代码中,我给大家详细的标注了“形参”和“实参”的位置,下面来给它们下个定义。

  • 形参: 函数完成某个功能,所需的一项信息;
  • 实参: 调用函数时,传递给函数的具体信息;

总结一下:函数定义中传入参数,叫做形参。调用函数时,传入的参数,叫做实参。

某个函数为了实现更复杂的功能,有时候可能传递了多个形参,那么在进行函数调用时,也应该传递多个实参。函数传递实参的方式有很多:位置实参、关键字实参、默认值。

  • 位置实参

位置实参指的是,实参传递顺序,和形参传递顺序完全一致。

name = "梁同学"
age = 18
addr = "山东" def my_intro(name,age,addr):
print(f"我的名字是{name}")
print(f"我今年{age}岁")
print(f"我来自{addr}") my_intro(name,age,addr)

结果如下:

如果实参传递顺序,和形参传递顺序弄错了,那就很尴尬了。

  • 关键字实参

关键字实参指的是,在进行函数调用时,传递一个名称值对(类似于字典的键值对),直接将形参和实参关联起来,此时就不用考虑实参的传递顺序了。

name = "梁同学"
age = 18
addr = "山东" def my_intro(name,age,addr):
print(f"我的名字是{name}")
print(f"我今年{age}岁")
print(f"我来自{addr}") my_intro(age=age,name=name,addr=addr)

结果如下:

  • 默认值

有时候,可以给每个形参指定默认值,应为它是永久不变的。此时在调用函数时,就不用传递该形参对应的实参。有一点需要注意:默认值形参一般放在所有形参之后。

比如:我们介绍自己的身体情况时,我们的名字肯定是永远不变的,但是体重是会变的。

weight = 72

def my(weight,name="梁同学"):
print(f"我的名字是:{name}")
print(f"我今天的体重是:{weight}kg") my(weight)

结果如下:

python基础(十七):函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  6. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  7. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  8. Python学习笔记(一)python基础与函数

    1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...

  9. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  10. Python基础__函数

    本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...

随机推荐

  1. NGK新加坡峰会:超级节点和开源代码为DeFi生态带来新曙光!

    据伦敦金融时报以及纽约商业报等多家媒体报道的消息,1月31日,2021 NGK区块链峰会于新加坡正式开幕,全球多位区块链研究所专家线上受邀出席参会,NGK灵石技术研发Clifton先生,法国区块链专家 ...

  2. Redis集群简介及部署

    1简介 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  3. Hyperf-JsonRpc使用

    Hyperf-JsonRpc使用 标签(空格分隔): php 安装扩展包 composer require hyperf/json-rpc composer require hyperf/rpc-se ...

  4. Kubernetes 实战 —— 01. Kubernetes 介绍

    简介 P2 Kubernetes 能自动调度.配置.监管和故障处理,使开发者可以自主部署应用,并且控制部署的频率,完全脱离运维团队的帮助. Kubernetes 同时能让运维团队监控整个系统,并且在硬 ...

  5. 后端程序员之路 14、NumPy

    NumPy - NumPyhttp://www.numpy.org/ NumPy-快速处理数据 - 用Python做科学计算http://old.sebug.net/paper/books/scipy ...

  6. 【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理

    在博文ServiceBus 队列中死信(DLQ - Dead Letter Queue)问题一文中,介绍了服务总线产生私信的原因及可以通过代码的方式来清楚私信队列中的消息,避免长期占用空间(因为私信中 ...

  7. POJ-1087(最大流+EK算法)

    A Plug for UNIX POJ-1087 这一题也是最大流的应用,但是题目有点绕. 题目的意思就是有插座和插头,只不过这里使用设备取代了插头.只有插座和设备进行匹配了. 题目要注意的是那个适配 ...

  8. 【Arduino学习笔记01】关于Arduino引脚的一些笔记

    参考链接:https://www.yiboard.com/thread-831-1-1.html Arduino Uno R3 - 引脚图 Arduino Uno R3 - 详细参数 Arduino ...

  9. 【老孟Flutter】Flutter 2的新功能

    老孟导读:昨天期待已久的 Flutter 2.0 终于发布了, Flutter Web和Null安全性趋于稳定,Flutter桌面安全性逐渐转向Beta版! 原文链接:https://medium.c ...

  10. CVE-2017-7504-JBoss JMXInvokerServlet 反序列化

    漏洞分析 https://paper.seebug.org/312/ 漏洞原理 这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的 ...