117-可变与不可变对象的效率

python是一种解释型的语言,执行效率要比C这样的编译型语言差得多,但是也应该注意它的效率。 python的各种数据类型,按更新模型可以分为可变类型(如列表、字典)和不可变类型(如数字、字符串和元组)。多使用可变类型,它的执行效率比不可变类型要高。 在《37-生成密码/验证码》中,将结果保存到了一个名为 result 的变量中。result 是字符串,字符串不可变,所以python在工作时,首先要申请一段内存储 result 的初值(空串''),随机取得一个字符后(如'a'),result += 'a'实际上是要重新申请一个新的内存,把新字符串存储进去。如此往复,有几次循环,就要重新分配几次内存。 如果变量 result 使用列表,只需要为其分配一次内存即可,因为列表是可变的。代码可以更改为以下样式:

from random import choice
import string

all_chs = string.ascii_letters + string.digits  # 大小写字母加数字

def gen_pass(n=8):
    result = []

    for i in range(n):
        ch = choice(all_chs)
        result.append(ch)

    return ''.join(result)

if __name__ == '__main__':
    print(gen_pass())
    print(gen_pass(4))
    print(gen_pass(10))

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菜鸟致敬

【lua菜鸟③】变量和循环

{lua的特点:①不需要分号结尾,但是支持分号啊,如果一行写多个语句就用它啊②没有花括号③函数也不需要声明类型,却和c++的语法极其类似}

13220
来自专栏移动开发

java split()

java提供了split根据传入的分隔符,返回数组的方法.但是对于一些特殊字符我们要注意下,以防获取的不是我们想要的结果. 如想要根据”竖线”分隔:

19010
来自专栏py+selenium

python爬虫笔记之re.match匹配,与search、findall区别

网上的定义【 从要匹配的字符串的头部开始,当匹配到string的尾部还没有匹配结束时,返回None;  当匹配过程中出现了无法匹配的字母,返回None。】 

2.5K30
来自专栏xiaoxi666的专栏

C++数据个数未知情况下的输入方法

我们经常需要输入一串数,而数据个数未知。这时候就不能以数据个数作为输入是否结束的判断标准了。

14710
来自专栏搞前端的李蚊子

JS——判断一个对象是否为空

判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为“非空数组”;否则为“空数组” ?  2.通过JSO...

50080
来自专栏重庆的技术分享区

关于eslint使用规则,和各种报错对应规则

60050
来自专栏领域驱动设计DDD实战进阶

13-TypeScript单例模式

在JavaScript中,要实现设计模式比较复杂。而在TypeScript中因为使用面向对象的思想编程,要实现设计模式的方式与后端语言C#、Java等非常类似。...

33950
来自专栏对角另一面

读 Zepto 源码之集合元素查找

这篇依然是跟 dom 相关的方法,侧重点是跟集合元素查找相关的方法。 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zept...

23500
来自专栏小樱的经验随笔

getline函数(精华版)

在我的印象中,getline函数经常出现在自己的视野里,模糊地记得它经常用来读取字符串 。但是又对它的参数不是很了解,今天又用到了getline函数,现在来细细...

39740
来自专栏重庆的技术分享区

关于eslint使用规则,和各种报错对应规则。

ESLint 由 JavaScript 红宝书 作者 Nicholas C. Zakas 编写, 2013 年发布第一个版本。 NCZ 的初衷不是重复造一个轮子...

1.2K70

扫码关注云+社区

领取腾讯云代金券