今天学习了python中的函数,函数和方法的区别在于:函数写在类外,方法写在类里。调用函数使用类名,调用方法需要实例化对象!此篇博客主要讲述自定义函数。

函数语法:

def funcname(parameter_list):
    pass
  • 通过有无参数可分为有参函数和无参函数
  • 通过有无返回值可分为有返回值函数和无返回值函数

函数在定义过程中可以定义多个变量,return返回也可以返回多个值,除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

def area(a, b, c):
    return (((a + b + c) * (a + b - c) * (a + c - b) * (b + c - a))**(0.5)) / 4


def perimeter(a, b, c):
    return a + b + c


a = float(input("请输入三角形第一个边边长:"))
b = float(input("请输入三角形第二个边边长:"))
c = float(input("请输入三角形第三个边边长:"))
print("面积为:", area(a, b, c))
print("周长为:", perimeter(a, b, c))

该函数传入abc三个值,通过两个函数分别计算三角形的面积(海伦公式)和周长,返回1个值。

def jiuJiu():
    for i in range(1, 10):
        for n in range(1, i + 1):
            j = i * n
            print(i, "*", n, "=", j, end="\t")
        print("")


jiuJiu()

该函数无参,无返回值,直接在函数内部print内容(九九乘法表)

def jisuan(a):
    i = 0
    b = []
    for i in range(0, a + 1):
        if (i % 5 == 0 or i % 6 == 0) and i % (5 * 6) != 0:
            b.append(i)
            i += 1
    return b


a = int(input("请输入最终值:"))
print(jisuan(a))

该函数返回一个list

一般来说还是有参有返回值的函数比较常用,例如MD5加密。

注:函数通过压栈方式调用,执行完立刻弹栈释放内存

递归函数:

递归理念展示:
递归:自 身 调 用 自 身
代码展示:

def ji(max):
    if max <= 950 and max > 0:
        i = int(ji(max - 1))
        b = max * i
        return b
    else:
        return 1


a = int(input("请输入要求到的值:"))
print(ji(a))

该代码使用递归的方式求从1到输入数字的积,因为递归时不停的压栈会对内存造成很大负担,因此在递归超过1000次时,系统会自动报错停止。因此判断条件中有if max <= 950

匿名函数:

语法为:

lambda parameter_list: expression

等同于:

def ***(parameter_list): 
	return expression

匿名函数简化了代码,但是降低了可读性,在团队项目中对其他成员不友好。

总结

除了自定义函数之外,python本身还有一大堆的全局函数,还可以通过import其他类库来调用其他开发者写好的函数或方法。同时因为python本身弱数据类型的特性,python可以将其他函数当做参数传进另一个函数内运行。

另:按照PEP8代码规范,自定义函数与其他代码直接需间隔2行!