前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python从0到100(十三):函数的类型及其应用

Python从0到100(十三):函数的类型及其应用

原创
作者头像
是Dream呀
发布2024-04-23 11:23:36
940
发布2024-04-23 11:23:36
举报
文章被收录于专栏:总结xyp总结xyp

一、递归函数和匿名函数

一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数

使用递归,实现阶乘 n! = 1 * 2 * 3 * ... * n的计算。

在这里插入图片描述
在这里插入图片描述
代码语言:python
复制
def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

Fact(5)
# 结果:120
# 过程:5*4*3*2*1

匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字,匿名函数的声明格式如下所示:

代码语言:python
复制
lambda [arg1 [,arg2,.....argn]]:expression

匿名函数示例代码:

代码语言:python
复制
sum = lambda arg1, arg2: arg1 + arg2
print(“运行结果:", sum( 10, 20 ))
print("运行结果:", sum( 20, 20 ))

注意:

使用Lambda声明的匿名函数能接收任何数量的参数,但只能返回一个表达式的值。匿名函数不能直接调用print,因为lambda需要一个表达式。

二、日期时间函数

1.时间函数

在Python中,通常有如下几种方式表示时间:

(1)时间戳;

通常来讲,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

代码语言:python
复制
import time;  # 引入time模块
ticks = time.time()
print("当前时间戳为:", ticks)
### 当前时间戳为: 1642048647.1326923

(2)格式化的时间字符串;

我们可以使用time模块的strftime方法来格式化日期。

代码语言:python
复制
import time
# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 2022-01-13 12:38:08

(3)时间元组(struct_time)。

返回struct_time的函数主要有gmtime()、localtime()和strptime(),struct_time元组。

2.日历函数

1.calendar.calendar(year,w=2,l=1,c=6)

返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

代码语言:python
复制
import calendar
print(calendar. firstweekday())
print(calendar.isleap(2018))
print(calendar.calendar(2021,w=1,l=1,c=6))

然后就可以得到我们的日期表了,是不是非常的nice:

在这里插入图片描述
在这里插入图片描述

2. 返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

代码语言:python
复制
calendar. firstweekday()

3. 如果是闰年返回True,否则为false。

代码语言:python
复制
calendar.isleap(year)

4. 返回在Y1,Y2两年之间的闰年总数。

代码语言:python
复制
calendar.leapdays(y1,y2)

5. 返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

代码语言:python
复制
print(calendar.month(2021,2,w=2,l=1))
在这里插入图片描述
在这里插入图片描述

6. 返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

代码语言:python
复制
calendar.monthcalendar(year,month)
在这里插入图片描述
在这里插入图片描述

7. 返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。

代码语言:python
复制
calendar.monthrange(year,month)

8.calendar.prcal(year,w=2,l=1,c=6)

相当于print(calendar.calendar(year,w,l,c))

三、 随机数函数

1.random.random()

用于生成一个0到1的随机符点数: 0 <= n < 1.0。

代码语言:python
复制
import random# 生成第一个随机数
print("random():", random.random())# 生成第二个随机数 
print("random():", random.random())

2.random.uniform(a,b)

返回a,b之间的随机浮点数,范围[a,b]或[a,b]取决 于四舍五入,a不一定要比b小。

3.random.randint(a,b)

返回a,b之间的整数,范围[a,b],注意:传入参数必须是整数,a一定要比b小。

4.random.randrang([start], stop[, step])

返回有个区间内的整数,可以设置step。只能传入整数,random.randrange(10, 100, 2),

结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。

5.random.choice(sequence)

从sequence(序列,是有序类型的)中随机获取一个元素,列表、元组、字符串都属于sequence。

代码语言:python
复制
random.randrange(10,100,2) 
#结果等效于
random.choice(range(10,100,2)

6.random.shuffle(x[,random])

用于将列表中的元素打乱顺序,俗称为洗牌。

代码语言:python
复制
p = ["Python","is", "powerful","simple”]  
random.shuffle(p)  

7.random.sample(sequence,k)

从指定序列中随机获取k个元素作为一个片段返回,\

sample函数不会修改原有序列

代码语言:python
复制
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
slice = random.sample(list, 5) 
print(slice) 
print(list)
# [6, 9, 3, 1, 2]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

四、函数的应用

1.生成验证码

代码语言:python
复制
import random
import string

ALL_CHARS = string.digits + string.ascii_letters

def generate_code(code_len=4):
    return ''.join(random.choices(ALL_CHARS, k=code_len))

可以用下面的代码生成10组随机验证码来测试上面的函数。

代码语言:python
复制
for _ in range(10):
    print(generate_code()) 

说明random模块的samplechoices函数都可以实现随机抽样,sample实现无放回抽样,这意味着抽样取出的字符是不重复的;choices实现有放回抽样,这意味着可能会重复选中某些字符。这两个函数的第一个参数代表抽样的总体,而参数k代表抽样的数量。

2.判定是不是质数

代码语言:python
复制
def is_prime(num: int) -> bool:
    """判断一个正整数是不是质数

    :param num: 正整数
    :return: 如果是质数返回True,否则返回False
    """
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return num != 1

3.计算最大公约数和最小公倍数。

代码一:

代码语言:python
复制
def gcd_and_lcm(x: int, y: int) -> int:
    """求最大公约数和最小公倍数"""
    a, b = x, y
    while b % a != 0:
        a, b = b % a, a
    return a, x * y // a

代码二:

代码语言:python
复制
def gcd(x: int, y: int) -> int:
    """求最大公约数"""
    while y % x != 0:
        x, y = y % x, x
    return x


def lcm(x: int, y: int) -> int:
    """求最小公倍数"""
    return x * y // gcd(x, y)

4.极差、均值、方差、标准差、中位数

代码语言:python
复制
import math

def ptp(data):
    """求极差(全距)"""
    return max(data) - min(data)
    
def average(data):
    """求均值"""
    return sum(data) / len(data)

def variance(data):
    """求方差"""
    x_bar = average(data)
    temp = [(num - x_bar) ** 2 for num in data]
    return sum(temp) / (len(temp) - 1)

def standard_deviation(data):
    """求标准差"""
    return math.sqrt(variance(data))

def median(data):
    """找中位数"""
    temp, size = sorted(data), len(data)
    if size % 2 != 0:
        return temp[size // 2]
    else:
        return average(temp[size // 2 - 1:size // 2 + 1])

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、递归函数和匿名函数
  • 二、日期时间函数
    • 1.时间函数
      • 2.日历函数
      • 三、 随机数函数
      • 四、函数的应用
        • 1.生成验证码
          • 2.判定是不是质数
            • 3.计算最大公约数和最小公倍数。
              • 4.极差、均值、方差、标准差、中位数
              相关产品与服务
              验证码
              腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档