Python程序开发——第五章 函数

简介: Python程序开发——第五章 函数

一、函数的定义


函数,也就是为了提高代码复用性、降低代码冗余的一种方式,将功能代码定义为一个函数。


(一)def关键字定义函数


通过关键字def来定义函数,函数要有函数名和参数以及函数体等等。

def后跟函数名和圆括号(),括号内是参数(参数也可以为空,此时则称该函数为无参函数),且函数内容以冒号:来表示这个函数的起始。

函数内的内容,也就是函数体,它是实现函数具体功能的代码。

另外还有return语句,它用于将函数的处理结果返回给调用该函数一方或者退出函数,若函数没有返回值,则不需要加上return语句,即相当于返回none。

def 函数名 (参数或参数列表):
  函数体
  [return 语句]

(二)形参和实参


形参,即形式参数,可以说它是虚拟变量,而实参,即实际参数,即调用函数时传入的参数。

形参的目的是接收实参,被调用时分配内存单元,实参赋值给形参, 调用结束后, 形参释放所分配的内存单元 。注意实参是以按地址传递方式将值传递给形参,即实参的地址传递给形参,实际上实参是程序中使用的参数。


(三)全局变量和局部变量


简单的来说,局部变量是在函数内定义的变量,只能在定义它的函数中使用;而全局变量,是定义在函数之外的变量,它可以在程序的任何位置使用。

在函数中只能访问全局变量,但不能修改全局变量,若要在函数内部修改全局变量的值,则需在函数中通过global关键字声明。

例如下列python代码,在fein()函数中修改全局变量a,首先要对它该变量使用global关键字声明:

a = 1
def fein():
    global a#通过global关键字声明全局变量
    a *= 2
    print(a)
fein()#调用fein()函数

运行结果如下:

1667098506138.jpg


二、函数的调用


通过函数名(参数或参数列表)来调用函数。

下列python代码,input_number()函数是个无参函数,它通过input_number()来调用该函数,number_max()函数带有三个参数,在调用number_max()时向该函数传入了三个实参,该函数的功能是输出传入的参数:

def input_number():
    print("这是一个无参函数。")
def number_max(x, y, z):
    print(x, y, z)
input_number()
number_max(3, 0, 1)

运行结果如下:

1667098537607.jpg


三、函数的参数传递


根据实参传递给形参的方式,可分为必需参数、关键字参数、默认参数和不定长参数。


(一)必需参数


必需参数,即将实参按照位置顺序传递给形参。

如下python代码,div()函数中的实际参数和形式参数有相应的位置关系,分别传递给不同的形参:

def div(num1, num2, num3):
    print(num3 + num1 - num2)
div(3,2,9)
def content_input(content):
    print(content)
content_input("内容。。。")

运行结果如下:

1667098573079.jpg


(二)关键字参数


可以通过形参=实参的形式,根据形参的名称进行传递。

如下python代码:

def info(name, sex, age):
    print(f"名字:{name}")
    print(f"性别:{sex}")
    print(f"年龄:{age}")
info(name="xiaoming", sex="男", age=18)

运行结果如下:

1667098600531.jpg


(三)默认参数


在调用函数时,若没有传递值给形参参数,则会使用默认参数,即参数的默认值。若对带有默认值的形参传递,则实参的值会覆盖设置的默认值。

另外函数中,调用默认参数应放在其它实参后。

例如下列python代码:

def info(name, sex, age, garde=1):
    print("名字: ", name)
    print("性别: ", sex)
    print("年龄: ", age)
    print("年级: ", garde)
info(name="xiaoming", sex="男", age=18)


调用该函数时,由于未给garde传参,形式参数garde使用默认值1,运行结果如下:

1667098627886.jpg

若形式参数garde使用传入值,则会覆盖设置的默认参数,python代码如下:

def info(name, sex, age, garde=1):
    print(f"名字:{name}")
    print(f"性别:{sex}")
    print(f"年龄:{age}")
    print(f"年级:{garde}")
info(name="xiaoming", sex="男", age=18, garde=2)


运行结果如下,输出的年级garde值为1,默认值garde=1被覆盖:

1667098654212.jpg


(四)不定长参数


当调用函数时,传入的参数不确定时,就可使用不定长参数,它可处理比声明时更多的参数。


1、元组形式导入(*)


在创建函数时,将参数前面加上*,加上*号的参数被接收后会以元组的形式导入。

下列python代码,调用函数时2传递给the_one形参,后面的3……都被传递给the_else形参:

def f(the_one, *the_else):
    print(the_one)
    print(the_else)
f(2, 3, "s", "t", 0, "c")

运行结果如下:

1667098690233.jpg


2、字典形式导入(**)


在创建函数时,将参数前面加上**,加上**号的参数被接收后会以字典的形式导入。

下列python代码,调用函数时2传递给the_else形参,后面的a=0……都被传递给the_else形参:

def f(the_one, **the_else):
    print(the_one)
    print(the_else)
f(2, a=0, b=0.1, c=0.2)

运行结果如下:

1667098716791.jpg


四、匿名函数


通过使用lambda来创建匿名函数,它是一种无需定义函数名的函数,可以通过变量来记录该函数。

相比普通函数,其只能是单个表达式,即lambda函数的语法中只包含一个语句,所以其功能比较单一且不能被其它程序使用。

下列python代码,通过变量number_sum记录该匿名函数:

number_sum = lambda a, b, h: (a + b) * h * 0.5
print(number_sum(2, 3, 1.5))


运行结果如下:

1667098741419.jpg


五、递归函数


递归函数,它可直接或间接地调用函数自身。其中函数递归时,要有递归公式和边界条件,递归公式用于分解规模较大的问题为规模较小的问题,边界条件用于终止递归函数。

例如下列python代码:

def f(x):
    if x == 1:
        return 1
    else:
        return x + f(x - 1)
print(f(4))


运行结果如下:

1667098766278.jpg

可以这样理解,通过递归依次求得f(x-1)的值,从而得到f(x)的值,如下图:

image.png

相关文章
|
2月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
81 0
|
23天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
125 67
|
17天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
42 18
|
8天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
40 8
|
18天前
|
Python
Python中的函数
Python中的函数
31 8
|
25天前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
1月前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
47 5
|
2月前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
2月前
|
存储 数据安全/隐私保护 索引
|
1月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。