在Python中,函数是一段可重复使用的代码块,用于完成特定的任务。函数可以接收输入参数(也称为参数或实参),执行特定的操作,并返回一个结果(也称为返回值,默认情况下返回为空)。
一、创建函数
创建函数
在Python中创建函数使用def
关键字实现,如下(实现两个数值相加):
def add():
a = 1
b = 2
print("a加b的值为: %d" % (a+b))
函数创建之后如果不去调用的话执行代码时是不会执行函数中的代码的。
调用函数
函数的调用格式为:函数名()
,即函数名后加上括号则表示要调用某个函数。如调用上方的add函数。
def add():
a = 1
b = 2
print("a加b的值为: %d" % (a+b))
add() # 调用函数
代码执行结果:
二、参数
数据可以作为参数从函数外部传入到函数内部中使用,参数名在创建函数时的括号中进行指定,可以根据需求来添加任意数量的参数,各个参数之间通过逗号来隔开。
2.1 形式参数(形参)
形参是在函数定义时声明的参数,用于接收传递给函数的值。它们充当了函数内部局部变量的角色,只在函数内部可见。
必需参数
调用函数时必须提供相应数量和顺序的实际参数。例如,在定义一个计算两个数之和的函数时,可以将两个数作为必需参数传递给该函数。
def add(a, b):
print("a加b的值为: %d" % (a+b))
add(1, 2) # 调用函数,两个必需参数
创建函数时括号中的参数a和b
称为函数add
的形式参数,其仅作用于函数add内部。如调用时没有传入必需参数的话,代码执行会报错如下:
默认参数
在定义函数时,可以为某些形参指定默认值。如果调用者没有提供对应的实际参数,则使用默认值。这使得某些参数变成了可选项。
def add(a, b=5):
print("a加b的值为: %d" % (a+b))
add(1)
参数b为默认参数,其默认值为5,所以代码执行时输出为a加b的值为: 6
如过提供了对应的参数的话,则使用传入的实际参数。
def add(a, b=5):
print("a加b的值为: %d" % (a+b))
add(1, 2)
代码执行结果为:
2.2 实际参数(实参)
实参是在调用函数时传递给函数的值。实参可以是常量、变量、表达式或其他可计算的值。
位置参数
位置参数:按照形参的顺序,将实参逐个传递给函数。位置参数的数量和顺序必须与形参一致。
def add(a, b=5):
print("a加b的值为: %d" % (a+b))
add(1, 2) # 调用add函数并传入两个位置参数(实参)
关键字参数
关键字参数:使用形参名称作为关键字,将实参传递给函数。这样可以不考虑实参的顺序,只需确保每个实参都有对应的形参。
def add(a, b=5):
print("a加b的值为: %d" % (a+b))
add(a=1, b=2) # 调用add函数并传入两个位置参数(实参)
注意:如使用关键字参数进行传参,后面的参数都要使用关键字,不可再使用位置参数,否则报错。如下:
因此,若要位置参数和关键字参数结合使用的话必须是先提供所有的位置参数然后才能够使用关键字参数。
不定参数
不定参数是指一个函数的参数个数是可变的,即可以传递任意数量的参数。
在Python中,可以使用一个或者两个星号‘*’来表示不定参数,一个星号表示位置参数的传递,两个星号是表示关键字参数的传递。如下位置参数的传递:
def add(*args):
print(args)
add(1,2,3,4,5,6)
代码执行结果为:
也就是说,不定参数(位置参数)传递时,在函数中传递过来的位置参数会依次打包于一个元组之中,如要对这些参数进行使用则需要从元组中进行提取。例如将这些数值进行求和。
def add(*args):
s = 0
for i in args:
s += i
print("求和结果为:%d" % s)
add(1,2,3,4,5,6)
输出结果:
再如关键字参数的不定参数传递。
def add(**kwargs):
print(kwargs)
add(a=1,b=2,c=3)
代码执行结果为:
也就是说,关键字参数的不定参数传参后,将参数名作为键,其值为对应键的值打包在字典之中,那么在函数内部使用时直接以键值对进行取值即可。
def add(**kwargs):
a = kwargs['a']
b = kwargs['b']
c = kwargs['c']
print("求和结果为: %d" % (a+b+c))
add(a=1,b=2,c=3)
输出结果为:
三、作用域
作用域是指在程序中定义变量的区域,它决定了变量的可见性和生命周期。在Python中,有以下几种作用域:
- 全局作用域(Global Scope)
- 局部作用域(Local Scope)
- 嵌套作用域(Enclosing Scope)
- 内置作用域(Built-in Scope)
3.1 全局作用域
全局作用域是在整个程序中都可访问的范围。在全局作用域中定义的变量可以被程序中的任何函数、类或模块使用。
如下:
a = 1
b = 2
def add():
print(a+b)
add()
上方代码中,变量a和变量b就是两个全局作用域变量,简称全局变量。全局变量就是在程序的全局作用域中定义的变量,可以在程序中的任何地方被访问和修改。
在函数中,如果要声明一个全局变量的话,则需要使用global来进行声明。
a = 1
b = 2
def add():
global c
c = 3
print(a+b+c)
add()
print("新的全局变量为c,其值为 %d" % c)
输出结果:
3.2 局部作用域
局部作用域是在函数内部定义的范围。在局部作用域中定义的变量只能在该函数内部访问,无法在其他函数或全局范围内访问。
def add():
a = 1
b = 2
print(a+b)
add()
上方代码中,add函数中的变量a和变量b就是函数add中的局部作用域变量,简称局部变量
局部变量是在程序的局部作用域中定义的变量,它们只能在所属的特定作用域内被访问和使用。局部变量通常在函数内部或某个代码块中定义,其作用范围仅限于该函数或代码块。如上方代码中的a和b就只能够在函数add内部进行使用与修改,在函数外部是无法进行使用的,因此,在不同函数的调用之间,同名的局部变量是不会互相干扰的。
嵌套作用域在下篇文章讲解函数嵌套时再进行说明,内置作用域请上翻至3.1查看。
四、返回值
学习完作用域之后可以知道如果想要使用函数执行后的结果那么可以将执行后的结果声明为全局变量,这样在函数外部才能够进行应用,但是这样容易引起变量之间的冲突与资源之间的竞争。所以,要想应用函数调用后的结果可以使用return来将函数中的数据返回出去,通过函数外部的变量来进行接收。
def add():
a = 1
b = 2
return a+b
s = add()
print("求和:%d" % s)
如上方代码,返回a加b的值,该值通过函数外部的变量s进行接收即可在函数外部进行使用。
return的作用
return的作用主要为以下两点:
-
终止函数代码执行
当代码在函数内部执行遇到return时,会立即终止函数内部的代码执行(跳到函数外部逻辑继续执行)。不管return之后是否还有代码,都不会再继续往下执行。如:
def add(): a = 1 b = 2 return a+b print(123) s = add() print("求和:%d" % s)
输出结果:
-
将return后的内容返回到函数外部
return能够将其后面的内容返回到函数外部进行使用,其能够返回单个值也能够返回多个值,当返回多个值时,这些值会被打包到一个元组之中。
附(pass 语句)
如因某种原因写了无内容的函数,可以使用pass语句来避免代码执行出错。
pass的作用就是一个占位语句,没有实际的逻辑意义。
def uselessFunc:
pass