阅读本文需要 2 分钟,公众号 somenzz ,欢迎学习 Python 的朋友订阅。

现在写代码的门槛非常低了,少儿都开始编程了,但从代码的风格一眼看出编码水平。是的,写代码是容易的,写出易读的代码也是容易的,但写出易读、优雅、高效的代码则需要经验的积累。今天分享 10 个技巧帮你写出更优雅、更符号 Pythonic 风格的代码。

1、三元表达式

通常情况下,条件表达式是这样写的:

condition = True

if condition:

x = 1

else:

x = 0

print(x)

更易读,更优雅,代码量更少的做法是这样的:

condition = True

x = 1 if condition else 0

print(x)

这就是三元表达式。类似其他语言的问号表达式。

2、使用下划线分隔大数

num1 = 100000000

num2 = 10000000

total = num1 + num2

print(total)

# 110000000

可以写成这样

num1 = 10_000_0000

num2 = 10_000_000

total = num1 + num2

print(total)

# 110000000

如果想让输出结果中使用逗号分隔,还可以这样:

num1 = 10_000_0000

num2 = 10_000_000

total = num1 + num2

print(f"{total:,}")

# 110,000,000

这样使大数看起来更容易让人类阅读。

3、使用上下文管理器with

通常打开一个文件操作如下所示:

f = open("text.txt","r")

file_contents = f.read()

f.close()

words = file_contents.split(" ")

word_count = len(words)

print(word_count)

更好的实践是使用上下文管理器 with,这样Python解释器会自动处理文件的关闭操作。这样的用法可以推广到更多IO操作的地方,省去关闭操作:

with open("text.txt","r") as f:

file_contents = f.read()

words = file_contents.split(" ")

word_count = len(words)

print(word_count)

4、使用 enumerate

names = ['dvid','xiaoming','lilei','hanmeimei']

index = 0

for name in names:

print(index,name)

index += 1

获取列表下标完全可以这样使用:

names = ['dvid','xiaoming','lilei','hanmeimei']

for index,name in enumerate(names):

print(index,name)

5、使用 zip

出现两个列表,需要一一映射时,通常,你可能会这样写:

names = ['艾米莉亚·克拉克','基特·哈灵顿','麦茜·威廉姆斯','彼特·丁拉基']

roles = ['丹妮莉丝·坦格利安','琼恩·雪诺','艾莉亚·史塔克','提利昂·兰尼斯特']

for index,name in enumerate(names):

print(f"{name} 扮演 {roles [index]}")

如果使用 zip,将变更更加简单:

names = ['艾米莉亚·克拉克','基特·哈灵顿','麦茜·威廉姆斯','彼特·丁拉基']

roles = ['丹妮莉丝·坦格利安','琼恩·雪诺','艾莉亚·史塔克','提利昂·兰尼斯特']

for name,role in zip(names,roles):

print(f"{name} 扮演 {role}")

输出结果均为

艾米莉亚·克拉克 扮演 丹妮莉丝·坦格利安

基特·哈灵顿 扮演 琼恩·雪诺

麦茜·威廉姆斯 扮演 艾莉亚·史塔克

彼特·丁拉基 扮演 提利昂·兰尼斯特

zip 支持多个可迭代对象,如:

>>> a=['a','b','c']

>>> b=[1,2,3,4,5]

>>> c=['A','B','C','D']

>>>

>>> list(zip(a,b,c)]

[('a', 1, 'A'), ('b', 2, 'B'), ('c', 3, 'C')]

>>>

zip 自动按最短的列表来进行组合映射,比自己编码代码容错性要高得多。

6、开箱

一般的变量赋值:

a,b,c = 1,2,3

当变量更多时还可以这样灵活赋值:

>>> a,b,*c,d=(1,2,3,4,5,6)

>>> print("a=",a,"b=",b,"c=",c,"d=",d)

a= 1 b= 2 c= [3, 4, 5] d= 6

这种方式叫就做开箱,命名非常形象。

7、输入密码时使用 getpass

获取用户输入时, input 会回显输入的字符,当输入的是密码时,将会暴露密码,因此输入密码时请使用 getpass 模块,不回显输入的字符,起到保护密码的作用:

>>> password = input("请输入密码:")

请输入密码:mypassword

>>> password

'mypassword'

>>> from getpass import getpass

>>> password2 = getpass("请输入密码:")

请输入密码:

>>> password2

'123456'

>>>

8、使用 map 函数

map(function, iterable, ...)

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。使用方法:

>>>def square(x) : # 计算平方数

... return x ** 2

...

>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方

[1, 4, 9, 16, 25]

>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数

[1, 4, 9, 16, 25]

# 提供了两个列表,对相同位置的列表数据进行相加

>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

[3, 7, 11, 15, 19]

8、使用 reduce 函数

reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。使用方法如下:

>>>def add(x, y) : # 两数相加

... return x + y

...

>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5

15

>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数

15

语法

reduce() 函数语法:

reduce(function, iterable[, initializer])

10、使用 help dir 函数获取帮助

当没有网,没有手册时,如何获取一个模块的使用方法呢? 我们可以直接进入 python 解释器环境,使用 help 和 dir 函数:

>>> import smtpd

>>> help(smtpd)

Help on module smtpd:

NAME

smtpd - An RFC 5321 smtp proxy with optional RFC 1870 and RFC 6531 extension

s.

DESCRIPTION

Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]]

Options:

--nosetuid

-n

This program generally tries to setuid `nobody', unless this flag is

set. The setuid call will fail if this program is not run as root (

in

which case, use this flag).

--version

-V

Print the version number and exit.

--class classname

-c classname

>>> from datetime import datetime

>>> dir(datetime)

['__add__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__forma

t__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_su

bclass__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '_

_reduce_ex__', '__repr__', '__rsub__', '__setattr__', '__sizeof__', '__str__', '

__sub__', '__subclasshook__', 'astimezone', 'combine', 'ctime', 'date', 'day', '

dst', 'fold', 'fromisoformat', 'fromordinal', 'fromtimestamp', 'hour', 'isocalen

dar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'min', 'minute', 'month',

'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'time

stamp', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname', 'utcfro

mtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']

>>>

(完)

python优雅代码大全_10个Python技巧帮你写出更优雅的代码相关推荐

  1. 帮写python代码_10个工具,帮你写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1. ...

  2. python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...

    原标题:涨姿势!这些小技巧让小白也可以写出更优雅的Python代码! 一.前言 我前两天回答了两个Python相关的问题,收到了很多赞,从答案被收藏的情况来看,确实对不少人都很有帮助,所以我也很开心. ...

  3. 如何写出更优雅的代码——编程范式简述

    <如何写出更优雅的代码--编程范式简述>源站链接,阅读体检更佳! 什么是程序? 1976年,瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 N ...

  4. 【整洁之道】如何写出更整洁的代码(上)

    如何写出更整洁的代码 代码整洁之道不是银弹,不会立竿见影的带来收益. 没有任何犀利的武功招式,只有一些我个人异常推崇的代码整洁之道的内功心法.它不会直接有效的提高你写代码的能力与速度,但是对于程序员的 ...

  5. [翻译Joel On Software]Joel测试:12步写出更高质量代码/The Joel Test: 12 Steps to Better Code

    Joel on Software The Joel Test: 12 Steps to Better Code Joel测试:12步写出更高质量代码 byJoel Spolsky Wednesday, ...

  6. 程序员如何写出更好的代码

    Martin Thompson是Java Champion称号获得者,同时也是一名高性能计算科学家.他说,为了写出更好的代码,程序员需要运用基本设计原则,阅读已有代码.在QCon London 201 ...

  7. 如何写出更好的代码(文末有福利)

    女主宣言 我们在过去的几期推送里已经给大家介绍了笔者根据多年研发经验总结出来的编码规范和 git 等实用工具的运用场景,今天咱们就来继续聊聊项目开发过程的诸多方法论.本文最先发布于 7rule,转载已 ...

  8. 两大方案,只为写出更安全的代码!

    [CSDN 编者按]安全漏洞的源头是开发,只有当开发人员写出了包含安全漏洞的代码,黑客才有机可乘.因此,如何保障开发写出更"安全"的代码,是安全防护工作中最重要的一环. 作者 | ...

  9. 写出更易懂的代码(一)

    今天周日,外面天气不好,舍友出去跟MM约会了,我一个人独自在家,逛逛园子. 发现一篇好文<javascript 杂谈之哪种写法你更喜欢?>,其中有一个代码,是模仿jQuery写法的: 虽然 ...

最新文章

  1. 计算机专业每年都有国企招老吗,这十大专业在国企中最受欢迎,待遇高、前景好,有你的专业吗?...
  2. SecureCRT设置和Xshell一样的快速命令集(使用快捷键输入命令和密码)
  3. 后门怎么写隐蔽java_用Java写黑软-后门篇
  4. 我的工作日常:一个CSS问题引起的小插曲
  5. 为什么传值时加号变成了空格_URL的参数中有加号传值变为空格的问题(URL特殊字符)...
  6. java与android https,java – Https连接Android
  7. 解析取值_圆锥曲线——高中解析几何全归纳
  8. 设计模式之观察者模式(Java)
  9. Exchange 2010 批量移动邮箱和增加移动请求并发数
  10. 笨办法学 Linux 8~11
  11. objective-c中@autoreleasepool的用法
  12. java编程练习(开源):十种经典游戏
  13. 第六届全国大学生GIS应用技能大赛开发题答案(非官方)
  14. Learning from class-imbalanced data: Review of methods and applications 论文阅读
  15. chrome浏览器关闭更新弹窗
  16. html网页如何编辑,简单html网页的快速编辑方法
  17. BLDC无刷直流电机驱动程序
  18. 加装固态,重装系统(双系统)
  19. django框架之中间件
  20. shell学习18:if判断-e,-f,-f,-L,-r,-w,-x,-s,-nt,-ot的意思

热门文章

  1. 基于Sigma protocol实现的零知识证明protocol集锦
  2. 新手建站免费空间及其使用体验
  3. 【高胜寒碎碎念】为什么有人愿意花两万块钱去参加IT培训学习?
  4. leetcode28.实现strStr()--简单词学KPM算法
  5. 把超星阅览器的文件转换为PDF文件
  6. 国际漫游通信服务应跟进
  7. 编程求ax2+bx+c=0的解
  8. 推荐几款好用的截图软件
  9. 简单的虚拟产品介绍html单页源码
  10. [2014/7]onscripter For windows/MAC/Linux V3中文版