首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么递归函数返回None

问: 有一个调用自己函数: def get_input(): my_var = input('Enter "a" or "b": ') if my_var !...: Type "a" or "b": a got input: a 但是,如果输入别的东西,然后输入 "a" 或 "b",我会得到这样结果: Type "a" or "b": purple You...Type "a" or "b": a got input: None 不明白为什么 get_input() 函数返回是 None,因为它本应只返回 my_var。这个 None 是从哪里来?...该如何修复函数呢? 答: 它返回 None 是因为当你递归调用它时: if my_var != "a" and my_var !...因此,尽管递归确实发生了,但返回值却被丢弃了,然后你函数末尾退出。在函数末尾退出意味着 Python 隐式地返回 None,就像下面这样: >>> def f(x): ...

9410

为什么if-else影响代码复杂度

关于if-else争议 之前写了一篇文章《用规则引擎消除if语句,提高了代码可扩展性》,这篇文章想阐述观点是复杂if语句可能影响代码阅读和代码扩展性,会将非业务条件逻辑与业务逻辑混合在一起...时间长了代码越来越臃肿,因此这种情况下推荐使用一些设计模式例如策略模式,责任链模式等去优化if语句带来问题,文中发现使用规则引擎也能实现类似效果,因此介绍了怎么使用规则引擎Easy Rules去取代...if-else增加了代码复杂度 文章发布后,有很大一部分读者认为只用设计模式增加代码阅读性,还是觉得if-else好,就算if写得再复杂,也要使用if-else。...当然也有赞同观点: 统计了下,有八成读者评论是反对用其他方法代替if-else。所以我还是想写篇文章表达下观点。...关于对复杂if-else可能产生问题,大家可以看看这篇文章文章: “[面对复杂业务,if-else coder 如何升级?

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

解密张国荣《热·情》演唱超清修复版背后技术密码

超清沉浸感修复引擎 解开“时光之钥”技术密码 谈起《热·情》演唱,再多溢美之词都不足为过。有人提到它是张国荣曲折且传奇一生倾情演绎,为所有现场观众带来了一场前卫、华丽、优雅视听盛宴。...“但接到张国荣《热·情》演唱修复需求时,内心还是比较忐忑。”多媒体实验室专家研究员夏珍表示。...经过多次研判和技术验证,夏珍和他团队给这项修复工作制定了一个硬标准,即修复后影像能够给荣迷带来“现场感”观影体验。 而解开这一“时光之钥”技术密码,正是多媒体实验室超清沉浸感修复引擎。...在完成视频修复及画质增强后,智能编码模块可以通过自适应编码在减少输出文件大小、视频传输成本同时,保证视频主观质量不受影响,实现最佳画面效果。...压缩之前原视频极占存储空间,虽然分辨率是480p,但码率高达50M/s,如果修复后4K高清版本按高码率输出,将占据300GB存储空间。

73130

使用click创建完美的Python命令行程序

为了实现这一目标,总结了四条原则,希望对大家有所帮助: 命令行参数应提供默认值 处理所有可能参数错误,包括缺少参数,数据类型错误,无法找到文件等 撰写完善文档,解释参数含义以及如何设置 使用进度条显示长时间运行任务...一个简单例子 让我们将这些规则应用于一个具体案例:一个使用Caesar cipher加密和解密消息脚本。...假设我们编写了一个encrypt函数,如下所示。现在要创建一个脚本来加密和解密消息。 脚本允许用户选择:模式(加密或解密),密钥。前者默认值是加密,后者默认值是1。这一切都通过命令行参数实现。...最简单策略就是用所有可能秘钥调用解密函数 25 次,阅读解密结果,看看哪个是合理。但你很聪明,而且也很懒,所以你想让整个过程自动化。...假设你要解密文本包括10^5个单词,那么就要花费50秒才能输出结果,用户可能非常着急。因此建议这种任务一定要显示进度条。特别是,显示进度条还非常容易实现。

97810

为什么建议大家一定 C 语言

在如今 Python 和 Java 大火市场前景下,还是建议,如果你还在学校读书,或者你有大把空闲时间,不着急去找工作,那就静下心来,好好学习一下 C 语言,让你受益终生,也让你编程之路走更远...其设计精髓,其内涵思想,都是值得当下我们学习与借鉴 2、C 语言作为接触编程开始,对影响很大,带入了 IT 这行,本人也是极其喜欢 C 语言,C 语言涉及了很多底层知识,比如:内存...C 语言入门比较难,也是非科班出身,一路全凭自己摸索,自己智商并不高,能做到,代表大部分人应该都可以,换一种角度思考,如果难都搞定了,简单还是问题吗 与 C 结缘 说说自己本人亲身经历...,由一名后台转算法,仅仅用了 3 个月时间,但是为什么能这么快成功转型呢 扎实基础功底、快速学习能力、解决问题能力、以及个人潜力 扎实基础功底很重要,基础是什么:数据结构 + 算法,操作系统...,这些都是相通,公司需要做什么,快速学习就好 语言是工具,重要是思想,很认同这句话,以前没接触过 go,在百度实习时候,导师还给了我 1 周时间去熟悉,才上项目,以前没咋用 Python

1.4K50

为什么做分享时候感觉大脑空白

这也是最近遇到问题,这两个月做了两次技术分享,第一次就遇到上面的情况,有的点因为紧张怎么都想不起来,只能尴尬说,回头再重新捋一下发给大家。 为了避免每次遇到这种问题,得想办法解决。...再从大脑结构来说,你可以理解它们分布在这个位置: 从距离上说,本能脑和情绪脑距离心脏更近,一旦出现紧急情况,它们就会优先得到供血,这就是为什么紧张时候感觉大脑空白,因为最上方理智脑供血不足了。...而且因为它年龄小,在遇到危险时候,本身也竞争不过其他两重脑,所以就能解释,为什么人在遇到危险时候都靠本能反应而不是靠理智。 02 那怎么解决这个问题呢? 其实很简单,就是打稿子,然后自己多练。...前几天和阿常聊天,她说起将要和小林连麦,想想都觉得紧张,后来把默默把内容在脑子里过了几遍之后感觉踏实不少。...昨天看了阿常和小林连麦,非常稳,这也是要继续学习方向。 好了今天分享就到这里。 今日鸡汤: 自信人生二百年,会当击水三千里。

52540

公钥加密、加密Hash散列、Merkle树……区块链密码学你知多少?

加密技术历史可以追溯到古埃及,历史十分悠久。 举例来说,Caesar Cipher凯撒密码是凯撒大帝用来与将军们进行安全通信一个著名密码。...Hash是计算机科学中一个术语,意思是输入任意长度字符串,然后产生一个固定长度输出。无论某个Hash散列函数输入是3个字符还是10个字符,其输出长度始终是相同。...加密Hash散列函数具有以下几个关键特性: 确定性:无论给函数多少次特定输入,它都始终会得到相同输出; 不可逆性:无法根据函数输出来确定输入内容; 抗冲击性:没有任何两个输入可以得到相同输出;...如果有人想在前面的区块中哪怕更改一位数据,那么不仅会改变该区块数据Hash散列输出,还会改变后面的每一个区块。网络上矿工和节点立刻注意到所产生Hash散列与其链版本不匹配,并拒绝此次更改。...那么,为什么Merkle树对区块链技术来说是十分重要呢? 使用Merkle根并且应用加密Hash散列函数性质,可以快速判断给定区块中交易是否已被篡改,并识别正在被篡改特定交易。

1.3K11

维吉尼亚密码及程序实现

凯撒加密 在密码学中,恺撒密码是一种最简单且最广为人知加密技术。它是一种替换加密技术,明文中所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。...恺撒密码还在现代ROT13系统中被应用。但是和所有的利用字母表进行替换加密技术一样,凯撒密码密度是很低,只需简单地统计字频就可以破译。...ciphertext is\n%s\n", P2);/// 输出解码明文 return 0; } 下面是位移为3时明密对照表,根据位移不同还会产生不同明密对照表: 明: A B C D E F...维吉尼亚密码 在单一恺撒密码基础上,法国外交家布莱斯·德·维吉尼亚(Blaise de Vigenère)发明了一种方法来对同一条信息中不同字母用不同密码进行加密。...这样,同样E在一个位置可能被M所取代,而在另一个位置E则有可能以K面目出现。这样,就可以防止任何人利用频率分析法解密该条信息。

1.8K100

凯撒加密算法(最简单对称加密)

凯撒算法 概述 凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造,用于加密通过信使传递作战命令。它将字母表中字母移动一定位置而实现加密。...而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动位数“2”是加密和解密所用密钥。...只要传入明文和偏移量即可加密,解密需要传入密文和负偏移量就可以解密。...输出结果: 原文:Hello 加密后:Jgnnq 解密后:Hello 安全性 凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试...输出结果: 原文:Hello 加密后:Jhpqu 解密后:Hello

6.1K100

(二)传统密码——Caesar密码

Caesar密码是已知最早代换密码,又Julius Caesar发明。 Caesar密码非常简单,就是对字母表中每个字母,用它之后第三个字母来代换。...还可以更改移位数量k,这样就得到了一般Caesar算法, k取值从1到25: ? 解密算法为: ?...Caesar算法有三个特征: 已知加密和解密算法 密钥空间只有25 明文所用语言是已知,且其意义易于识别 根据Caeser算法这三个特征攻击者可以使用穷举攻击来获取密钥和明文。..., i), i) 对于密文:PHHW 使用破解算法输出如下: phhw 0 oggv 1 nffu 2 meet 3 ldds 4 kccr 5 jbbq 6 iaap 7 hzzo...这里需要特别注意是,攻击者能够破解密文并不意味着可以获取信息,如果用来加密明文本身是不可识别的(比如明文是用其他加密算法加密过),攻击者就无法通过穷举方式来获取密钥,因为攻击者无法知道哪一个输出才是对应明文

2.2K30

单表替换加密

通用特性 明文与密文一一对应 密钥空间较小情况下,采用暴力破解方式 密文长度足够长时候,使用词频分析 Caesar 凯撒密码加密时将明文中每个字母都按照其在字母表中顺序向后(或向前)移动固定数目...(循环移动)得到密文,解密时将密文中每个字母都按照其在字母表中顺序向前(或向后)移动固定数目(循环移动)得到明文。...基于密钥凯撒密码,给定一个密钥,将密钥每一位转换为数字(字母表对应顺序数字),以每一位数字作为偏移量进行加密与解密,密钥长度不够时重复密钥来补全长度。...在线工具:http://quipqiup.com/ 仿射密码 对明文每个字母使用加密函数: E(x) = (ax + b) (mod m) 其中m为编码系统中字母数目(一般为26),且a与m互质...易得解密函数为: D(x) = a^-1(x - b) (mod m) 其中a^-1表示a在mod m下乘法逆元

24930

BUU-Crypto-第一章

image.png 最近开始玩密码学,这是在BUU拉垮16000多排名,但是是最近才转到BUU(不是没有偷懒) 好了,废话不多说,开始writeup记录吧 1.MD5 e00cf25ad42683b3df678c61f42c6bda...image.png 直接解出密文: admin1 但是觉得这样还不够,我们应该再深入研究一下这个问题,MD5是一种类似于有损压缩加密算法,所以没有可以直接解密算法。...脚本: image.png emmmm,但是这个位移是自己推出来,实际比赛中要争取拿一血。大家还可以对代码做一些更好改进,让其遍历25种可能,直接在输出结果里找到合适flag就好了。...(text[i])+y)),end='')#此处 +y 可根据题目要求设置 caesar('afZ_r9VYfScOeO_UL^RWUc')#输入要解密文本 雷池密码是凯撒密码一个变种,关于凯撒密码变种其实还有很有很多...预计打算每8道题为一章节,有错误和更好建议随时与我交流,一起进步。

62330

为什么建议线上高并发量日志输出时候不能带有代码位置

如果大家发现网上有抄袭本文章,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么建议”系列第二篇,本系列中会针对一些在高并发场景下,对于组内后台开发一些开发建议以及开发规范要求进行说明和分析解读...往期回顾: 为什么建议在复杂但是性能关键表上所有查询都加上 force index 在业务一开始上线时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...可以从 StackWalker 性能优于通过异常获取堆栈,并且随着堆栈深度增加差距越来越明显看出来。 为何慢?...由此,建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果输出大量日志的话,这个日志是不能带有代码位置,否则会造成严重性能衰减。...我们在关闭输出代码行位置之后,同样压力下,CPU 占用不再那么高,并且整体吞吐量有了明显提升。

1.4K20

MySQL实战第十二讲-为什么MySQL“抖”一下?

SQL 语句为什么变“慢”了 在本栏第 2 篇文章《MySQL深入学习第二篇 - 一条SQL更新语句是如何执行?》中,我为你介绍了 WAL 机制。...在第二讲画了一个 redo log 示意图,这里改成环形,便于大家理解。 如下 图2 所示为redo log 状态图: checkpoint 可不是随便往前修改一下位置就可以。...所以,刷脏页虽然是常态,但是出现以下这两种情况,都是明显影响性能: 1. 一个查询要淘汰脏页个数太多,导致查询响应时间明显变长; 2. ...在文章里,也给你介绍了控制刷脏页方法和对应监控方式。 文章最后,给你留下一个思考题吧。...但如果你在配置时候不慎将 redo log 设置成了 1 个 100M 文件,会发生什么情况呢?又为什么会出现这样情况呢?

44320

C语言中函数为什么只能有一个返回值输出?怎么实现多个值输出

这是典型C语言中函数模块中返回值问题,算是常见语法细节,很多人觉得C语言已经过时了,只能代表着这类人还不算是真正技术人员,在嵌入式领域C语言依然充当着非常重要角色,C语言在很多领域还是首选编程语言...,主要在强调性能以及靠近硬件编程中还是发挥着极其重要作用,C语言常见难点屈指可数,但组合起来使用难度提升许多。...常见C语言难点有指针,结构体,函数,递归,回调,数组等等,看起来没多少东西,每个概念都能延伸很多功能点,今天题目其实就是函数模块中返回值问题,面向对象编程基本单元就属于函数函数包括参数输入,...具体功能实现,最后是结果输出,也就是这个题目的返回值,在正常情况下函数返回值只有一个,但在实际编程中需要用到多个,在设计时候还是归结成一类,如果类型相近可以弄成数组方式,如果类型不太一致直接放在结构体中执行...1.全局变量传递 这种方式算是最不科学规范,打破了软件开发需要闭环策略,但在基本语法上是支持,C语言里面最好少涉猎全局变量,使用出错风险提升很多,真要想使用建议还是用静态全局变量直接在变量前面加上

7.1K30

【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-002(Caesar)

文章目录 前言 一、Caesar 二、使用步骤 1.下载附件 2.凯撒密码 总结 ---- 前言 题目描述:你成功解出了来了灯谜,小鱼一脸意想不到“没想到你懂得这么多啊!”...你心里面有点小得意,“那可不是,论学习没你成绩好轮别的知道可不比你少,走我们去看看下一个” 你们继续走,看到前面也是热热闹闹,同样大红灯笼高高挂起,旁边呢好多人叽叽喳喳说个不停。...你一看 大灯笼,上面还是一对字符,你正冥思苦想呢,小鱼神秘一笑,对你说道,知道这个答案是什么了 ---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、Caesar 题目链接:https://...打开附件,可以观察格式符合flag格式cyberpeace{xxx_xxx_xxx},根据题目,可以合理猜测这里用是凯撒加密,根据第一位c变成了o,可得位移为12; 在线解密网址:https://...www.qqxiuzi.cn/bianma/kaisamima.php 得到flag:cyberpeace{you_have_learned_caesar_encryption} ---- 总结 凯撒密码

34330

安全科普:理解SSL(https)中对称加密与非对称加密

作者 懒懒dě-nms 今天刚好为站点后台弄了下https,就来分享了解吧。 密码学最早可以追溯到古希腊罗马时代,那时加密方法很简单:替换字母。...早期密码学: 古希腊人用一种叫 Scytale 工具加密。更快工具是 transposition cipher—:只是把羊皮纸卷在一根圆木上,写下信息,羊皮纸展开后,这些信息就加密完成了。...虽然很容易被解密,但它确实是第一个在现实中应用加密例子 Julius Caesar 用了另外一个类似的加密方法:把字母往右或往左移动几位;此法称为Caesar’s cipher....加密类型 之前说过加密算法绝大部分都属于以下两种加密类型之一: 对称加密:加密解密是同样“钥匙” 非对称加密:加密解密是不同“钥匙” 对称加密 用邮局例子来解释下对称加密 Alice...公匙是给信息发送者用来加密,私匙是自己用来解密这样最大好处是:不必通过不安全渠道发送私密东西。公匙本来就是给别人用,不用藏好。你私匙在你产生私匙电脑里保存着。

99080

OpenCV论道:为什么伽马校正函数只有一行?

大家好,又见面了,是你们朋友全栈君。...最近在用 OpenCV 识别棋盘棋子,基本思路是这样:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净棋盘;识别棋盘,标定位置...就是提升图像暗部细节。这与加曝处理是不一样,加曝一般不区分图像暗部和亮部。...奇怪是,在网上搜到伽马校正函数看起来都很复杂,即便是 python 写,也都得十几行甚至几十行,可我写伽马校正函数只有一行。为什么这样呢?是理解不对吗?...、伽马校正(gamma=2)灰度二值化效果、伽马校正(gamma=3)灰度二值化效果: 对于彩色图片,这个伽马校正函数依然有效。

1.1K20

Python 密码破解指南:5~9

您刚才运行凯撒密码程序自动将这个加密字符串复制到剪贴板,以便您可以将其粘贴到电子邮件或文本文件中。因此,您可以轻松地将程序加密输出发送给其他人。...这是因为凯撒密码破解程序使用相同步骤来解密消息。 凯撒密码破解程序运行示例 当您运行凯撒密码破解程序程序时,它会打印以下输出。它通过用所有 66 个可能密钥解密密文来破解密文guv6Jv6Jz!...当您运行transpositondecrypt.py程序时,它会产生以下输出: Common sense is not so common.| 如果您想要解密不同消息或使用不同密钥,请更改第 7...我们编写程序可以加密和解密“常识并不常见”这一信息用密钥 8;但是,您应该尝试其他几种消息和密钥,以检查加密然后解密消息是否产生相同原始消息。...这就是为什么函数内部append('Hello')方法调用即使在函数调用返回后也影响列表。 请记住这种行为:忘记 Python 以这种方式处理列表变量导致令人困惑错误

1.9K50
领券