Python函数详解

Python因其灵活性而在数据科学领域被广泛使用,但对于初学者来说,尤其是没有编程背景的人来说,理解Python函数可能是一个挑战。函数是执行特定任务的逻辑分组语句。使用函数来避免重复编写相同的代码,因为随着代码量的增加,代码的可重用性也会降低。本质上,Python函数的最大优势在于代码的可重用性。

使用Python函数还有其他几个优点,包括避免代码重复、提高程序可读性、将复杂问题分解为更简单的问题、减少错误发生的机会以及通过使用函数使修改程序变得更容易。当学习机器学习数据科学时,了解到使用的算法本质上就是函数。本文将涵盖Python函数的基础知识以及如何使用它们。

目录

  • Python函数类型
  • 函数参数
  • 返回语句
  • 参数
  • 变量类型
  • 递归函数
  • Lambda函数
  • Filter()函数
  • Map()函数
  • Reduce()函数

Python函数类型

Python中有两类函数。

  1. 内置函数或预定义函数:这些函数已经由Python定义。例如:id()、type()、print()等。
  2. 用户定义函数或自定义函数:这些函数由用户定义,以简化代码并避免代码重复。
def function_name(Parameter):

这里,def关键字是必须的,return是可选的。下面是一个例子:

def wish(): print("Hello Good Evening")

现在可以调用它:

wish()

每次调用它时,都会打印“Hello Good Evening”。

Python函数参数

让通过一个简单的例子来理解这一点。编写一个函数,输入学生的名字,并按名字打印问候信息。所以,有一点很清楚——在()内必须提供参数。

def wish(name): print("Hello", name, "Good Evening")

如果函数有参数或参数,不能调用它为wish(),因为会得到类型错误。这里,需要提供值,所以可以简单地调用它:

wish("John")

Python返回语句

函数可以返回一些值。根据提供的逻辑,会得到一些结果,那个结果就是返回值。

def add(a, b): sum = a + b return sum

add(10, 20)

没有要求返回值sum,但Python不会给出错误,因为这不是强制性的。然而,不会得到任何值,因为没有调用返回函数。这里,可以像返回了值并将其保存在一个变量中,然后打印输出:

result = add(10, 20)print(result)

或者可以这样做:

print(add(10, 20))

函数返回多个值

Python函数可以返回多个值。

def sum_sub(a, b): sum = a + b sub = a - b return sum, sub

要执行这段代码,应该这样写:

x, y = sum_sub(20, 10)print("The sum is", x)print("The subtraction is", y)

Python中的参数

Python中有几种类型的参数。让看看并理解什么是参数。

让通过一个例子来理解这一点:

def sub(a, b): print(a - b)sub(200, 100)

这里,a = 200和b = 100。知道这一点,因为已经分配了这些位置。所以在位置参数中,顺序很重要。如果改变顺序,结果也会改变。

这里,通过变量提供值,所以位置不重要。但是,参数的数量仍然很重要。

def sub(a, b): print(a - b)sub(a=200, b=100)

这些参数是在已经定义了参数但没有传递它时应用的。让理解这一点:

def identity(name): print("Hello your name is", name)identity()

这将给出位置错误,因为已经定义了参数,但没有传递参数。如果想避免这一点,可以这样做:

def identity(name="Guest"): print("Hello your name is", name)identity()

现在它将执行,并将“Guest”作为默认值。

它可以接收任意数量的参数:

f1(*n)*-> n 可变长参数

它也可以有0个参数。可以像这样拥有可变长参数:

def f1(*n): print("Variable length argument")f1()f1(10)f2(10, 20, 30)

它们在内部都被保存为元组,所以可以访问它们。

变量类型

有两种类型的变量:全局变量和局部变量。全局变量总是在函数外面,并且可以被所有函数访问,而局部变量是在特定函数中定义的。在Python中,可以有同名的全局变量和局部变量。

a = 10 # 全局变量 def f1(): a = 20 # 局部变量 print(a) f2(): print(a)

如果将输出作为:

f1()f2()

那么需要理解,在第一种情况中,即f1函数中a = 20,所以输出将是20,不管全局变量如何。而在f2中,输出将是10,因为没有在f2中定义局部变量,所以它将取全局变量的值。

递归函数

顾名思义,递归函数是调用自身的函数。可以编写简洁的代码来帮助解决复杂问题。这里有一个例子:

def factorial(n): if n == 0: result = 1 else: result = n * factorial(n-1) return result

* 最大递归深度是995次,它可以调用同一个函数。

Lambda函数

这些是没有名称的函数,或者可以被称为无名称函数或匿名函数。它们通常用于即时使用或一次性使用,不需要再次使用。

lambda input argument: expression

例如,计算一个数的平方:

lambda n: n*n

这里有一个快速的例子:

s = lambda a, b: a + bprint(s(2, 4))

使用filter()函数简化代码

filter(function, sequence) 这里,一个参数是filter函数本身的函数。假设想要一个从0到10的列表,只包含偶数。现在,filter函数格式是:

filter(function, sequence)

filter函数中使用的函数参数用于验证条件是否为真。如果为真,则打印序列参数,如果为假,则不打印。

l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def iseven(n): if n % 2 == 0: return True else: return False l1 = filter(iseven, l)

但有一件事需要改变——filter的默认返回类型是filter对象,所以需要将其转换为列表。

l1 = list(filter(iseven, l))print(l1)

Map()函数理论

对于每个序列,应用某个函数并生成新值。例如,假设有l = [1,2,3,4,5]。想要所有值的平方。

def squareit(n): return n * n l1 = list(map(squareit, l))print(l1)

也可以用于多个序列。

这里,如果有10个输入值,那么输出是10或少于10。而在reduce函数中,无论元素的数量如何,元素的序列最终变成一个。

l = [10, 20, 30, 40, 50]reduce(lambda x, y: x + y, l) from functools import reduce
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485