在Python中,函数根据用途和定义方式可以分为不同的类型。常见的函数类型包括:内置函数、自定义函数、匿名函数和递归函数。每种类型的函数都有其特定的用途和用法。
Python 提供了许多内置函数,可以直接使用,无需定义。以下是一些常用的内置函数示例:
# # 使用内置函数
#print('这是一个内置函数的例子') # 输出字符串
numbers = [1, 2, 3, 4, 5]
length = len(numbers) # 使用内置函数 len() 获取列表长度
maximum = max(numbers) # 使用内置函数 max() 获取最大值
print(f'列表的长度是:{length}')
print(f'列表中的最大值是:{maximum}')
#help()
在上面的例子中,我们使用了内置函数print、len和max。内置函数是Python标准库的一部分,可以直接调用。
| 函数名 | 作用 | 示例 |
|---|---|---|
| abs() | 绝对值 | abs(-5) # 5 |
| all() | 全为 True | all([True, 1]) # True |
| any() | 至少一个 True | any([0, 3]) # True |
| bool() | 转布尔值 | bool(0) # False |
| chr() | 整数转字符 | chr(65) # 'A' |
| enumerate() | 枚举索引和值 | list(enumerate(['a','b'])) |
| float() | 转浮点数 | float('3.14') |
| format() | 格式化 | format(3.1415, '.2f') |
| getattr() | 获取属性 | getattr(obj, 'name') |
| hasattr() | 判断属性 | hasattr(obj, 'age') |
| int() | 转整数 | int('42') |
| isinstance() | 类型判断 | isinstance(5, int) |
| len() | 长度 | len('hi') # 2 |
| list() | 转列表 | list('abc') |
| map() | 映射 | list(map(str, [1, 2])) |
| max() | 最大值 | max([1, 5]) |
| min() | 最小值 | min([1, 5]) |
| print() | 打印输出 | print('Hi') |
| range() | 数字序列 | range(5) |
| round() | 四舍五入 | round(3.1415, 2) |
| set() | 创建集合 | set([1, 2, 2]) |
| sorted() | 排序 | sorted([3, 1]) |
| str() | 转字符串 | str(123) |
| sum() | 求和 | sum([1, 2, 3]) |
| tuple() | 转元组 | tuple([1, 2]) |
| type() | 类型 | type(3) |
| zip() | 打包 | list(zip([1,2], ['a','b'])) |
| 函数名 | 作用 | 示例 |
|---|---|---|
| bin() | 转二进制 | bin(5) # '0b101' |
| bytearray() | 创建字节数组 | bytearray('hi','utf-8') |
| bytes() | 创建字节对象 | bytes('hi','utf-8') |
| callable() | 是否可调用 | callable(len) |
| classmethod() | 定义类方法 | @classmethod |
| compile() | 编译代码 | compile('3+4','','eval') |
| complex() | 复数 | complex(2, 3) |
| delattr() | 删除属性 | delattr(obj, 'x') |
| dict() | 创建字典 | dict(a=1, b=2) |
| dir() | 属性/方法列表 | dir(str) |
| divmod() | 商和余数 | divmod(7, 3) |
| eval() | 执行表达式 | eval('3+5') |
| exec() | 执行代码 | exec("a=5") |
| filter() | 过滤 | filter(lambda x: x>0, [1,-2]) |
| frozenset() | 不可变集合 | frozenset([1,2]) |
| globals() | 全局变量 | globals() |
| hash() | 哈希值 | hash('abc') |
| help() | 帮助文档 | help(len) |
| hex() | 十六进制 | hex(255) |
| id() | 内存地址 | id(123) |
| input() | 用户输入 | input('姓名:') |
| iter() | 迭代器 | iter([1,2]) |
| locals() | 局部变量 | locals() |
| memoryview() | 内存视图 | memoryview(b'abc') |
| next() | 迭代器下一个 | next(iter([1,2])) |
| oct() | 八进制 | oct(8) |
| open() | 打开文件 | open('file.txt') |
| ord() | 字符转整数 | ord('A') |
| pow() | 幂运算 | pow(2,3) |
| property() | 属性方法 | @property |
| repr() | 字符串表示 | repr('abc') |
| reversed() | 反向迭代器 | reversed([1,2]) |
| slice() | 切片对象 | slice(1, 5, 2) |
| staticmethod() | 静态方法 | @staticmethod |
| super() | 调用父类 | super().__init__() |
自定义函数是由用户定义的函数,用于执行特定的任务。
# 定义和调用自定义函数
def greet(name):
print(f'你好,{name}!欢迎学习Python函数!')
# 调用自定义函数
greet('SISUer')
在这个例子中,我们定义了一个名为greet的自定义函数,它接受一个参数name,并输出一条欢迎信息。
这类函数不需要输入参数,也不返回任何值,通常用于执行某些固定操作。用于执行固定操作、不依赖外部输入,也不需要结果返回的情况。 例如:显示欢迎语、提示信息。
# 示例:打印今天的课程提醒
def daily_reminder():
print("今天的课程是:Python函数类型,请按时上课哦~")
# 调用函数
daily_reminder()
这类函数需要输入参数,但不返回值,通常用于打印、修改或处理外部数据。
# 示例:打印某位文豪的代表作
def show_author_work(author, work):
print(f"《{work}》是{author}的重要代表作。")
# 调用示例
show_author_work("鲁迅", "阿Q正传")
这类函数不接收参数,但会返回一个值。用于内部生成结果并返回给外部使用,不依赖输入。 例如:生成每日语录、返回当前日期。
# 示例:返回一个每日文艺语录
def get_quote():
return "生活就像海洋,只有意志坚强的人才能到达彼岸。"
# 调用函数并打印返回值
quote = get_quote()
print("今日语录:", quote)
这类函数既接收参数,也返回值,是最常用的一种函数类型。 例如:判断年份是否重要、计算两个年份的差值。
#根据输入的两个年份计算历史事件相隔几年
def years_between(year1, year2):
return abs(year1 - year2) # abs()
gap = years_between(1840, 1949)
print(f"两次重大历史事件相隔 {gap} 年。")
#判断句子是否为感叹句(以“!”结尾)
def is_exclamatory(sentence):
return sentence.endswith("!")
result = is_exclamatory("太美了!")
print("是感叹句吗?", result)
# 输入作者、年份、书名,返回参考文献格式
def format_reference(author, year, title):
return f"{author}({year}).《{title}》.北京:人民出版社。"
# 示例
print(format_reference("费孝通", 1985, "乡土中国"))
# 示例:根据输入的年份判断是否是中国近代史重要年份
def is_historical_year(year):
important_years = [1911, 1949, 1978]
return year in important_years
# 调用函数
year = 1949
if is_historical_year(year):
print(f"{year} 是中国近代史上的重要年份。")
else:
print(f"{year} 不是特别关键的年份。")
#需要多举几个例子
匿名函数是一种没有名字的函数,通常用于需要一个简单函数的场合。它使用关键字lambda定义。
# 使用 lambda 定义匿名函数
square = lambda x: x * x
result = square(10)
print(f'10 的平方是:{result}')
在这个例子中,我们使用lambda关键字定义了一个匿名函数square,它计算一个数的平方。匿名函数通常用于简单的计算或作为参数传递给其他函数。
### 练习 按照名字长度对历史人物排序
names = ["", "杜甫", "欧阳修", "辛弃疾", "苏轼"]
# 使用 lambda 按照名字长度排序
sorted_names = sorted(names, key=lambda x: len(x))
print("按名字长度排序结果:", sorted_names)
# 掌握如何根据字符串长度进行排序。适用于文学人物、作者姓名整理等任务。
递归函数是一个调用自身的函数,通常用于解决分解问题,比如阶乘计算或斐波那契数列。
# 使用递归定义阶乘函数
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
# 调用递归函数
result = factorial(7)
print(f'5 的阶乘是:{result}')
在这个例子中,factorial函数是一个递归函数,它计算一个整数的阶乘。如果n等于1,则返回1;否则返回n乘以n-1的阶乘。
sum计算一个列表中所有元素的和。calculate_triangle_area,接受底和高作为参数,返回三角形的面积。lambda函数定义一个计算两个数乘积的匿名函数。fibonacci,计算第n个斐波那契数。# 练习 1: 使用内置函数求和
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(f'列表中所有元素的和是:{total}')
# 练习 2: 计算三角形面积的自定义函数
def calculate_triangle_area(base, height):
return (base * height) * 0.5
area = calculate_triangle_area(10, 6)
print(f'三角形的面积是:{area}')
# 练习 3: 使用 lambda 定义乘积函数
multiply = lambda a, b: a * b
product = multiply(4, 8)
print(f'4 和 7 的乘积是:{product}')
# 练习 4: 斐波那契数的递归函数
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
fib_number = fibonacci(6)
print(f'第 6 个斐波那契数是:{fib_number}')
#补充时间函数 + 随机函数
请尝试完成以下练习:
Python 提供 random 模块用于生成随机数、抽样、洗牌等操作,常用于模拟、抽签、问卷等场景。
import random
# 生成 1 到 100 的随机整数
# print("随机整数:", random.randint(1, 100))
# 从列表中随机抽取一个文豪名字
authors = ["鲁迅", "胡适", "老舍", "冰心", "沈从文"]
#print("随机抽取一位文豪:", random.choice(authors))
# # # 模拟抽签(不重复地抽3位)
print("抽签选出3位演讲代表:", random.sample(authors, 3))
抽签选出3位演讲代表: ['鲁迅', '胡适', '老舍']
### 示例:生成今日文艺学习任务
tasks = ["阅读一首诗", "抄写一段散文", "观看纪录片", "整理读书笔记", "欣赏一幅画"]
task = random.choice(tasks)
print("今日文艺学习任务:", task)
今日文艺学习任务: 阅读一首诗
import random
# 班级学生名单
students = ["小明", "小红", "小刚", "小丽", "小强"]
# 随机抽一名学生回答问题
print("今天回答问题的是:", random.choice(students))
今天回答问题的是: 小明
import random # 导入随机模块
# 学生名单(可以自行添加或修改)
students = ["小明", "小红", "小刚", "小芳", "小李"]
student = random.choice(students) # 从学生名单中随机选择一个
print(f"👏 被点到的同学是:{student}")
👏 被点到的同学是:小红
import random # 导入随机模块
# 学生名单(可以自行添加或修改)
students = ["小明", "小红", "小刚", "小芳", "小李"]
# 签的内容
draws = ["今天回答问题", "下次带作业", "表现优秀,奖励一颗星", "提个问题给大家", "下次做小组长"]
# 随机点名
def random_name():
student = random.choice(students) # 从学生名单中随机选择一个
print(f"👏 被点到的同学是:{student}")
# 抽签
def random_draw():
draw = random.choice(draws) # 从签中随机抽取
print(f"🎲 抽签结果是:{draw}")
# 主程序
print("------欢迎使用随机点名与抽签系统------")
random_name()
random_draw()
Python 中处理时间的常用模块是 time 和 datetime。
| 函数 | 描述 |
|---|---|
time() |
返回当前时间的时间戳(1970纪元后经过的浮点秒数) |
ctime([secs]) |
将时间戳转换为可读字符串 |
asctime([t]) |
将时间元组转换为可读字符串 |
localtime([secs]) |
将时间戳转换为本地时间的时间元组 |
gmtime([secs]) |
将时间戳转换为UTC时间的时间元组 |
mktime(t) |
将时间元组转换为时间戳 |
sleep(secs) |
推迟执行线程的时间,单位为秒 |
strftime(format[, t]) |
将时间元组格式化为字符串 |
strptime(string, format) |
将字符串解析为时间元组 |
datetime 模块常用函数与方法表¶| 函数 / 方法 | 描述 |
|---|---|
datetime.datetime.now() |
获取当前本地日期和时间,返回 datetime 对象 |
datetime.datetime.utcnow() |
获取当前 UTC 日期和时间,返回 datetime 对象 |
datetime.datetime.today() |
获取当前本地日期和时间,等同于 now() |
datetime.datetime.fromtimestamp(ts) |
将时间戳转换为本地时间对应的 datetime 对象 |
datetime.datetime.utcfromtimestamp(ts) |
将时间戳转换为 UTC 时间对应的 datetime 对象 |
datetime.datetime.strptime(date_str, format) |
将字符串按指定格式转换为 datetime 对象 |
datetime.datetime.strftime(format) |
将 datetime 对象格式化为字符串 |
datetime.date.today() |
获取当前日期(年月日),返回 date 对象 |
datetime.time() |
创建时间对象(小时、分钟、秒、微秒) |
datetime.timedelta(days=0, seconds=0, ...) |
用于表示时间间隔,可进行加减运算 |
import time
from datetime import datetime
# 当前时间戳
print("当前时间戳:", time.time())
# # 当前本地时间(格式化)
print("当前本地时间:", time.strftime("%Y-%m-%d %H:%M:%S"))
# # 获取当前具体时间对象
now = datetime.now()
print("当前年份:", now.year)
print("当前月份:", now.month)
print("当前日期:", now.day)
当前时间戳: 1745398994.3246825 当前本地时间: 2025-04-23 17:03:14 当前年份: 2025 当前月份: 4 当前日期: 23
from datetime import datetime, timedelta
now = datetime.now()
print("当前时间:", now)
dt = datetime.strptime("2025-04-07 15:30", "%Y-%m-%d %H:%M")
print("字符串转时间对象:", dt)
future = now + timedelta(days=7)
print("7天后的时间:", future)
formatted = now.strftime("%Y年%m月%d日 %H:%M:%S")
print("格式化时间:", formatted)
当前时间: 2025-04-23 17:03:32.251077 字符串转时间对象: 2025-04-07 15:30:00 7天后的时间: 2025-04-30 17:03:32.251077 格式化时间: 2025年04月23日 17:03:32
### 示例:记录阅读文章所用时间
# 模拟记录阅读文章所花的时间
start = time.time()
input("请按回车键开始阅读《论语》片段...")
input("阅读完毕后请按回车键...")
end = time.time()
duration = end - start
print(f"你大约阅读了 {duration:.2f} 秒。")
请完成以下练习,巩固时间函数与随机函数的使用:
time 模块编写一个函数,记录你朗读一段文字所用的时间。datetime 获取并打印今天是星期几。random 模拟从5位作者中随机选出2位进行对谈。import time
# 1. 朗读计时器
print("===== 朗读计时器 =====")
input("请准备好朗读以下文字,按回车键开始:\n")
text = "Python是一种广泛使用的高级编程语言,以其简洁易读的语法而闻名。"
print(f"请朗读以下文字:\n{text}")
start_time = time.time()
input("朗读完成后按回车键结束计时:")
end_time = time.time()
duration = end_time - start_time
print(f"你朗读这段文字用了 {duration:.2f} 秒")
#import time
import datetime
# 2. 获取今天是星期几
print("\n===== 今天是星期几 =====")
today = datetime.datetime.now()
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
print(f"今天是 {weekdays[today.weekday()]}")
# 3.从5位作者中随机选出2位进行对谈
import random
print("\n===== 随机选择两位作者 =====")
authors = ["鲁迅", "老舍", "巴金", "茅盾", "沈从文"]
selected = random.sample(authors, 2)
print(f"随机选出的两位作者是:{selected[0]} 和 {selected[1]}")
===== 随机选择两位作者 ===== 随机选出的两位作者是:巴金 和 鲁迅
# 4. 文艺任务生成器
print("\n===== 文艺任务生成器 =====")
themes = ["春天", "城市", "童年", "爱情", "孤独"]
forms = ["写一首诗", "画一幅画", "创作一篇短文", "拍一组照片", "写一首歌"]
times = ["清晨", "午后", "黄昏", "深夜", "周末"]
theme = random.choice(themes)
form = random.choice(forms)
time_period = random.choice(times)
print(f"学习建议:在{time_period},尝试用{form}来表达'{theme}'这个主题")
===== 文艺任务生成器 ===== 学习建议:在清晨,尝试用创作一篇短文来表达'童年'这个主题