我将介绍如何在Python中定义和使用函数,以及如何创建和使用Python模块。这些基础知识将帮助你编写更高效和可复用的代码。
目录
- 函数基础
- 定义和调用函数
- 参数传递
- 函数式编程
- 匿名函数
- 高阶函数
- 装饰器
- 模块和包
- 常用的标准库模块
函数基础
定义和调用函数
定义函数:Python中有很多自带的函数,比如print()
,但你也可以定义自己需要的函数。函数定义的基本格式是:
def 函数名(参数列表):
函数体
举个例子:
def sum(a, b):
return a + b
调用函数:Python内部的很多函数和自己定义的函数都可以直接调用。例如:
result = sum(3, 6)
print(result) # 输出:9
参数传递
为了方便调用自己的函数,我们会先确定参数的名称和位置,然后将函数的主体封装起来。
位置参数:这是最简单的一种参数形式,上面sum()
函数中的a
和b
就是位置参数。
默认参数:默认参数是在定义函数时确定的参数,在调用函数时可传可不传。位置参数一定要放在默认参数之前。例如:
def sum(a, b, c=20):
return a * b + c
print(sum(2, 3)) # 输出:26
print(sum(2, 3, c=10)) # 输出:16
关键字参数:当参数个数太多或者你忘记了参数的位置,可以使用关键字参数通过“键-值”的方式传入。例如:
print(sum(a=5, b=4)) # 输出:40
print(sum(b=4, a=5)) # 输出:40
可变参数:有的函数需要输入的参数个数是可变的,这时候可以定义可变参数。
def func(*args):
total = 0
for i in args:
total += i
return total
print(func(2, 5, 10)) # 输出:17
print(func(3, 7)) # 输出:10
print(func()) # 输出:0
这里星号*
的作用是将传入的位置参数变成一个tuple
。
包裹关键字参数:
def func(**kw):
total = 0
for value in kw.values():
total += value
return total
print(func(a=1, b=2, c=3)) # 输出:6
函数式编程
匿名函数
有时我们不需要显式定义一个函数,而可以使用匿名函数。匿名函数使用关键字lambda
,基本语法为:lambda arg: expression
。
sum = lambda a, b: a + b
print(sum(2, 3)) # 输出:5
高阶函数
如果一个函数可以接受另一个函数作为参数,那么这个函数就是高阶函数。
map()函数:接受两个参数,一个是函数,一个是可迭代的对象(Iterable),函数依次作用于每一个元素,返回一个迭代器(Iterator)。
a = map(lambda x: x ** 2, range(5))
print(list(a)) # 输出:[0, 1, 4, 9, 16]
reduce()函数:也接受两个参数,一个是函数,另一个是Iterable。
from functools import reduce
def add(a, b):
return a + b
print(reduce(add, range(5))) # 输出:10 (0 + 1 + 2 + 3 + 4)
filter()函数:函数依次作用于每一个元素,判断其真假(True or False),然后根据真或假来决定保留还是丢弃该元素。
def is_even(n):
return n % 2 == 0
print(list(filter(is_even, range(6)))) # 输出:[0, 2, 4]
sorted函数:
print(sorted([3, 5, 1, -8, 2], key=abs)) # 输出:[1, 2, 3, 5, -8]
print(sorted([("a", 2), ("b", 1), ("c", 3)], key=lambda x: x[1])) # 输出:[('b', 1), ('a', 2), ('c', 3)]
装饰器
装饰器可以在不改变函数本身的情况下给函数添加新的功能。
def hello(func):
def wrapper(*args):
print("hello xiaoyang!")
return func(*args)
return wrapper
@hello
def add(*args):
total = 0
for n in args:
total += n
return total
print(add(2, 5, 7)) # 输出:hello xiaoyang! 14
模块和包
一个Python模块就是一个.py
文件,一个Python包就是包含一个或多个模块的目录。
创建模块:
创建一个叫hello.py
的文件:
"This is a hello module" # 模块的__doc__属性
__author__ = "xiaoyang Li"
def hello():
print("Hello xiaoyang!")
if __name__ == "__main__":
hello()
使用模块:
import hello
hello.hello() # 输出:Hello xiaoyang!
常用的标准库模块
sys模块:
import sys
print(sys.argv) # 命令行参数列表
print(sys.path) # 模块检索路径
print(sys.modules.keys()) # 已导入的模块列表
os模块:
import os
os.mkdir('test_dir') # 创建目录
os.rmdir('test_dir') # 删除目录
print(os.getcwd()) # 获取当前路径
datetime模块:
import datetime
print(datetime.datetime.now()) # 当前日期和时间
通过本章的学习,你应该已经掌握了如何定义和使用Python中的函数以及如何创建和使用模块。
希望这些知识能帮助你在编写Python代码时更加得心应手。