Python编程学习之基础函数
函数概述
函数是Python中重要的组成部分。函数是一段实现某个功能的代码块,有自己的函数名,输入参数和返回值。其中,函数的参数和返回值都可以为空。
函数的定义
Python中函数的定义比较简单。我们使用def关键字能够轻松的定义一个函数。比如,我们定义一个函数,接收两个整数,返回这两个整数相加的和。
示例:求两个数的和。在这个案例中,add叫做函数的名称,a和b叫做函数的参数,a+b是函数的返回值。
def add(a, b):
return a + b
if __name__ == '__main__':
print(add(1, 2))
print(add(11, 22))
print(add(111, 222))
return语句
return是Python内置的关键字,一般用在函数中,用来返回函数执行后的结果。不过,如果一个函数什么都不返回,return是可以省略的,此时函数默认返回None。return后面可以跟变量,表达式等,如果跟的是变量,则返回变量的值;如果跟的事表达式,则会将表达式进行计算,将得到的结果返回。另外,return的后面不仅可以跟一个变量或表达式,还可以跟多个,只需要用逗号隔开即可。当return后面跟多个变量或表达式的时候,表示该元组有多个返回值,多个返回值以一个元素的格式进行返回。
示例:函数没有return语句。
def add(a, b):
print(a + b)
if __name__ == '__main__':
print(add(1, 2))
print(add(11, 22))
print(add(111, 222))
示例:函数return后面有多个返回值。
def add(a, b):
return a + b, a - b, a * b
if __name__ == '__main__':
r1, r2, r3 = add(11, 22)
print(r1, r2, r3)
内部函数
内部函数指的是函数的内部,我们还可以定义函数。比如我们可以让让函数返回一个函数。
示例:内部函数的基本用法。
def outer():
print("外部函数执行")
def inner():
print("内部函数执行")
return inner
if __name__ == '__main__':
inner = outer()
inner()
使用和修改全局变量
如果只是简单的使用全局变量,只需要在函数内部直接调用全局变量名即可。但是,如果要在函数内部对全局变量做修改,并希望修改后的值能够在全局生效,这个时候就需要使用global关键字,声明要使用全局变量,并让修改映射到全局变量。
示例:在函数内部使用并修改全局变量的值。
# 全局变量
a = 11
def add(c):
# 使用全局变量,并让修改能够影响到全局变量
global a
a += 33
# 局部变量
b = 22
return a + b + c
if __name__ == '__main__':
print("全局变量初始值:", a)
print(add(33))
print("全局变量修改值:", a)
函数参数概述
函数的参数可以有多种形式,常见的有必填参数,可选参数,可变数量的参数,可变数量的命名参数。另外,函数有形参和实参的说法。形参指的是我们定义函数的时候,给这个函数定义的所需的参数;实参指的是我们调用函数的时候实际传递的值。比如函数“add(a,b) ”,这里的a和b是形参,我们调用的时候“add(11,22)”,这里的11和22就是实参。
必填参数
必填参数指的是当我们调用该函数时,必须要传递的参数。如果一个函数的参数没有默认值,也没有其他任何的修饰符,那么这个函数的参数就是必填参数。比如在咱们之前学习的add加法函数中,有两个参数a和b,这里的a和b都是必填参数,在调用的时候,如果不进行传递,会抛出异常。
示例:实现两个数相加的函数,a和b都是必填参数。
def add(a, b):
return a + b
if __name__ == '__main__':
print(add(11, 22))
可选参数
可选参数也叫默认参数,即就是函数的参数携带有一个默认值,当调用的时候,可以传实参,也可以不传实参。如果传递了实参,则使用实参作为计算的值,如果没有传递实参,则使用默认值作为计算的值。
示例:使用可选参数。
def add(a=11, b=22):
return a + b
if __name__ == '__main__':
# 使用具体值
print(add(11, 222))
# 部分使用具体值,部分使用默认值
print(add(11))
# 使用默认值
print(add())
可变参数
可变参数指的是函数的变量个数可以是0个,1个或者任意多个。可变参数一般使用“*args”表示,表示可以接收任意多个参数。args是一个可迭代对象,可以通过索引进行取值。本质上,args是一个元组类型。
示例:一个可以求任意多个整数之和的add函数。
def add(*args):
print(args, type(args))
sum = 0
for i in args:
sum += i
return sum
if __name__ == '__main__':
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
可变命名参数
可变命名参数和可变参数一样,支持任意多个参数。不过,和可变参数不同的是,可变命名参数是一个字典,要求传递的时候,要使用“key=value”的方式进行传递。可变命名参数一般是使用“**kwargs”进行定义。
示例:可变命名参数实现加法。
def add(**kwargs):
print(kwargs, type(kwargs))
sum = 0
for k, v in kwargs.items():
sum += v
return sum
if __name__ == '__main__':
print(add())
print(add(a=1))
print(add(a=1, b=2))
print(add(a=1, b=2, c=3))
多种类型参数
函数的参数有多种类型,多种类型的参数可以同时存在。比如,一个函数中,可以同时有必填参数,可选参数,可变参数,可变命名参数。
示例:多种类型的参数在一个函数中。
def add(a, b=22, *args, **kwargs):
sum = a + b
for i in args:
sum += i
for k, v in kwargs.items():
sum += v
return sum
if __name__ == '__main__':
print(add(a=1))
print(add(a=1, b=2))
print(add(a=1, b=2, c=3))
闭包函数概述
闭包函数实际上就是一种遵循规范的内部函数。闭包函数必须返回的事一个内部函数,且这个内部函数中,必须使用了外部函数的变量。一个简单的闭包函数示例如下:
def outer():
# 外部变量
num = 10
def inner():
# 内部函数使用了外部函数的变量
return 10 * 2
# 返回的内部函数
return inner
if __name__ == '__main__':
inner = outer()
print(inner())
匿名函数概述
匿名函数指的是没有函数名的函数,也叫lambda函数。不过,我们可以通过让函数赋值给一个变量名,让匿名函数有自己的名字。匿名函数一般用于高级函数中,作为高级函数的参数进行传递。
示例:使用匿名函数求两个数的和。
# 表示接收两个参数a和b,返回a+b的结果
add = lambda a, b: a + b
print(add(1, 2))
print(add(11, 22))
print(add(111, 222))
递归函数概述
递归函数是一种常用于算法的特殊函数,指的是函数在自己的函数体中又调用该函数自身。递归函数的表现有点像是循环,能够重复的执行很多次结果,每次执行,参数都会发生变化,当执行到一定程度以后,函数退出。需要注意的是,在Python中,函数有递归深度的限制,并不能够无限的递归,这点一定要注意。即就是说,递归函数不适合层度非常什的递归场景。
示例:使用递归函数求阶乘。
def fac(n):
"""递归求阶乘"""
if n < 1:
return 1
return n * fac(n - 1)
if __name__ == '__main__':
print(fac(1))
print(fac(3))
print(fac(5))