调用函数
Python内置了很多有用的函数,可以直接调用。
查看函数的用法,有两种。
1.
http://docs.python.org/3/library/functions.html#abs python官方网站查看函数的用法
2. 利用help(function_name) 查看函数的帮助信息
help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
3.调用函数
abs(100)
abs(-20)
abs(12.34)
3.1 参数个数
调用函数的时候,如果传入的参数数目不对,会报TypeError的错误,并且python会明确的告诉你:abs()有且仅有一个参数,
但是却给了两个。
>>> abs(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)
3.2 参数类型
如果传入的参数数目是对的,但是参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息。
str是错误的参数类型。
>>> abs('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
但是有的函数可以接收 任意多个参数,比如说max(),min()
>>>max(1,2)
2
>>>min(1,2)
1
4.数据类型转换
Python内置的常用函数还包括数据类型转换函数,比如说int()函数可以把其他类型数据转换成整数
>>> int('123')
123
>>> int(12.34)
12
>>> int(True)
1
>>>float('12')
12.0
str(),bool()等函数的使用同理
5.加深对函数的理解:函数的别名
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给函数名赋一个新的变量
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1
定义函数
1.函数定义格式
在Python中,定义一个函数要使用def语句,一次写出函数名、括号、括号里面的参数和冒号,然后在缩进块中编写函数体,函数的返回值用return语句返回,函数在执行到return时,函数就执行完毕,并将结果返回,因此函数内部可以通过 循环和判断来实现复杂的逻辑。
自定义一个求绝对值的my_abs函数为例:
def my_abs(x):
if x<=0:
return -x
else:
return x
my_abs(-10)
10
2. 空函数
如果定义一个什么事也不做的空函数,可以用pass语句
def nof():
pass
空函数的作用:pass语句什么都不做,pass可以作为占位符,当我们没有想好这个函数怎么写的时候,可以先写一个空函数,让代码先跑起来。
pass还可以用在其他语句里面,比如说;
age = 20
age = 20
if age >=18:
pass
#如果说没有这个pass的话
age = 20
if age >=18:
File "<ipython-input-20-ad0f9e33db7b>", line 3
^
SyntaxError: unexpected EOF while parsing
3. 参数检查
在Python的解释器中所进行的参数检查,只会帮我们检查参数的个数,并且抛出TypeError错误,如果参数类型不对,解释器就无法帮我们检查。
#参数个数发生变化
my_abs(1,2)
TypeError Traceback (most recent call last)
<ipython-input-3-a805b5a6712a> in <module>()
----> 1 my_abs(1,2)
TypeError: my_abs() takes 1 positional argument but 2 were given
#自己写的函数传递错误的参数
my_abs('s')
TypeError Traceback (most recent call last)
<ipython-input-4-1689cecc0537> in <module>()
#内置的abs()函数
----> 1 my_abs('s')
abs('s')
<ipython-input-2-8d837d6ae717> in my_abs(x)
1 def my_abs(x):
----> 2 if x<=0:
3 return -x
4 else:
5 return x
TypeError: '<=' not supported between instances of 'str' and 'int'
所以可以看出,当传入不恰当的参数时,内置函数abs会检查出 参数错误,而我们定义的my_abs没有参数检查,会导致if语句出错。出错信息和abs不一样。所以这个函数需要完善。
def my_abs(x):
if not isinstance(x,(float,int)):
raise TypeError('类型出错')
if x>=0:
return x
else:
return -x
my_abs('s')
TypeError Traceback (most recent call last)
<ipython-input-7-1689cecc0537> in <module>()
----> 1 my_abs('s')
<ipython-input-6-daf29ad7771b> in my_abs(x)
1 def my_abs(x):
2 if not isinstance(x,(float,int)):
----> 3 raise TypeError('类型出错')
4 if x>=0:
5 return x
TypeError: 类型出错
4.返回多个值
像C语言一样,Python的函数也是支持返回多个值的
import math
def move(x,y,step,angle):
nx=x+step*math.cos(angle)
ny=y+step*math.sin(angle)
return nx,ny
x,y=move(1,1,1,0) #同时获得返回值
x,y
(2.0, 1.0)
r=move(1,1,1,0)
r
(2.0, 1.0)
#其实不然 Python返回值仍然是个单一值 不过是个tuple,在语法上返回一个tuple可以省略括号,而多个变量可以同时接受一个tuple,按位置赋给对应的值,所以说 Python的函数值其实就是返回一个tuple,但写起来更加方便。
其实不然,