Python函数基础入门指南
Python函数是一种被设计用来实现一定任务或者计算的程序部分。它可以提高代码重用性,使得代码更加模块化,让程序更易于阅读、维护、测试和扩展。在本指南中,我们将一步一步地介绍Python函数的基础概念和语法。
一、定义函数
Python函数的定义格式如下:
def function_name(param1, param2, ...):
# function code block
return result
其中,
- def 是函数定义的关键字;
- function_name 是函数名,自己定;
- param1, param2, ... 是函数的参数,可以有多个,也可以没有参数;
- function code block 是包含了函数执行的代码块;
- return result 指定了函数的返回值,可以省略,也可以有多个返回值。
下面是一个简单的例子,展示了如何定义一个带有参数和返回值的函数:
def add(a, b):
c = a + b
return c
print(add(1, 2)) # 输出3
print(add(3, 4)) # 输出7
上述代码中,add函数的作用是把两个数字相加,并返回结果。函数的实参传递方式是按顺序传递的,参数a被赋值为1、参数b被赋值为2。
二、函数参数
Python函数的参数类型有四种:
1. 必需参数
2. 关键字参数
3. 默认参数
4. 可变参数
2.1. 必需参数
函数必需参数是指调用函数时必须传递的参数,否则会导致函数调用失败。必需参数的数量和顺序需要和函数定义时一致。下面是一个例子:
def greet(name):
print("Hello, " + name + "!")
greet("Tom") # 输出 "Hello, Tom!"
函数greet的必需参数是name,该参数指定了欢迎的对象。调用函数时必须传递其参数,否则会抛出TypeError异常。例如,greet()会导致TypeError: greet() missing 1 required positional argument: 'name'。
2.2. 关键字参数
函数关键字参数是指用名称来指定函数参数的传递。象下面这个例子一样:
def greet(name, age):
print("Hello, " + name + "! You are " + str(age) + " years old.")
greet(name = "Tom", age = 18) # 输出 "Hello, Tom! You are 18 years old."
greet(age = 20, name = "Jerry") # 输出 "Hello, Jerry! You are 20 years old."
函数greet的参数name、age都是关键字参数,调用函数时,键名与参数名一一对应。参数顺序可以随意,只要指定了键名,就不会出错。
2.3. 默认参数
函数默认参数是指在函数定义时就赋值好的参数,调用函数时可以修改其值。例如:
def greet(name, age = 18):
print("Hello, " + name + "! You are " + str(age) + " years old.")
greet("Tom") # 输出 "Hello, Tom! You are 18 years old."
greet("Jerry", 20) # 输出 "Hello, Jerry! You are 20 years old."
函数greet有两个参数,name是必须参数,age是默认参数,其默认值为18。调用函数时可以不设置age参数,但必须设置name参数。如果设置了age参数,其值会覆盖默认值。
注意:必需参数必须放在默认参数前面。
2.4. 可变参数
可变参数是指函数调用时可以传入任意多的参数。在函数内部,可变参数是以元组的形式出现的。
Python提供了两种可变参数的形式:*args表示任意个无名参数,**kwargs表示任意个关键字参数,这里的args、kwargs只是命名习惯,可以随意更改。
例如:
# 输出任意个数的不定参数和关键字参数
def print_info(*args, **kwargs):
print("args:", args) # 输出一个元组
print("kwargs:", kwargs) # 输出一个字典
print_info(1, 2, 3, name = "Tom", age = 18) # 输出 args: (1, 2, 3) kwargs: {'name': 'Tom', 'age': 18}
在上例中,print_info函数接收到了三个位置参数(1, 2, 3),并且也接收到了两个关键字参数name = "Tom"和age = 18。在函数内部,所有无名参数被打包进args元组中,所有关键字参数则被打包进kwargs字典中。
三、函数返回值
Python函数通过关键字return返回值给调用者。函数可以返回单个值,多个值(以元组、列表、字典、集合或数列的形式)或者不返回任何值(即返回None)。
例如:
def add(a, b):
return a + b
print(add(1, 2)) # 输出3
也可以返回多个值:
def calc(a, b):
sum = a + b
difference = a - b
product = a * b
quotient = a / b
return sum, difference, product, quotient
result = calc(10, 2)
print(result) # 输出 (12, 8, 20, 5.0)
默认情况下,Python函数返回None。例如:
def print_without_return():
print("This function prints something, but returns nothing.")
result = print_without_return() # result的值为None
print(result) # 输出None
四、局部变量和全局变量
在Python函数内定义的变量称为局部变量,它们仅在函数内部可见。在函数外定义的变量称为全局变量,它们可在任何地方被访问和修改。
例如:
x = 2
def foo():
x = 1 # 这里定义了函数局部变量x,其值为1
print("x inside foo:", x)
foo() # 输出: "x inside foo: 1"
print("x outside foo:", x) # 输出: "x outside foo: 2"
在这个例子中,全局变量x的值为2,而函数内部定义了另一个局部变量x,其值为1。当函数执行完毕,局部变量x就会被销毁。
如果在函数内部要修改全局变量的值,需要使用Python的global关键字来声明:
x = 2
def foo():
global x
x = 1 # 修改全局变量x的值
print("x inside foo:", x)
foo() # 输出: "x inside foo: 1"
print("x outside foo:", x) # 输出: "x outside foo: 1"
在这个例子中,虽然函数内部定义了局部变量x,但是使用了global关键字声明,因此修改的是全局变量x的值。最后输出的结果是1。
五、匿名函数
Python支持匿名函数,也叫Lambda函数,Lambda函数没有名字,通过lambda关键字来定义,可以快速地定义简短的函数。Lambda函数最常用的场景是:即写即弃,可以在不使用的时候从内存中删除。
Lambda函数的语法格式:
lambda arguments: expression
例如:
f = lambda x, y : x + y print(f(1, 2)) # 输出3
上面代码中,f就是一个Lambda函数,可以将其理解成一个简单的函数。该函数接收两个参数x和y,然后返回它们的和。
六、总结
本指南介
