Python初学第四天 函数之定义函数

定义函数

在Python中,定义一个函数需要使用def 语句,在后面写上函数名(), 括号中为函数的参数,最后以 冒号 结尾, 然后在缩进块中编写函数体,使用return 语句返回函数的返回值。

以一个自定义的绝对值函数为例。

def my_abs(x):
	if x >= 0:
		return x
	elif x < 0:
		return -x
print(my_abs(-11))

在这里需要注意,一旦函数执行到return ,就会结束执行,并将结果返回,其后面的代码一律无效,所以定义函数时注意 **return ** 的位置。函数内部通过条件判断和循环可以实现非常复杂的逻辑。

如果没有 return 语句,同样也有返回值,但该返回值为 None 空值,return None 可以简写为 return

在Python交互式环境下,定义函数时会出现 的提示,注意一定要加缩进,否则将会报错,结束函数定义后需要按两次回车重新回到**>>>** 提示符下

调用其他文件内的自定义函数

如果在 my_function.py 文件内存在 my_abs 函数,如果想要调用该函数,可以使用 from my_function import my_abs 命令来导入 my_abs 函数,格式为 from 文件名 import 函数名,文件名不带扩展名 .py

空函数

如果想定义一个空函数,可以使用 pass 语句

def null():
	pass

pass 语句什么都不做,但是可以用来做占位符,使代码能运行起来,以后可以添加代码

pass 还可以使用在别的语句里

if age >= 18:
    pass

少了 pass ,运行时就会有语法错误

自定义函数的参数检查

调用自定义函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError

>>> my_abs(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given

但是如果是参数类型不对,Python解释器就无法帮我们检查。试试my_abs和内置函数abs的差别:

>>> my_abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()
>>> abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'

内置函数会检查出参数错误, 而自定义函数没有参数检查,报错的原因是 if 语句出错。

可以在自定义函数中添加参数检查功能,只允许整数和浮点数类型的参数:

首先需要检查输入的参数的数据类型,可以使用 isinstance()

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

添加参数检查后,如果传入的参数类型不是我们设定的,就会抛出错误

>>> my_abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in my_abs
TypeError: bad operand type

返回多个值

自定义函数可以返回多个值,但返回的值实际上是一个tuple
例子:
比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的坐标:
在这里我们用到了数学计算的sincos,所以使用 import math 命令 ,导入 math

import math

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)

原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

但是,使用多个变量来接受 tuple 时,变量数目一定要和 tuple 的元素数目一致,否则会报错

小结

1.自定义函数使用def 定义,需要确定函数名和参数个数,return返回, 如果没有return语句,自动 return Nonereturn None 可以简写为 return

2.如果要调用其他文件里的自定义函数,使用 from 文件名 import 函数名 命令

3.pass 命令用来做占位符,使代码能继续运行下去

4.使用 isinstance(x, (int, float)) 命令判断 x 中是不是 int或 float 变量,如果不是 ,使用 raise TypeError(‘bad operand type’) 使得函数抛出 TypeError(‘bad operand type’) 错误

5.自定义函数可以返回多个值,实质上是返回了一个 tuple, 但是可以用多个变量来接收 tuple 中的元素,但是变量数目一定要与元素数目一致.

练习

在这里插入图片描述 quadratic(a, b, c)
math.sqrt()

# -*- coding: utf-8 -*-

import math

def quadratic(a, b, c):
    if not isinstance(a, (int, float)):
        raise TypeError('bad operand type')
    if not isinstance(b, (int, float)):
        raise TypeError('bad operand type')
    if not isinstance(c, (int, float)):
        raise TypeError('bad operand type')
    m = b*b-4*a*c
    if m >= 0:
        x1 = ( -b + math.sqrt( b * b - 4 * a * c ) ) / ( 2 * a )
        x2 = ( -b - math.sqrt( b * b - 4 * a * c ) ) / ( 2 * a )
        return x1, x2
    else:
        print('函数无解')
# 测试:
print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
print('quadratic(1, 3, -4) =', quadratic(1, 3, -4))

if quadratic(2, 3, 1) != (-0.5, -1.0):
    print('测试失败')
elif quadratic(1, 3, -4) != (1.0, -4.0):
    print('测试失败')
else:
    print('测试成功')

测试成功,输出

quadratic(2, 3, 1) = (-0.5, -1.0) 
quadratic(1, 3, -4) = (1.0, -4.0) 
测试成功 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值