温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用Python函数

发布时间:2021-10-19 15:42:04 来源:亿速云 阅读:125 作者:iii 栏目:编程语言

这篇文章主要讲解了“如何用Python函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Python函数”吧!

请大家猜一猜下面这段代码的运行效果:

import random import time  people = ['kingname', '王小一', '李小二', '张小三', '刘小四', '卢小五', '马小六', '周小七', '丁小八', '朱小九'] for i in range(1, 11):     lucky_guy = random.choice(people)     print(f'第{i}次抽奖,中奖用户:{lucky_guy}')     time.sleep(1)

你是不是以为这段代码运行以后,结果如下图所示?

如何用Python函数

但实际上,我可以让输出结果根据我的意愿随意变动,例如像下面这个 gif ,所有输出结果都是我:

如何用Python函数

你可以先不要往下看,放下手机,自己写一下代码,试一试 如何才能实现 gif 中的效果。

下面来为大家解密。

要实现这个效果,只需要两个知识点:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. Python自带模块是可以被覆盖的

  3. Python 的 import 在同一个运行时只会导入一次

首先来看第一个知识点。Python 的自带模块是可以被覆盖的,所以我们先来定义一个函数:

def choice(option):     return 'kingname'

接下来,使用这个函数覆盖random.choice:

import random random.choice = choice

现在,无论给random.choice传入什么参数,它始终都会返回kingname,运行效果如下图所示:

如何用Python函数

这个时候,你可能会说,那别人写代码的时候,又重新import random怎么办呢?random.choice不是又被改回去了吗?

实际上并不会,因为Python 的包导入机制决定了,在每个运行时内部,每个包只有第一次导入的时候有效,所以只要还在当前运行时,那么后续的所有import  random都是无效的。

所以,即使重新导入了 random  模块,random.choice依然是你修改以后的代码。所以当你再次执行的时候,会发现返回的还是你想要的数据,如下图所示:

如何用Python函数

可能有人会说这样容易被识破啊,别人只要先随便写一些测试数据,运行一次random.choice([123,  456]),发现返回的竟然是kingname,这不就露馅了吗?

实际上完全不用担心,我们可以这样操作:

如果备选列表里面不包含kingname,那么就使用原生的 random.choice

如果备选列表里面包含kingname,那么就以60%的概率返回kingname

要实现这样的功能,我们可以这样写代码:

首先重启当前 Jupyter 内核,让 random 恢复成默认的,然后编码:

import random  origin_choice = random.choice  def choice(option):     if 'kingname' not in option or random.randint(1, 10) > 6:         return origin_choice(option)     return 'kingname'  random.choice = choice

这样替换以后,当有kingname在备选列表中时,kingname被有60%的概率被选中,如下图所示:

如何用Python函数

当kingname不在备选列表中时,一切正常,如下图所示:

如何用Python函数

感谢各位的阅读,以上就是“如何用Python函数”的内容了,经过本文的学习后,相信大家对如何用Python函数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI