对于函数,我的理解是 抽象的方法。你不需要它是内部结构是什么样子的,只要遵从它给你的规则来使用,就能得到想要的效果。
调用函数
在 Python 中,有很多内置的函数供我们调用,常用的函数如下:
help(obj) | 帮助,解释传入的obj |
type(obj) | 查看传入obj的类型 |
callable(obj) | 查看obj是否可以像函数被调用 |
isinstance(obj,cls) | 查看obj的数据类型是否符合cls中的数据类型 |
chr(i) | 把一个 ASCII 数值变成字符 |
ord(i) | 把一个字符变成 ASCII数值 |
str(obj) | 把obj的数据格式转换成字符串 |
list(seq) | 把一个序列转成 list |
tuple(seq) | 把一个序列转成 tuple |
dict(list) | 把 list 转为 dict , 要求 list 类型:[ ['key',value],['key',value]] |
int(x) | 把传入的值转成整型 |
bool(x) | 把传入的值转成布尔型 |
float(x) | 把传入的值转成浮点型 |
hex(x) | 把整数x变成十六进制表示的字符串 |
max(seq) | 返回序列中最大的数 |
min(seq) | 返回序列中最小的数 |
abs(x) | 把传入的值转成绝对值 |
help的示例如下:
其他函数使用示例如下:
同上,其他函数使用示例如下:
函数是可以起别名的,比如,绝对值函数 abs ,起别名为 jd ,示例如下:
解释一下,上述代码中,定义了一个变量 jd ,并把变量指向 abs 函数,所以可以通过 jd 调用函数 abs 。
更多函数,请查询官网:https://docs.python.org/3/library/functions.html
定义函数
在 Python 中,定义函数要使用 def 语句,使用方式如下:
def 函数名(参数):
以绝对值函数 abs 的简化示例如下:
输入完成后敲击回车,会进入下一行,若输入完成,没有继续要输入的东西了,再出现上图示例三个点后,再敲击下回车键即可。
若想先写个空函数,留着以后使用,需要再执行方法代码出写 pass ,否则会报错。正确写法如下:
使用自己定义的函数时,有一点需要注意,在调用函数的时候,需要加括号,尤其是无参函数的时候,示例如下:
如上图所示,在没有写括号时,系统报错了,写上括号,正常~
继续往下,我们通过测试函数想要得到的是数字的绝对值,如果输入字符串呢?
在这里我发现了Python2.X 和 Python3.X 版本的区别问题,嗯,比较麻烦。。
在Python2.X里,还用上面的那个求绝对值的测试函数,输入字符串,得到的如下方所示:
>>> nabs('A')
'A'
而在Python3.X中,得到的如下方所示:
>>> nabs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()
一个报错,一个不报错。。。介于上述结果,我决定以后大部分用自带的代码格式做示例。
关于Python2.X和Python3.X的版本问题,我找到一篇比较全的-->传送门<--感兴趣的可以看下,下述段落文字是百度到的:
一到2018年12月31日为止,所有的NumPy版本都将完全支持Python2和Python3。
从2019年1月1日开始,任何新的功能版本都只支持Python3。
2020年1月1日,我们将结束对Python2支持版本最后的社区支持。
为了完善测试的绝对值函数,我们需要加一个判断,若输入的不是数字,告诉用户,传参传错了,示例如下:
如上图所示,其中 if not 是将后面判断的结果取反,比如:条件是 2>1,应该返回的True ,使用 if not 返回的就是 False ;
isinstance是判断传入数据类型的函数,判断传入值得数据类型是否符合 int 或 float ;
raise 是当程序出现错误,手动抛出异常。一旦执行了 raise 语句,raise 后面的语句将不能执行。TypeError 是Python 自带的常见的异常类型。异常的相关问题,后文会有专门的一篇来说明。完成后会在此处加链接。
在 Python 中,函数可以返回多个值,但返回的方式是以 tuple 来实现的。在 Python 语法中,返回一个 tuple 可以省略括号,而多变量可以同时接受一个 tuple,按照位置赋值,所以说,返回多个参数其实是返回一个 tuple,这样写比较方便。
如果,你已经把函数定义保存为 .py 的文件了,存储时一定要存储在 python 安装同一路径下。调用 .py 里的函数,如下所示:
>>>from myabs import my_abs
>>>my_abs(-100)
100
其中,from 后面的第一个位置上的是 .py 的文件名,import 后面的是调用的函数名,连起来是 取 myabs.py 文件中的 my_abs 方法。调用成功后,直接输入调用的函数名就可正常使用函数。
下面写一个 解 一元二次方程 的示例,有很多不完善,相互学习:
import math
def abss(a,b,c):
if (math.pow(b,2)-4*a*c)<0:
return 'error'
else:
x1 = (-b+math.sqrt(math.pow(b,2)+-4*a*c))/2*a
x2 = (-b-math.sqrt(math.pow(b,2)+-4*a*c))/2*a
if x1 == x2:
return ('x only one,x='+str(x1))
else:
return('x1='+str(x1)+' ,x2='+str(x2))
运行结果如下图:
如上,返回的是字符串。测试调试时需注意,在软件中改好后,运行一遍出错后,一定要先用 exit() 关闭当前CPython编译器,再在cmd 上输入python 打开编译器,重新输入读取本地文件方法的语句,再重新输入参数执行函数,否则会重复报一个错,即使改变,还是报错。
本篇结束,继续学习~~