小编在以前给大家介绍过python一些很少用到的功能,这次我们给大家分享了6个隐藏的python功能,学习下。
在python的设计哲学中,有这么一条内容:“Simple is better than complex”,简单的代码比复杂的要好,这也是为什么python被推荐为初学者必学的语言。很多人初学python,往往会受到其他语言的影响,比如之前学过java的,把python代码写的像java一样。举个例子,在java中设计一个类时,我们常常会为内部变量定义get和set方法,这是保证封装性的重要手段,但是在python中却不建议这样做,python中的内部变量使用单下划线表示(比如self.__name),不过这样定义了还是可以访问到私有变量。怎么说?python中使用约定,我不会强制说这个变量你不能访问,但是你最好不要这样做。如果需要对变量进行其他操作,使用@parameter装饰器进行get和set封装,这样直接访问内部变量会出错。讲偏了,关于类和对象这方面的内容以后再说。
你如果打开python交互环境,输入import this可以看到以下内容:
The Zen of Python, by Tim Peters Beautiful is better than ugly. 优美胜于丑陋 Explicit is better than implicit. 明了胜于晦涩 Simple is better than complex. 简单胜过复杂 Complex is better than complicated. 复杂胜过凌乱 Flat is better than nested. 扁平胜于嵌套 Sparse is better than dense. 间隔胜于紧凑
这些是python的设计哲学,后面还有一些没列出来,在写python代码时最好遵从这些设计哲学。
第一个功能。
如果让你写一段代码表示a大于2且小于10,大多数人都会用a > 2 && a < 10对吧,在python中你可以直接使用2 < a < 10。
a = 5 # 可以这样 print(2 < a < 10) # 也可以这样 print(10 > a <= 9)
True True
还有一个很多人可能都知道的技巧,就地交换值,而不需要中间变量。
a = 2 b = 3 print(a, b) # 直接交换 a, b = b, a print(a, b)
2 3 3 2
第二个功能。
我们常常会需要用for循环来遍历序列中的值,然后进行某些操作。在其他语言中你可能这么写:
a = ['a', 'b', 'c', 'd', 'e'] for(int i = 0; i < len(a); i++): print(a[i])
在python中很多人会这么写,对a的长度使用range生成一个序列,然后遍历。
a = ['a', 'b', 'c', 'd', 'e'] # 对a的长度使用range生成一个序列,然后遍历 for i in range(len(a)): print(a[i])
a b c d e
其实你可以这样写,直接使用enumerate方法,它会返回序列的下标和值。
a = ['a', 'b', 'c', 'd', 'e'] # 对a的长度使用range生成一个序列,然后遍历 for i in enumerate(a): print(i) # 或者这样 for index, value in enumerate(a): print(index, value)
(0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e') 0 a 1 b 2 c 3 d 4 e
第三个功能。
一般情况下,循环语句和条件判断语句是互不相干的,if后面就是else,for之后是in。其实循环语句后面也可以跟着else。for之后跟着else的意思是,运行这个循环,然后执行else中的语句。
for i in foo: if i == 0: break else: print("i was never 0")
除了for循环后面可以跟着else,while和try/except之后也可以跟着else。
第四个功能。
用过字典的都知道,如果我们需要字典中某个键的值,可以使用d['key']来获取,如果key不存在的话会抛出异常,这样肯定不好了,如果使用d.get('key'),在key值不存在时会默认返回None,这样就不用关心是否会有异常发生。其实还可以这样,d.get('key', 0),第二个参数指定key不存在时用来代替的值。
第五个功能。
正则表达式是个很让人头疼的东西,如果能加上注释该多好,这样我就知道自己写的是什么了。在Python中你可以这样。
# 对每一个规则使用引号括起来 pattern = ( "^" # beginning of string "M{0,4}" # thousands - 0 to 4 M's "(CM|CD|D" # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), # or 500-800 (D, followed by 0 to 3 C's) "(XC|XL|L" # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), # or 50-80 (L, followed by 0 to 3 X's) "(IX|IV|V" # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), # or 5-8 (V, followed by 0 to 3 I's) "$" # end of string ) print(pattern) # 然后bapattern放入对应的re匹配方法中。
^M{0,4}(CM|CD|D"htmlcode">def seek_next_line(f): for c in iter(lambda: f.read(1),'\n'): pass上面的代码中,从f中循环读入,如果碰到\n则结束读取。
其他的技巧像使用生成器表达式,利用拆包方法等等,之前都有说过,这里不再赘述。
python,隐藏功能
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]