1. Python函数的定义和调用
在Python中,函数是一个可以执行指定任务的独立代码块。函数是一个代码块,可以接收参数,进行计算并返回结果。Python中定义函数使用def关键字,格式如下:
def function_name(parameters):
"""docstring"""
#函数体
return [expression]
1.1.函数定义详解
函数定义中,除函数名称外,其他参数都是可选的。函数名称必须以字母或下划线开头,不能以数字开头。在函数定义的开始和结束之间,是函数体,它包含在函数调用时执行的代码。如果函数需要返回数据,使用return语句后跟表达式(可选),从函数中返回值。如果没有返回值,return语句可以省略。函数说明字符串(docstring)是可选的,但是高度推荐。它用于描述函数的作用和行为,可以通过help()方法查看。关于函数定义需要注意以下几点:
函数必须在调用之前定义
函数可以接收零个或多个参数
参数可以是必需参数(必须的),默认参数或可变参数
函数可以不返回任何值,默认返回None
函数代码块以冒号开始,并缩进
1.2.函数调用
调用函数可以通过函数名和传递给它的参数来实现。如果函数在函数定义中返回值,则可以将返回的值存储在变量中,如下所示:
def add(a,b):
return a+b
result = add(4,5)
print(result)#9
上面的示例中,add()函数接受两个参数,将它们相加并返回结果。函数在调用时将参数传递给它,并将返回值存储在result变量中,然后将结果打印到控制台上。
2. Python函数的参数
在 Python 中,有三种类型的函数参数:
必需参数
关键字参数
默认参数
不定长参数
2.1.必需参数
必需参数顾名思义,就是必须的参数。调用函数时,Python解释器必须按顺序将参数传递给函数。因此,必需参数未按顺序传递或未传递时调用函数会报错。
def multiply(a,b):
return a*b
print(multiply(4))#TypeError: multiply() missing 1 required positional argument: 'b'
上面的示例中,multiply()函数接受两个参数,如果您尝试仅提供一个参数,Python解释器将引发错误。
2.2.关键字参数
关键字参数与必需参数相反,它们在调用函数时不按顺序传递,而是根据参数名称进行传递。正如它的名字所示,关键字参数使用关键字作为名称,并将参数的值赋给它们。
def print_person_info(name, age):
print("Name:", name)
print("Age:", age)
#关键字参数调用
print_person_info(age=28, name="Tom")
上面的示例中,print_person_info()函数接受两个参数name和age,并使用关键字参数调用它们。在函数调用中,参数可以按任何顺序传递。
2.3.默认参数
默认参数指的是在函数定义中为形式参数指定的值。如果调用函数时没有为该参数提供值,则使用默认值。在函数定义时,可以为一个或多个参数指定默认值,如下所示:
def print_person_info(name, age=18):
print("Name:", name)
print("Age:", age)
#提供两个参数
print_person_info("Tom", 28)
#仅提供一个参数
print_person_info("Jerry")
上面的示例中,print_person_info()函数接受两个参数,其中age参数在函数定义中指定了默认值18。在第一个函数调用中,提供了两个参数,并覆盖了age的默认值。在第二个函数调用中,仅提供了一个参数,并使用了age的默认值。
2.4.不定长参数
在 Python 中,有两种类型的不定长参数:
不定数量的参数
不定数量的关键字参数
2.4.1.不定数量的参数
不定数量的参数指的是在函数定义中没有指定数量的参数。使用*运算符可以在函数定义中声明它们,并通过它们收集多个参数。可以根据需要在函数调用中提供任意多个参数,如下所示:
def print_colors(*colors):
for color in colors:
print(color)
print_colors("red", "green", "blue")
上面的示例中,print_colors()函数中的*colors参数表示它采用不定数量的参数。在函数调用中,可以传递任意数量的参数,函数将使用传递的参数并循环遍历它们并打印它们。
2.4.2.不定数量的关键字参数
不定数量的关键字参数是指在函数定义中没有指定数量和名称的关键字参数。使用**运算符可以在函数定义中声明它们,并在函数中访问它们。当调用函数时,可以按任意顺序使用任意数量的关键字参数,如下所示:
def print_person_info(**person_info):
for key, value in person_info.items():
print(key, ":", value)
print_person_info(name="Tom", age=28, sex="male")
上面的示例中,print_person_info()函数使用**person_info参数指定它采用不定数量的关键字参数。在函数调用中,可以传递任意数量的关键字参数,函数将使用传递的参数并循环遍历它们并打印键值对。
3. Lambda函数
Lambda函数是Python中的一种匿名函数。它是一个单行函数,其定义方式是使用lambda关键字,其基本语法如下:
lambda arguments: expression
Lambda函数的参数可以是任何数量的,但是表达式必须是单个语句。Lambda函数返回表达式的结果,而无需使用return语句。
multiply = lambda x, y: x*y
print(multiply(4, 5))#20
上面的示例中,lambda函数接受两个参数x和y,并返回它们的乘积。使用lambda函数可以在一行代码中定义一些简单的函数,而无需使用常规函数的所有附加功能。
4. 函数作用域
Python中没有块级作用域,而是具有函数级作用域。这意味着在函数中定义的变量仅在函数内部可用。
def some_function():
var_inside_function = "I'm only visible inside some_function()"
print(var_inside_function)
some_function()
#以下行会抛出异常:NameError: name 'var_inside_function' is not defined
print(var_inside_function)
上面的示例中,var_inside_function变量在函数内部定义,因此只能在函数内部使用。在函数外部调用变量会导致NameError。
5. 全局变量与局部变量
全局变量定义在代码的最高级别,因此可以在代码中的任何地方使用和修改它们,包括函数内部和外部。但是,如果函数内部有一个同名变量,则在函数内部访问该变量时,该变量的值将优先于全局变量。
global_variable = 10
def some_function():
local_variable = 5
print("local variable:", local_variable)
print("global variable inside function:", global_variable)
some_function()
print("global variable outside function:", global_variable)
#以下行会抛出异常:NameError: name 'local_variable' is not defined
print("local variable outside function:", local_variable)
上面的示例中,global_variable是一个全局变量,可以在函数内部和外部访问。some_function()函数定义了一个名为local_variable的局部变量。在函数内部访问变量时,将使用局部变量的值而不是全局变量的值。在函数外部访问变量时,它将使用全局变量的值。在函数外部不能访问局部变量。
6. 递归函数
递归是一种通过调用自身来解决问题的方法。Python中的递归函数是一个函数,它将自身调用,将问题拆分为更小的问题,并在基本情况下返回解决方案。调用递归函数的过程称为递归。
def factorial(num):
if num == 1:
return 1
else:
return num * factorial(num-1)
print(factorial(5))#120
上面的示例中,factorial()函数是递归函数。它调用自身并将参数拆分成更小的问题,直到找到基本情况并返回解决方案。
7. 方法与函数的区别
方法和函数可以被视为Python中的两个概念,它们之间存在一些区别。方法是与对象相关联的函数。由于Python中一切皆对象,因此在Python中方法和函数之间的区别通常不是很明显。
函数是一个独立的代码块,可以在程序的任何地方使用
方法是附加到对象上的函数,只能在该对象上调用
函数没有任何附加的参数,而方法有一个附加的self参数
函数可以使用关键字参数,而方法不能
8. 总结
Python函数是一个非常强大和有用的概念。它们是编写Python程序的基本模块,使代码更加结构化,方便重新使用。Python的函数可以接收任意数量的参数,可以有默认值,可以返回任意数量的值,可以使用lambda函数和递归函数。此外,Python还有全局变量和局部变量的概念,使我们可以在代码中使用变量。函数还可以与对象一起使用,创建方法。