Python函数的说明

Python中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input()print()range()len() 函数等等,这些都是 Python 的内置函数,可以直接使用。

除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。

函数也是一个对象,对象是内存中专门用来存储数据的一块区域。

1、函数的使用

(1)定义函数

格式

def 函数名(参数):
代码1
代码2
......

你可以定义一个自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None

(2)调用函数

函数名(参数)

注意:

  1. 函数名是自定义的标识符,需符合定义标识符的规则与规范。
  2. 不同的需求,参数可有可无。

(3)使用函数的注意事项

  • 在Python中,函数必须先定义后使用

    如果先调用会报错,NameError: name 'info_print' is not defined
  • 如果没有调用函数,函数里面的代码不会执行,需要调用函数代码才会执行。
  • 函数执行流程
    • 解释器执行定义函数的时候,函数体内部缩进的代码并没有执行。
    • 当函数被调用的时候,解释器回到定义函数的地方去执行下方缩进的代码,当这些代码执行完,回到调用函数的地方继续向下执行。

练习

# 需求:一个函数:打印hello world

# info_print()  # 报错函数未定义

# 定义函数
def info_print():
print('hello world') # 调用函数
info_print()

2、函数的参数

在Python中,函数参数的写法有很多种,我们先来说一下,最简单参数的写法。

思考:完成需求如下:一个函数完成两个数1和2的加法运算,如何书写程序?

# 定义函数
def add_num1():
result = 1 + 2
print(result) # 调用函数
add_num1()

思考:上述add_num1函数只能完成数字1和2的加法运算,如果想要这个函数变得更灵活,可以计算任何用户指定的两个数字的和,如何书写程序?

分析

用户要在调用函数的时候指定具体数字,那么在定义函数的时候就需要接收用户指定的数字。

那么函数调用时候指定的数字和定义函数时候接收的数字即是函数的参数。

# 定义函数时同时定义了接收用户数据的参数a和b,a和b是形参.
def add_num2(a, b):
result = a + b
print(result) # 调用函数时传入了真实的数据10 和 20,真实数据为实参.
add_num2(10, 20) # 定义函数有2个参数,传入数据也要是2个,一定要相等,否则会报错
# 结果:TypeError: add_num2() missing 1 required positional argument: 'b'
add_num2(100) # 报错

总结

函数的参数:函数调用的时候可以传入真实数据,增大函数的使用的灵活性.

  • 形参:函数定义时书写的参数(非真实数据),定义形参就相当于在函数内部声明了变量,但是并不赋值。
  • 实参:函数调用时书写的参数(真实数据)。

如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,实参将会赋值给对应的形参。

简单来说,调用函数时有几个形参就得传几个实参。

3、实参的类型

函数在调用时,解析器不会检查实参的类型,实参可以传递任意类型的对象。

任何数据类型,包括函数对象。

示例

# 定义函数1
def fn1(a):
print('a =', a) # 定义函数2
def fn2(b):
print('b =', b) b = 123 # b = 123
b = True # b = True
b = 'hello' # b = hello
b = None # b = None
b = [1, 2, 3] # b = [1, 2, 3] fn2(b)
fn2(fn1) # b = <function fn1 at 0x0000000002555948>

没有类型检查,有时候会导致出现一些问题,如下:

def fn3(a, b):
print(a + b) fn3(123, "456") # 结果:TypeError: unsupported operand type(s) for +: 'int' and 'str'
# 显示不支持字符串和数值相加

所以以后我们在调用函数的之后,一定要看看传递实参的数据类型是否正确。

以后我们学到异常的时候,可以通过异常来解决因传递参数类型错误,而引发的异常。

『无为则无心』Python函数 — 25、Python中的函数的更多相关文章

  1. 『无为则无心』Python函数 — 33、高阶函数

    目录 1.高阶函数的定义 2.体验高阶函数 3.内置高阶函数 (1)map()函数 (2)reduce()函数 (3)filter()函数 1.高阶函数的定义 把函数作为参数传入(把一个函数作为另外一 ...

  2. 『无为则无心』Python函数 — 28、Python函数的简单应用

    目录 1.函数嵌套调用 2.Python函数的简单应用 (1)打印线条 (2)函数计算 (3)打印图形 3.函数的说明文档 (1)函数的说明文档的作用 (2)函数说明文档的语法 (3)查看函数的说明文 ...

  3. 『无为则无心』Python函数 — 29、Python变量和参数传递

    目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...

  4. 『无为则无心』Python函数 — 31、命名空间(namespace)

    目录 1.什么是命名空间 2.三种命名空间 3.命名空间查找顺序 4.命名空间的生命周期 5.如何获取当前的命名空间 1.什么是命名空间 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名 ...

  5. 『无为则无心』Python函数 — 39、Python中异常的传播

    目录 1.异常的传播 2.如何处理异常 1.异常的传播 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播.如果函数中没有对异常进行处理,则异常会继续向函数调用者传播.如果函数调 ...

  6. 『无为则无心』Python日志 — 69、补充:logging.basicConfig()函数说明

    目录 1.basicConfig()函数说明 2.应用 1.basicConfig()函数说明 此函数,通过创建一个带有默认Formatter(格式器)的StreamHandler(处理器),并将其添 ...

  7. 『无为则无心』Python基础 — 63、Python中的生成器

    目录 1.为什么要有生成器 2.创建生成器 (1)简单创建生成器 (2)生成器的使用 3.yield关键词 (1)yield关键词说明 (2)send()方法说明 4.使用yield实现斐波那契数列 ...

  8. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

  9. 『无为则无心』Python基础 — 6、Python的注释

    目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...

随机推荐

  1. Redis 快速集群环境搭建

    环境 Linux :centos 7 redis:redis-5.0.9 Redis 集群环境搭建步骤 早期 redis 版本集群环境搭建需要安装 ruby 运行环境,搭建步骤比较繁琐: redis ...

  2. Linux进阶之给nginx设置登录用户验证

    一.nginx开启访问验证 使用nginx搭建的站点,如果不想让所有人都能正常访问,那么可以设置访问认证,只有用户输入正确的用户名和密码才能正常访问. 在nginx下,提供了ngx_http_auth ...

  3. JQuery 使用教程

    引言 JQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程.JQuery 拥有丰富的选择器,可以非常方便的获取和操作 DOM 元素,而在 JQuery 中所有选择 ...

  4. 如何实现一个简易版的 Spring - 如何实现 AOP(中)

    前言 在上篇 如何实现 AOP(上) 介绍了 AOP 技术出现的原因和一些重要的概念,在我们自己实现之前有必要先了解一下 AOP 底层到底是如何运作的,所以这篇再来看看 AOP 实现所依赖的一些核心基 ...

  5. 安卓开发(2)—— Kotlin语言概述

    安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...

  6. GO学习-(26) Go语言操作mongoDB

    Go语言操作mongoDB mongoDB是目前比较流行的一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. ...

  7. Python Xpath语法

    Python    Xpath语法   一.选取节点 常用的路劲表达式: 表达式 描述 实例   nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点 ...

  8. OpenResty搭建高性能服务端

    OpenResty搭建高性能服务端   Socket编程 Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select.poll.epoll是Linux API提 ...

  9. Count(1),Count(*),Count(column)区别

    count是一种最简单的聚合函数,一般也是我们第一个开始学习的聚合函数,那么他们之间究竟由什么区别呢? 有的人说count(1)和count(*)他们之间有区别,而有的人说他们之间没有区别那么他们之间 ...

  10. 基础BaseController

    1.依赖状态枚举 /** * status enum */ public enum Status { SUCCESS(0, "success", "成功"), ...