函数
函数是 Python 中重要的编程概念之一,它能够将一段代码逻辑进行封装,使得代码更加模块化、易于复用和维护。本文将详细介绍 Python 中的函数定义、函数调用和函数参数等相关知识点。
1、函数定义
在 Python 中,我们可以使用 def
关键字来定义一个函数,其语法如下:
def function_name(param1, param2, ..., paramN):
# 函数体
return value
其中 function_name
表示函数的名称,param1, param2, ..., paramN
是函数的参数列表,可以有多个,也可以为空。函数体中包含了函数的具体实现逻辑,可以是多行语句,用缩进表示代码块。return
语句用于返回函数的结果,可以省略,省略时函数默认返回 None
。
下面是一个简单的示例:
def add(x, y):
return x + y
2、函数调用
定义好函数之后,我们可以通过函数名和参数列表来调用函数。例如:
result = add(3, 5)
print(result) # 输出 8
在调用函数时,将实际参数传递给函数形参。Python 中有两种传参方式:位置参数和关键字参数。位置参数是按照形参的顺序传递参数,而关键字参数则是按照参数名称进行传递。例如:
result = add(y=5, x=3)
print(result) # 输出 8
3、函数参数
在 Python 中,函数可以定义有参数和没有参数的形式。当我们在函数定义时添加参数时,这些参数也被称为形式参数,简称形参。当我们调用函数时,可以将实际的参数值传递给函数,这些参数值也被称为实际参数,简称实参。
3.1 默认参数
Python 函数可以为参数设置默认值,当调用函数时如果没有传递该参数,则使用默认值。例如:
def add(x, y=1):
return x + y
print(add(3)) # 输出 4
print(add(3, 5)) # 输出 8
在这个例子中,y
参数设置了默认值 1
,所以在第一次调用时只传递了一个参数,而第二次调用时则传递了两个参数。
3.2 位置参数
在 Python 中,我们可以通过位置参数的方式将参数值传递给函数。在定义函数时,我们需要在括号中指定形参的名称,然后在调用函数时,按照位置顺序依次传递实参即可。
def greet(name):
print("Hello, " + name + "!")
greet("Alice")
上述代码定义了一个名为 greet 的函数,其中包含一个参数 name。在调用函数时,我们将实参 “Alice” 传递给函数。在函数中,我们使用传递进来的参数 name 打印出一句问候语。
3.3 可变参数
在 Python 中,函数可以接受可变数量的参数,这些参数被称为可变参数。在函数定义中,可以使用 *args
表示可变参数。例如:
def add(*args):
result = 0
for arg in args:
result += arg
return result
print(add(1, 2, 3)) # 输出 6
print(add(1, 2, 3, 4, 5)) # 输出 15
在这个例子中,*args
表示可以接受任意数量的参数,然后将这些参数相加返回结果。
3.4 关键字参数
除了位置参数之外,Python 还支持通过关键字参数的方式将参数值传递给函数。使用关键字参数时,我们需要在调用函数时显式地指定每个参数的名称和对应的值,这样可以避免在函数调用时因为参数的位置发生变化而出现错误。
def greet(name, age):
print("Hello, " + name + "! You are " + str(age) + " years old.")
greet(age=25, name="Alice")
在上述代码中,我们定义了一个名为 greet 的函数,其中包含两个参数:name 和 age。在调用函数时,我们使用关键字参数的方式来传递参数值。在函数中,我们使用传递进来的参数 name 和 age 打印出一句问候语。
当我们定义了一个函数之后,我们可以通过调用函数来执行其中的代码。在 Python 中,调用函数时,需要在函数名后面加上一对括号,并在括号中输入传递给函数的参数。如果函数没有参数,则括号可以为空。
4、函数返回值
当我们需要在一个函数中返回多个值时,可以使用 Python 中的元组(tuple)类型来实现。
Python 的元组是不可变序列,可以将多个值存储在一个变量中,并且可以通过索引访问元组中的值。
下面的代码演示了如何在函数中返回一个元组:
def get_name_and_age():
name = input("请输入你的名字:")
age = int(input("请输入你的年龄:"))
return name, age
result = get_name_and_age()
print(result) # 输出 ('Tom', 18)
print(result[0]) # 输出 'Tom'
print(result[1]) # 输出 18
在函数中,我们使用了一个 return
语句来返回一个元组,元组中包含了输入的名字和年龄。在函数调用中,我们将返回值赋值给了一个变量 result
,然后可以通过索引访问元组中的值。
值得注意的是,元组可以省略括号,例如在 return
语句中可以写成 return name, age
,或者在变量赋值中可以写成 result = get_name_and_age()
。
5、练习
5.1 【NOIP2012 普及组】 质因数分解
题目描述
已知正整数 $n$ 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入格式
输入一个正整数 $n$。
输出格式
输出一个正整数 $p$,即较大的那个质数。
样例输入
21
样例输出
7
提示
$1 \le n\le 2\times 10^9$
代码
def Primefactorization(num):
for i in range(2, num):
if(num%i==0):
return n//i
else:
continue
n = int(input())
print(Primefactorization(n))
5.2 【深基7.例7】计算阶乘
题目描述
求 $n!$,也就是 $1\times2\times3\dots\times n$。
挑战:尝试不使用循环语句(for、while)完成这个任务。
输入格式
第一行输入一个正整数 $n$。
输出格式
输出一个正整数,表示 $n!$。
样例输入
3
样例输出
6
提示
数据保证,$1 \leq n\le12$。
代码
# 使用递归函数计算阶乘
def Recursivefun(num):
if num==1:
return num
return num*Recursivefun(num-1)
n = int(input())
print(Recursivefun(n))
Views: 0