(一)调用函数
Python内置了许多有用的函数,可直接调用,可查看官方文档:
Python官方函数文档
可在交互式命令行通过命令[help(abs)]查看[abs]函数的帮助信息。
# 调用函数
# 求绝对值
num1 = -10
print(abs(num1))
# 求最大、小值
nums = [1,2,3,4,5,32,21,23,12]
print(max(nums),min(nums))
(1)数据类型转换:
内置的常用函数包括了数据类型转换函数:
>>> int('123')
123
>>> str(123)
'123'
>>> float('12.21')
12.21
(二)定义函数
(1)定义函数:
使用【def】语句,依次函数名、括号、参数和冒号,在缩进块中写函数体,返回值用【return】返回
# 定义函数返回绝对值
def my_abs(x):
if x >= 0:
return x
else:
return -x
print(my_abs(-10))
(2)空函数:
定义一个什么事也不做的空函数
def noneFun():
pass
(3)参数检查:
调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError
# 参数类型做检查
def my_abs_check(x):
if not isinstance(x,(int,float)):
raise TypeError('错误类型')
if x >= 0:
return x
else:
return -x
print(my_abs_check('-1'))
TypeError: 错误类型
(4)返回多个值:
函数可以同时返回多个值,但其实就是一个tuple
定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2+bx+c=0的两个解
# 一元二次方程的求根
import math
def quadratic(a,b,c):
d = b ** 2 - 4 * a * c
if a == 0 or d < 0:
raise TypeError('无解')
else:
x1 = (-b + math.sqrt(d)) / (2 * a)
x2 = (-b - math.sqrt(d)) / (2 * a)
return x1, x2
print(quadratic(2,3,1))
(三)函数的参数
(1)位置参数:
power(x, n)函数有两个参数:x和n,这两个参数都是位置参数
# x^2
def power1(x):
return x * x
# x^n
def power2(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power2(2,3))
(2)默认函数:
调用power(5)时,相当于调用power(5, 2)
# 默认参数
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(2))
默认参数降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现
默认参数必须指向不变对象
(3)可变参数:
可变参数就是传入的参数个数是可变的,定义可变参数和定义一个list或tuple参数相比,仅在参数前面加了一个*号。
例子:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……:
# 可变参数
def calc(*numbers):
sum = 0
for b in numbers:
sum = sum + b * b
return sum
print(calc(1,2,3,4))
# *nums表示把nums这个list的所有元素作为可变参数传进去
nums = [2,4,6]
print(calc(*nums))
(4)关键字参数:
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。可以扩展函数的功能。
# 关键字参数
def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw)
person('luna',14,city='anshun')
person('alice',12,gender='M',job='teacher')
infos = {'city':'guiyang','job':'teacher'}
person('momo',21,**infos)
【**infos】 表示把infos 这个dict的所有key-value用关键字参数传入到函数的【**kw】参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
(5)命名关键字参数:
限制关键字参数的名字,就可以用命名关键字参数,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
def person1(name,age,*,city,job):
print(name,age,city,job)
person1('luna',11,gender='M',city='anshun',job='IT')
(6)参数组合:
Python中定义函数,可用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可组合使用。
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
任意函数,都可以通过类似func(*args, **kw)的形式调用它。
【*args】是可变参数,args接收的是一个tuple;
【**kw】是关键字参数,kw接收的是一个dict。
def all_fun(a,b,c=0,*args,**kw):
print('a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw)
def all_fun1(a,b,c=0,*,d,**kw):
print('a=',a,'b=',b,'c=',c,'d=',d,'kw=',kw)
args = (1,2,3)
kw = {'d':99,'x':'%'}
all_fun(*args,**kw)
all_fun1(*args,**kw)
可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
(四)递归函数
函数在内部调用自身本身,这个函数就是递归函数。
计算阶乘:
def fact(n):
if n == 1:
return 1
return n * fact(n - 1)
print(fact(3))