python函数(二):递归函数和匿名函数、日期时间函数、随机数函数

递归函数和匿名函数

递归函数
一个函数的内部可以调用其他函数。如果在一个函数的内部调用了函数本身,那么这个函数就是递归函数
例:递归计算阶乘(数不要太大)

def func(n):
    if n == 1:
        result = 1
    else:
        result = n*func(n-1)
    return result
    
number = int(input('请输入一个整数,该整数不要太大:'))
print("%d的阶乘是:%d" % (number, func(number)))

匿名函数
匿名函数就是没有名称的函数,需要使用lambda关键字声明。匿名函数最终返回表达式的值

lambda 参数列表:表达式

定义好的匿名函数不能直接使用,最好使用一个变量保存它,以便后期可以随时使用

add=lambda a,b: a+b
print("结果:",add(2,3)) #结果:5

在某些场景下,可以将匿名函数作为函数参数传递
例如:对两个数进行运算,并且希望声明的函数可以支持所有的运算

def func(a, b, operation):
    print("a=%d" % a)
    print("b=%d" % b)
    print("result=", operation(a, b))

func(10, 11, lambda a, b: a+b)
print("-"*20)
func(10, 11, lambda a, b: a-b)

在这里插入图片描述
除此之外匿名函数还可以作为内置函数的参数来使用

students = [
    {"name": "孙悟空", "age": 18},
    {"name": "猪八戒", "age": 25},
    {"name": "沙曾", "age": 20}
]
# 按name排序
students.sort(key=lambda x: x['name'])
print("按name排序的结果:", students)
# 按age排序
students.sort(key=lambda x: x['age'])
print("按age排序的结果:", students)

在这里插入图片描述
注意:
与def定义的普通函数相比,使用lambda定义的匿名函数有许多不同之处

  • 普通函数在定义时是有名称的,而匿名函数是没有名称的
  • 普通函数的函数体中可以包含多条语句,而匿名函数的函数体中只有一个表达式
  • 普通函数中可以使用if、for等语句,匿名函数中不可以使用
  • 普通函数一般用于实现复杂的功能,而匿名函数只能实现简单的功能
  • 普通函数可以被其他程序调用,而匿名函数不能共享给其他程序使用

日期时间函数

时间戳
时间戳是从1970年1月1日00:00:00开始按秒计算的偏移量。返回时间戳的函数主要有time()、clock()等

import time  # 引入time模块
ticks = time.time()
print("当前时间戳是:", ticks)

格式化的时间字符串
通过time模块的strftime函数可以返回一个格式化的日期与时间

time.strftime(format[,t])

例:

import time
# 格式化成 2016-01-20 11:14:25
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Sat Mar 28 22:24:12:2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# 将格式字符串转换为时间戳
time_str = "2020-02-19 12:16:27"
print(time.mktime(time.strptime(time_str, "%Y-%m-%d %H:%M:%S")))

日历函数
例:打印2020年3月份的日历

import calendar
calendar_march = calendar.month(2020, 3)
print("2020年3月份的日历")
print(calendar_march)

在这里插入图片描述
日期格式化符号、时间元组、calendar模块

随机数函数

需要引入random模块
1、random.random()
返回0与1之间的随机浮点数n,范围为0<=n<1.0
2、random.uniform(a,b)
返回a与b之间的随机浮点数n,范围为[a,b]或者[b,a],取决于a与b哪一个更大
3、random.randint(a,b)
返回一个随机整数,范围为[a,b],a和b的取值必须是整数,并且a的值要效域b的值
4、random.randrange([start],stop[,step])
返回指定递增基数集合中的一个随机数,基数默认为1。其中start参数用于指定范围开始值,其包含在范围内;end参数用于指定范围内的结束值,其不包含在内;;step表示递增基数
5、random.choice(sequence)
从sequence中返回一个随机的元素。其中,sequence参数可以是列表、元组或字符串。若sequence为空,会引发异常
6、random.shuffle(x[,random])
用于将列表中的元素打乱顺序,俗称洗牌
7、random.sample(sequence,k)
从指定序列中随机获取k个元素组成一个新的子序列,并返回,不会修改原有序列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值