温馨提示×

温馨提示×

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

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

Python编程的两处陷阱是什么

发布时间:2022-01-13 15:09:36 阅读:119 作者:iii 栏目:大数据
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇“Python编程的两处陷阱是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python编程的两处陷阱是什么”文章吧。

不可变对象陷阱

思路:生成1百万个随机字符串,分别使用不可对象或可变对象合并字符串,比较花费时间。

生成随机字符串的代码:

import random import timebig = [chr(i) for i in range(65,91)]small = [chr(i) for i in range(97,123)] def randNStr(n):     ...:     result = []     ...:     for i in range(n):     ...:         strlen = random.randint(3,9)     ...:         result.append(''.join(random.sample(small+big,strlen)))     ...:     return result 

使用不可变对象方法:combine+s 再赋值给combine,这条语句:因为combine, s都为不可变对象,返回的结果就是新生成一个对象,对象不断堆积。

def immfn(n):     ...:     combine=''     ...:     res = randNStr(n)     ...:     beg = time.time()     ...:     print('beg time %s'%str(beg))     ...:     for s in res:     ...:         combine = combine + s     ...:     #print(combine)     ...:     end = time.time()         ...:     print('end time %s'%str(end))     ...:     print('elispe time: %s'%str(end-beg))

为了避免重复生成新的对象,使用可变对象,文中 Python解惑之对象可变与不可变 提到过,一般可迭代对象,都是可变的。

def mutfn(n):     ...:     combine=''     ...:     res = randNStr(n)     ...:     beg = time.time()     ...:     print('beg time %s'%str(beg))     ...:     combine = ''.join(res)     ...:     #print('print result:%s'%combine)     ...:     end = time.time()         ...:     print('end time %s'%str(end))     ...:     print('elispe time: %s'%str(end-beg)) 

此处使用 str.join(iter),接受可迭代对象,并只返回一个新对象。比较以上两种方法的计算时间,分别从10万,步长10万,终止到100万,比较分析合并字符串的时间。

Python编程的两处陷阱是什么

可以看到可变对象只生成一个新对象的方法,比不可变对象在数据量越大情况下,优势更明显,呈现扩张的喇叭口,当数据为90万时,节省时间成本高达:(0.19-0.025)/0.025 = 6.6 倍。当数据量增长到1千万或更大时,优势更明显。

可变对象陷阱

BAT面试题26:一道Python填空题

题目是这样的:

def f(x,l=[]):    ...:     for i in range(x):    ...:        l.append(i*i)    ...:     print(l) f(2)f(3)结果为: In [2]: f(2)                                                                                         [01]In [3]: f(3)                                                                                         [01014]

原因,可变对象作为函数参数,并被设为默认值后,当被再次调用函数后,函数参数原来取值将被再次索引。

为了避免这个问题,可变对象的默认值一般取值为常数:None

def f(x,l=None):    ...:     if l is None:    ...:         l = []    ...:     for i in range(x):    ...:        l.append(i*i)    ...:     print(l)    ...:      

这样连续被调用时,将会按照预期输出。

以上就是关于“Python编程的两处陷阱是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

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

原文链接:https://my.oschina.net/u/4585819/blog/4583469

AI

开发者交流群×