前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python入门第十四讲】函数(Function)篇

【Python入门第十四讲】函数(Function)篇

原创
作者头像
不惑
发布2024-02-09 13:01:25
4400
发布2024-02-09 13:01:25
举报
文章被收录于专栏:Python基础系列Goboy

恭祝大连新年快乐

Python 函数是返回特定任务的语句块。它将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以执行函数调用以一遍又一遍地重用其中包含的代码,而不是为不同的输入一次又一次地编写相同的代码。

使用函数的好处:

  • 提高代码可读性
  • 提高代码可重用性

Python 函数声明

声明函数的语法为:

声明函数的语法
声明函数的语法

Python 中的函数类型

Python 中主要有两种类型的函数。

  • 内置库函数:这些是 Python 中可供使用的标准函数。
  • 用户自定义函数:我们可以根据自己的需求创建自己的函数。

Python 创建函数

我们可以在 Python 中使用 def 关键字定义一个函数。可以根据需要向其添加任何类型的功能和属性。

代码语言:python
代码运行次数:0
复制
def fun():
    print("Welcome to Python")

调用 Python 函数:

代码语言:python
代码运行次数:0
复制
def fun():
	print("Welcome to Python")

fun()

Python 创建带参数函数

日常开发过程中需要考虑函数的返回类型和参数的数据类型。

使用参数定义和调用函数语法:

代码语言:python
代码运行次数:0
复制
def function_name(parameter: data_type) -> return_type:
    """Docstring"""
    return expression

以下示例使用参数和参数。

示例1:

代码语言:python
代码运行次数:0
复制
def add(num1: int, num2: int) -> int:
	"""两数相加"""
	num3 = num1 + num2
	return num3

num1, num2 = 5, 15
ans = add(num1, num2)
print(f"The addition of {num1} and {num2} results {ans}.")

示例2:

代码语言:python
代码运行次数:0
复制
def is_prime(n):
	if n in [2, 3]:
		return True
	if (n == 1) or (n % 2 == 0):
		return False
	r = 3
	while r * r <= n:
		if n % r == 0:
			return False
		r += 2
	return True
print(is_prime(78), is_prime(79))

Python 函数参数

参数是在函数括号内传递的值。一个函数可以有任意数量的参数,用逗号分隔。在此示例中,将在 Python 中创建一个简单的函数来检查作为参数传递给函数的数字是偶数还是奇数。

代码语言:python
代码运行次数:0
复制
def evenOdd(x):
	if (x % 2 == 0):
		print("even")
	else:
		print("odd")

evenOdd(2)
evenOdd(3)

输出

Python 函数参数的类型

Python 支持可以在函数调用时传递的各种类型的参数。在 Python 中有以下 4 种类型的函数参数。

  • Default argument默认参数
  • Keyword arguments (named arguments) (关键字参数(命名参数)
  • Positional arguments位置参数
  • Arbitrary arguments (variable-length arguments *args and **kwargs) ( 任意参数(可变长度参数 *args 和 **kwargs)

默认参数(Default argument)

默认参数(Default argument)是指在定义函数时,为参数提供一个默认值。如果函数调用时没有提供该参数的值,则将使用默认值。默认参数的主要作用是在函数定义中指定参数的默认值,使函数调用更加灵活,同时还能提供一个常用值的默认选择。

示例:

代码语言:python
代码运行次数:0
复制
def greet(name="Lisi"):
    print("Hello,", name)

greet()  # 输出:Hello, Lisi
greet("Zhangsan")  # 输出:Hello, Zhangsan

在这个例子中greet 函数有一个默认参数 name,默认值为 "Lisi"。在第一个函数调用中,没有提供参数,因此使用了默认值 "Lisi";在第二个函数调用中,提供了参数 "Zhangsan",因此使用了提供的值。

默认参数的定义格式为在函数声明时为参数赋值。例如,在 def greet(name="Lisi") 中,name 参数有一个默认值 "Lisi"

关键字参数(Keyword arguments)

关键字参数(Keyword arguments),也称为命名参数,是指在函数调用时,通过参数名来指定参数的值。使用关键字参数可以使函数调用更具有可读性,并且不需要按照参数在函数定义中的顺序传递参数。

示例:

代码语言:python
代码运行次数:0
复制
def greet(name, age):
    print("Hello,", name)
    print("Your age is", age)

greet(name="Zhangsan", age=30)

在这个示例中函数调用时明确指定了参数的名称,即 name="Zhangsan"age=30。因此,即使在函数定义中 name 参数位于 age 参数之前,也不会出现问题。

使用关键字参数的好处之一是提高了函数调用的可读性,尤其是当函数有多个参数且参数意义不明确时,使用关键字参数可以更清晰地表达函数的意图。

位置参数(Positional arguments)

位置参数(Positional arguments)是指在函数调用时,根据函数定义中参数的顺序依次传递参数的值。这是最常见的参数传递方式。

示例:

代码语言:python
代码运行次数:0
复制
def greet(name, age):
    print("Hello,", name)
    print("Your age is", age)

greet("Zhangsan", 30)

在这个示例中,我们按照函数定义的顺序依次传递了参数 "Zhangsan"30 给函数 greet。第一个传递的参数 "Zhangsan" 被赋给了 name 参数,而第二个传递的参数 30 被赋给了 age 参数。

位置参数的顺序和数量必须与函数定义中的参数顺序和数量匹配,否则可能会导致错误。因此,在使用位置参数时,需要确保按照正确的顺序传递参数值。

任意参数(Arbitrary arguments)

任意参数(Arbitrary arguments)是指允许函数接受任意数量的参数的一种机制。在Python中可以通过使用特殊的语法 *args**kwargs 来定义任意参数。

  • *args 用于传递非关键字参数列表(即位置参数),它允许将任意数量的位置参数传递给函数。
  • **kwargs 用于传递关键字参数(即命名参数),它允许将任意数量的关键字参数传递给函数。

示例:说明这两种任意参数的用法:

代码语言:python
代码运行次数:0
复制
def greet(*args, **kwargs):
    for name in args:
        print("Hello,", name)
    
    for key, value in kwargs.items():
        print(key, "is", value)

greet("Zhangsan", "Lisi", age=30, city="Dalian")

在这个示例中,函数 greet 接受了任意数量的位置参数(args)和关键字参数(kwargs)。在函数调用中,我们传递了两个位置参数 "Zhangsan""Lisi",以及两个关键字参数 age=30city="Dalian"

在函数体内部使用了循环来处理位置参数和关键字参数,并打印出相应的值。使得函数更加灵活,可以接受不同数量和类型的参数,并且可以根据需要进行处理。

Docstring (文档字符串)

函数后面的第一个字符串简称为 Document 字符串 Docstring。用于描述函数的功能。在函数中使用文档字符串是可选的,但被认为是一种很好的做法。

  • 以下语法可用于打印出函数的文档字符串:
代码语言:python
代码运行次数:0
复制
语法: print(function_name.__doc__)
  • 示例:将 Docstring 添加到函数

其中函数检查给定的数字是否为偶数或奇数,并输出相应的信息:

代码语言:python
代码运行次数:0
复制
def evenOdd(x):
    """函数用于检查给定的数字是偶数还是奇数"""
    if (x % 2 == 0):
        print("偶数")
    else:
        print("奇数")

# 调用函数的驱动代码
print(evenOdd.__doc__)

在这个示例中函数 evenOdd 接受一个参数 x,并根据该参数的值输出相应的信息。函数的文档字符串用中文描述了函数的作用。最后,使用 print(evenOdd.__doc__) 打印出函数的文档字符串。

函数中的 Python 函数

在另一个函数中定义的函数称为内部函数 嵌套函数。嵌套函数可以访问封闭作用域的变量。使用内部函数是为了保护它们免受函数外部发生的一切影响。

代码语言:python
代码运行次数:0
复制
def f1():
	s = 'I love Tencent'
	
	def f2():
		print(s)
		
	f2()

f1()

Python 中的匿名函数

在 Python 中,匿名函数意味着函数没有名称。正如我们知道的def 关键字用于定义普通函数,lambda 关键字用于创建匿名函数。

代码语言:python
代码运行次数:0
复制
def cube(x): return x*x*x

cube_v2 = lambda x : x*x*x

print(cube(7))
print(cube_v2(7))

Python 中的递归函数

Python 中的递归是指函数调用自身的时间。在许多情况下必须构建递归函数来解决数学和递归问题。

使用递归函数时应谨慎,因为递归函数可能变成一个非终止循环。最好在创建递归函数时检查 exit 语句

代码语言:python
代码运行次数:0
复制
def factorial(n):
	if n == 0: 
		return 1
	else:
		return n * factorial(n - 1) 

print(factorial(4))

我们创建了一个递归函数来计算数字的阶乘。可以看到此函数的结束语句是当 n 等于 0 时。

Python 函数中的 return 语句

函数返回语句用于退出函数并返回到函数调用方,并将指定的值或数据项返回给调用方。return 语句的语法为:

代码语言:python
代码运行次数:0
复制
return [expression_list]

return 语句可以由变量、表达式或常量组成,常量在函数执行结束时返回。如果 return 语句中不存在上述任何内容,则返回一个 None 对象。

示例:Python 函数返回语句

代码语言:python
代码运行次数:0
复制
def square_value(num):
    """这个函数返回输入数字的平方值"""
    return num**2

print(square_value(2))  # 输出:4
print(square_value(-4))  # 输出:16

在这个示例中函数 square_value 接受一个参数 num,并返回该参数的平方值。函数的文档字符串用中文描述了函数的作用。最后调用了两次函数 square_value,并打印出结果。

引用传递和按值传递

需要注意的重要一点是,在 Python 中,每个变量名称都是一个引用。当我们将变量传递给函数时,将创建对该对象的新引用。Python 中的参数传递与 Java 中的引用传递相同。

代码语言:python
代码运行次数:0
复制
# 这里 x 是指向列表 lst 的新引用
def myFun(x):
    x[0] = 20

# 驱动代码(注意,在函数调用之后,lst 被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)  # 输出:[20, 11, 12, 13, 14, 15]

当我们传递一个引用并将接收到的引用更改为其他内容时,传递和接收的参数之间的连接就会中断。

例如,请考虑以下程序,如下所示:

代码语言:python
代码运行次数:0
复制
def myFun(x):
    # 下面这行代码执行后,x 与之前的对象连接断开,x 被分配了一个新的对象。
    x = [20, 30, 40]

# 驱动代码(注意,在函数调用之后,lst 没有被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)

在这个示例中,函数 myFun 接受一个参数 x。在函数内部,通过 x = [20, 30, 40] 这一行代码,我们将 x 关联到了一个新的列表对象 [20, 30, 40],而原来的列表对象并没有被修改。

另一个例子演示了如果我们分配一个新值(在函数内部),引用链接就会断开。

代码语言:python
代码运行次数:0
复制
def myFun(x):
    # 在函数内部重新分配新的值
    return 20

# 驱动代码(注意,现在 x 会被修改)
x = 10
x = myFun(x)
print(x)

何时在 Python 中使用 yield 而不是 return

yield 语句暂停函数的执行并将值发送回调用方,但保留足够的状态以使函数能够从中断的地方恢复。当函数恢复时,它会在最后一次屈服运行后立即继续执行。这允许其代码随着时间的推移生成一系列值,而不是一次计算它们并像列表一样将它们发回。

代码语言:python
代码运行次数:0
复制
def simpleFun():
	yield 1
	yield 2
	yield 3

for value in simpleFun():
	print(value)

输出:

Return 将指定的值发送回其调用方,而 Yield 可以生成一系列值。当我们想遍历一个序列,但又不想将整个序列存储在内存中时,我们应该使用 yield。Yield 用于 Python 生成器。生成器函数的定义与普通函数类似,但每当它需要生成值时,它都会使用 yield 关键字而不是返回值。如果 def 的主体包含 yield,则该函数会自动成为生成器函数。

代码语言:python
代码运行次数:0
复制
def nextSquare():
	i = 1
	
	## 一个无限循环用于生成平方数
	while True:
		yield i*i
		i += 1 # # 下一次执行从这一点恢复


# function
for num in nextSquare():
	if num > 100:
		break
	print(num)

FAQs-常见问题解答

问题1.什么是 Python 中的函数?

Python 函数是一个代码块,仅在调用时运行。它被编程为返回特定任务。可以在称为参数的函数中传递值。它有助于执行重复性任务。

问题2.Python 中的 4 种函数是什么?

Python 中的主要函数类型有:

Built-in function 内置功能

User-defined function 用户自定义函数

Lambda functions Lambda 函数

Recursive functions 递归函数

问题3.如何在Python中定义函数?

def function_name():

Function code 功能代码

问题4.Python 中函数的参数是什么?

Python 中的参数是在调用函数时将值作为参数传递的变量。一个函数可以有任意数量的参数。还可以在 Python 中将默认值设置为参数。

Python 内置函数列表

以下是 Python 内置函数的完整列表:

https://docs.python.org/zh-cn/3/library/functions.html

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 函数声明
    • 声明函数的语法为:
    • Python 中的函数类型
    • Python 创建函数
      • 调用 Python 函数:
      • Python 创建带参数函数
        • 使用参数定义和调用函数语法:
          • 示例1:
          • 示例2:
      • Python 函数参数
      • Python 函数参数的类型
        • 默认参数(Default argument)
          • 关键字参数(Keyword arguments)
            • 位置参数(Positional arguments)
              • 任意参数(Arbitrary arguments)
              • Docstring (文档字符串)
              • 函数中的 Python 函数
              • Python 中的匿名函数
              • Python 中的递归函数
              • Python 函数中的 return 语句
                • 示例:Python 函数返回语句
                  • 引用传递和按值传递
                    • 问题1.什么是 Python 中的函数?
                    • 问题2.Python 中的 4 种函数是什么?
                    • 问题3.如何在Python中定义函数?
                    • 问题4.Python 中函数的参数是什么?
                • 何时在 Python 中使用 yield 而不是 return
                • FAQs-常见问题解答
                • Python 内置函数列表
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档