买网站账号做推广,合肥网站建设服务平台,自己建一个电商网站,wordpress被镜像概述 在上一节#xff0c;我们介绍了Python的数据类型#xff0c;包括#xff1a;数字、字符串、列表、元组、集合、字典等内容。在本节中#xff0c;我们将介绍Python的函数。在Python中#xff0c;函数是一段可以重复使用的代码块#xff0c;它可以提高代码的可重用性和…概述 在上一节我们介绍了Python的数据类型包括数字、字符串、列表、元组、集合、字典等内容。在本节中我们将介绍Python的函数。在Python中函数是一段可以重复使用的代码块它可以提高代码的可重用性和可维护性是编程中非常重要的概念。 在C/C、Java等其他编程语言中基本都存在函数的概念。那么为什么要使用函数呢因为函数具有以下优点。 可定制性函数可以根据需求定制以满足不同的功能需求。 可重用性函数可以重复使用避免重复编写相同的代码。 可维护性函数可以降低代码的复杂性提高代码的可维护性。 函数的定义 在Python中可以使用def关键字定义一个函数其格式如下
def function_name(parameters):docstringfunction_body 其中function_name是函数的名称parameters是函数的参数列表最后面是冒号冒号后面的内容需要缩进。docstring是函数的文档字符串用于描述函数的作用和用法。function_body是函数的主体部分包含函数的逻辑代码。 函数的参数放在小括号里面参数可以有一个或多个也可以没有多个参数之间使用逗号进行分隔。
# 没有参数
def my_print():print(hello)# 一个参数
def print_text(text):print(hello, text)# 多个参数
def print_sum(x, y):print(sum:, x y) 函数可以通过return语句返回一个值。如果函数没有return语句或者return语句没有跟任何值则函数返回默认的None。
# 不带return默认返回None
def test1():print(hello CSDN)# return没有跟任何值默认返回None
def test2():print(hello world)returndef Add(x, y):return x y 函数的调用 定义函数后可以通过函数名加上参数列表的方式调用函数。调用函数时将实际参数传递给函数的参数列表。
# 统计文本中的单词数量
def count_words(text):words text.split()count len(words)return countdef show_info(name, age):print(name is, name, , age is, age)# 调用上面定义好的函数
count count_words(hello CSDN)
# 输出2
print(count)
# 输出name is Mike , age is 16
show_info(Mike, 16) 参数的传递 在上一节我们曾提到数字、字符串、元组属于不可变数据类型列表、集合、字典属于可变数据类型。 当函数的参数为不可变数据类型时参数的传递与C中的值传递类似。比如有一个函数func(a)传递的只是a的值没有影响a对象本身。如果在func(a)内部修改a的值则是新生成一个a的对象修改后func外部的a不会受到影响。
def test1(a):# 输出66print(a)a 100# 输出100print(a)a 66
test1(a)
# 不可变数据类型仍然输出66
print(a) 当函数的参数为可变数据类型时参数的传递与C中的引用传递类似。比如有一个函数func(a)传递的是a的地址。如果在func(a)内部修改a的值修改后func外部的a也会受到影响。
def test1(a):# 输出[C, S, D]print(a)a.append(N)# 输出[C, S, D, N]print(a)a [C, S, D]
test1(a)
# 可变数据类型输出[C, S, D, N]
print(a) 函数的参数主要有五种不同的类型必需参数、默认参数、不定长参数、强制关键字参数、强制位置参数下面分别进行介绍。 必需参数调用时必须传递的参数如果不传递运行时会引发TypeError异常。必须参数既可以按照位置逐一传递也可以使用关键字指定的方式传递此时不用与定义时的参数顺序保持一致。
def show_info(name, age, gender):print(f{name}, {gender}, is {age} years old)# 输出Mike, Male, is 25 years old
show_info(Mike, 25, Male)
# 输出Tom, Female, is 32 years old
show_info(Tom, genderFemale, age32)
# 报错missing 1 required positional argument: gender
show_info(Jim, 28) 默认参数定义时参数给定了默认值调用时可以传递该参数也可以不传递该参数不传递则使用默认值。
def greet(name CSDN):print(fHello, {name})# 输出Hello, CSDN
greet()
# 输出Hello, World
greet(World) 不定长参数在Python中可以使用两种方式定义不定长参数。一是使用一个星号*作为参数前缀将该参数定义为不定长位置参数该参数可以接收任意数量的参数并将它们打包成一个元组tuple传递给函数。二是使用两个星号**作为参数前缀将该参数定义为不定长关键字参数该参数可以接收任意数量的关键字参数并将它们打包成一个字典dict传递给函数。
# 一个星号的不定长参数
def func1(*args):for arg in args:print(arg)# 依次输出66 88 99
func1(66, 88, 99)
# 依次输出Hello CSDN
func1(Hello, CSDN)# 两个星号的不定长参数
def func2(text, **kwargs):print(text)for key, value in kwargs.items():print(f{key}: {value})# 依次输出info: name: Lily age: 16 city: BeiJing
func2(info:, nameLily, age16, cityBeiJing) 强制关键字参数只能以关键字形式来指定的参数从而确保调用该函数的代码读起来会比较明确。定义函数时如果单独出现星号*则星号后的参数必须用关键字传入。
def my_sum(a, b, *, c):return a b c# c为强制关键字参数必须以关键字方式指定
my_sum(1, 2, c 3)
# 运行时报错my_sum() takes 2 positional arguments but 3 were given
my_sum(1, 2, 3) 强制位置参数只能以位置形式不能以关键字形式来指定的参数。定义函数时如果单独出现斜杠/则斜杠前的参数必须用位置形式传入。
def my_sum(a, b, /, c):return a b c# a、b为强制位置参数必须以位置方式指定
my_sum(1, 2, 3)
# 运行时报错my_sum() got some positional-only arguments passed as keyword arguments: b
my_sum(1, b 2, c 3) lambda函数 lambda函数是一种没有函数名称的匿名函数或小型函数通常用于短小的、临时性的、或者作为高阶函数的参数比如map()、filter()等。 lambda函数的语法格式为lambda arguments : expression。 其中arguments是一个函数参数列表由一个或多个参数组成多个参数之间使用逗号进行分隔。expression是一个表达式当有多个参数时表达式中必须使用参数对应的顺序。 在下面的例子中定义了一个lambda函数my_add接收两个参数x和y并返回它们的和最后通过调用my_add(66, 99)来执行这个函数。
my_add lambda x, y: x y
# 输出165
print(my_add(66, 99)) 再来看看在高阶函数filter中使用lambda函数的例子。
data [12, 25, 7, 32, 21]
# 找出列表中所有大于20的数
result filter(lambda x: x 20, data)
# 输出[25, 32, 21]
print(list(result)) 总结一下lambda函数具有以下优点 语法简洁lambda函数使用简洁的语法可以在一行代码中定义简单的函数。 匿名函数lambda函数是匿名函数不需要指定函数名称这使得它们可以作为临时函数在代码中快速定义。 短小函数lambda函数通常定义的是短小的函数这使得它们在处理简单的任务时非常方便。 高阶函数参数lambda函数常作为高阶函数的参数这使得它们可以与其他函数配合使用实现更加灵活和定制化的操作。 提高代码可读性在一些情况下使用lambda函数可以使代码更加简洁、易于理解。 提高执行效率与普通函数相比lambda函数的执行效率更高。 不过需要注意的是虽然lambda函数在某些情况下非常有用但在处理复杂任务或需要重复使用的功能时还是建议使用完整的函数定义。