速学Python中的“递归、匿名、随机”函数 : not(速成)

一、递归函数

通过作用域的学习,知道了一个函数内部可以调用其他函数。如果在一个函数内部,调用了函数它自己,那么这个函数就叫 "递归函数" 。例如:

def num(count):
    if count == 1: # 检查count是否等于1,因为1的阶乘还是1
        result=1
    else:
        result =num(count-1)* count  
        # 这里进行了递归调用,计算count-1的阶乘,然后将其结果乘以count
    return result

answer = int(input("请输入一个正整数:"))
print("{}!={}".format(answer, num(answer)))  
# 此处字符串对象通过点号(.)来访问某函数的属性或功能。算面向对象的内容,后续再细说吧...

以上代码可以看出递归函数模块主要由三部分组成:

1、递归调用,函数在内部调用自己

2、返回值,没次递归有确定的返回值

3、基线条件,为避免无限递归,确保有结束点

 

计算3阶乘的结果

二、匿名函数

Python中的匿名函数,也称为lambda函数,是一种不需要通过标准的def语句定义函数,因此它们通常用于创建小型的、一次性的函数对象,尤其是在需要提供函数作为参数传递给另一个函数时。

lambda函数语句格式:

lambda:  这是一个关键字,表示定义匿名函数。

参数列表:可以有一个或多个参数,参数之间用逗号隔开。

表达式:作为函数的返回值。

由于匿名函数的特性,定义好了的匿名函数不可以直接使用,所以最好就是将它赋给一个变量,以便之后随时可以使用这个被赋值匿名的变量函数。

举个栗子:

cube = lambda a: a**3
# 参数a代表输入的数值,返回值是a的三次方,即a*a*a
x = float(input("请输入正方体的边长:"))  # 输入的内容赋值给变量x
print("该正方体的体积为:", cube(x))  # 调用之前定义的cube函数,计算正方体的体积

 

需要注意的是,使用lambda 声明的匿名函数能接收任何数量的参数,但都只能返回一个表达式的值。然后、由于匿名函数的函数模块只是一个表达式,所以它不能直接使用 print() 函数,即:lambda 函数体内直接写 print ()调用是错误的,因为print()是一个语句!不是一个表达式。

此外,在Python中,lambda表达式就是一种创建匿名函数的方式。由于lambda表达式不需要通过def 关键字定义,所以它可以作为参数直接传递给函数。例如:

numbers = [3, 6, 9]
# 将列表中的每个数字乘以2
doubled_numbers =list(map(lambda a: a*2, numbers))
# 使用map函数,依次对numbers的元素进行选代,再赋给doubled_numbers
print(doubled_numbers)  # 输出doubled_numbers列表

这里我们就是将 lambda 函数 作为参数传递给 map函数 ,然后在python3中要记得带上数据类型 list ,否则只会给你报出个存放地址。

 

得到依次迭代2倍的列表结果

三、随机函数

Python 中的 random 模块用于生成一个随机数。它提供了很多函数,接下来针对常见的几种随机数函数进行举例:

1.random.random( )

import random
print("生成的随机数:",random.random())

random( )函数,只随机生产一个 [ 0 , 1 ) 区间的浮点数

2.random.uniform(a, b)

返回一个 [ a , b ) 区间内的浮点数

import random

print("一个10-20的随机数:", random.uniform(10, 20))

print("一个10-20的随机数:", random.uniform(20, 10))

 

返回a与b之间的一个随机浮点数 ‘N’,区间为 [ a , b ]

如果a的值小于b的值,则生成的随机浮点数 N的取值范围为a<=N<=b

如果a的值大于b的值,则生成的随机浮点数 N的取值范围为 b<=N<=a

3.random.randint(a, b)

返回一个 [a,b] 范围内的整数

import random

print(random.randint(10, 20))  # 生成一个10-20的随机整数

print(random.randint(10, 10))  # 只会生成一个10的整数

需要注意randint函数,下限必须小于上限 !否则报错:

 

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

返回一个 [ start, stop ) 范围内的整数,可以指定步长step

start : 表示你想定的范围的开始值,这个开始值包含在范围内

stop : 表示你想定的范围的结束值,这个开始值不包含在范围内

step : 表示你想在这个范围内跨过固定的长度,可以根据上限/下限的长度取:正/负值,但就是不能取0 

栗子:

import random

print(random.randrange(90, 100, 1))

print(random.randrange(110, 100, -1))

如果 step取0,意味着,持续随机的都只会是同一个数,那就不随机了,陷入循环,报错!

那如果想,得出范围内的所有数据,不再只得单个的,则用到下面的choices函数

5.random.choice (sequence)

从非空的序列中随机选取一个元素。

import random

print(random.choice(['Spring Festival', "have a New Year's Eve family dinner",
                     'Mid-Autumn Festival', 'have a mooncake',
                     'Dragon Boat Festival', 'row-dragon-boat']))

直接随机打印列表中的一个结果

5.5  random.choices(population,weights=None,k=1)

它允许从给定的 population 序列中随机选取k个元素。

population: 一个非空序列,如列表、元组或字符串,从中进行选择。

weights:这是一个可选参数,必须是和 population 同样长度的序列,表示每个元素被选中的概率权重。如果没有提供 weights,则每个元素被选中的概率相等。

k:一个整数,表示要选取的元素数量。默认值为1,表示只选取一个元素。

返回值:

如果k等于1,则返回一个元素。

如果k大于1,则返回一个列表,包含k个随机选取的元素。

例如:

import random

# 生成一个步长为2,包含90到99所有整数的列表
number_list = list(range(90, 100, 2))

# 使用 random.choices 随机选择 number_list 中的所有元素
# 使用变量 num_elements 来指定选择的元素数量
num_elements = len(number_list)
selected_elements = random.choices(number_list, k=num_elements)

print(selected_elements)

在random.choices(number_list , k=num_elements) 中,函数会从 number_list 中选取5个元素,并且这些元素的选取是随机的,就可能会有重复。意味着,在 selected_elements 列表中,原来列表中的每个元素都可能出现多次,甚至可能出现全部。

具体详情可访问以下网站:

random — Generate pseudo-random numbers — Python 3.10.13 documentationicon-default.png?t=N7T8https://docs.python.org/3.10/library/random.html

——————————————————    分割线  ———————————————————— 

打印结果在范围内,且’92’重复出现了...如果想要多个且不重复的,我们可用下面介绍的sample( )函数。

6.random.sample(population, k)

从 population 序列中随机选取 k个不同的元素。

从你想定的范围中随机获取 k个元素作组成一个新的子序列进行返回,而不会修改原来的序列。

示例如下:

import random

list_occupation = ['musician', 'director', 'model',
                   'postman', 'headmaster', 'pilot',
                   'nurse', 'engineer', 'scientist',]
# 从 list_occupation 中随机抽5个元素,作为一个片段返回
fragment = random.sample(list_occupation, 5)
# 打印出随机抽的元素和打印原来的列表元素
print(fragment)
print(list_occupation)

 

有兴趣的可以和 slice( ) 函数 来比较着学习,也是关于序列截取的用法!

最后讲个shuffle( )函数...

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

用于将序列x 中的元素随机打乱顺序。例如:

第91行用了for循环语句中的字典推导式,能够进行更复杂的一些循环结构,所以你也可以尝试将所有键值对的“键”和“值”都打乱顺序.../^ u ^/,然后再重组成新的字典 !

P.S.

下回再做个有意思的随机系统(p^ - ^p)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值