Python代码显得Pythonic(区别于其他语言的写法)

目录
  • 一、字符串
  • 二、运算
  • 三、赋值
  • 四、变量命名
  • 五、提升代码可读性
    • (一)避免用分号;在一行内些多条语句
    • (二)避免用\符号来换行
    • (三)if-else三元表达式

一、字符串

对于字符串连接,相比于简单的+,更pythonic的做法是尽量使用%操作符或者format函数格式化字符串。

name = "jack"
n = 90
 
# no
x = 'name: ' + name + '; score: ' + str(n)
    
# yes 
x = 'name: %s; score: %d' % (name, n)
x = 'name: {}; score: {}'.format(name, n)

避免在循环中用+和+=操作符来累加字符串。

由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间。

比较pythonic的做法是将每个子串加入列表, 然后在循环结束后用.join 连接列表。

# no
a = ""
for i in ["a", "b", "c"]:
    a += i
    
# yes
a = "".join(["a", "b", "c"])

二、运算

python支持链式运算,pythonic的做法是优先链式运算,而不是使用and、or。

# no
a=1, b=1, c=1
if a > 1 and a < 2:
    pass
 
# yes
a=b=c=1
if 1 < a <2:
    pass

三、赋值

python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

python允许你同时为多个变量赋值。

a, b, c = 1, "a", 2
print(c)

这个特性的一个运用是,在不引入第三个变量的情况下,交换两个变量的值,非常优雅

a, b = b, a

当某函数有多个返回值,但只想获取其中某值时,pythonic的做法是使用“_”在赋值时代替我们不需要的变量的位置。

# func函数有两个返回值,但只想要第一个
need, _ = func(*args) 

四、变量命名

Python最基本的命名规则是:第一个字符必须是字母表中字母或下划线 _,标识符的其他的部分由字母、数字和下划线组成,且对对大小写敏感。

python对变量命名时应避免变量名过长。

此外,对于较长的变量名,更 pythonic 的做法是用下划线 _ 连接,如some_var,而非鞍型(大驼峰、小驼峰)格式,如 someVar

# no
SomeVar = 1
 
# yes
some_var = 1

五、提升代码可读性

有一些写法是Python允许的,但是却不被推荐的,因为这些写法会降低代码的可读性。

(一)避免用分号;在一行内些多条语句

例如:

import sys; x = 'hello'; sys.stdout.write(x + '\n')

的可读性,远远弱于

import sys
 
x = 'hello'
sys.stdout.write(x + '\n')

(二)避免用\符号来换行

如果代码包含在括号、方括号或大括号中,Python将会认为代码是一行的:

def function(arg_one, arg_two,
             arg_three, arg_four):
    return arg_one

因此,为了提升可读性,我们应尽量避免用\符号进行换行:

from mypkg import example1, \
    example2, example3

这种方式的可读性比用括号换行的可读性低很多。

(三)if-else 三元表达式

下面是一个if-else 三元表达式,可以将 if-else 放在一行

value_when_true if condition_is_ture else value_when_condition_is_false

例如:

a = "Hello" if foo() else "Goodbye"

我们可以用三元表达式来把if else 放在一行写,但是不要把 if-elif-else 放在一行写:

  • 一方面,这样做会使得一行代码变得过长,违反PER-8的书写规则:规定一行代码最长不能超过80个字符。
  • 另一方面,这么写也违反了Python之禅:‘可读性为王’。
  • 最后,Python 的语法也不支持这样x写。

因此,当我们需要用到 elif 的时候,我们需要写一个常规的、换行的 if-elif-else 表达式

到此这篇关于Python代码显得Pythonic(区别于其他语言的写法)的文章就介绍到这了,更多相关Python代码显得Pythonic内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 给大家整理了19个pythonic的编程习惯(小结)

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然. 要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,下面列举一些常见的Pythonic写法. 0. 程序必须先让人读懂,然后才能让计算机执行. "Programs must be written for people to read, and only incidentally

  • 几种实用的pythonic语法实例代码

    前言 python 是一门简单而优雅的语言,可能是过于简单了,不用花太多时间学习就能使用,其实 python 里面还有一些很好的特性,能大大简化你代码的逻辑,提高代码的可读性. 所谓Pythonic,就是极具Python特色的Python代码(明显区别于其它语言的写法的代码) 关于 pythonic,你可以在终端打开 python,然后输入 import this,看看输出什么,这就是 Tim Peters 的 <The Zen of Python>,这首充满诗意的诗篇里概况了 python

  • Python中enumerate()函数编写更Pythonic的循环

    enumerate函数 enumerate是一个Python内置函数,一个功能强大的内置函数.其实功能强大不足以形容它, 但是很难用一个词来形容它的用途. 让我们来看看一个使用enumerate进行循环的例子 names = ['李四', '张三', '王二'] for index, name in enumerate(names): print(f'{index}: {value}') 下面是这个循环的结果 0: 李四 1: 张三 2: 王二 这通常是一个很有用的方式去循环,但很多初学者甚至中

  • Python 的 sum() Pythonic 的求和方法详细

    目录 1.理解求和问题 2.Python 入门 sum() 2.1 必需的参数: iterable 2.2 可选参数: start 3.对数值求和 4.连接序列 5.使用 Python 进行练习 sum() 5.1 计算累积和 5.2 计算样本的平均值 5.3 求两个序列的点积 5.4 展平列表列表 6.使用替代品 sum() 6.1 对浮点数求和: math.fsum() 6.2 连接可迭代对象 itertools.chain() 6.3 连接字符串 str.join() 7.结论 前言: 我

  • 15个Pythonic的代码示例(值得收藏)

    Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手. 要写出 Pythonic(优雅的.地道的.整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,这里小明收集了一些常见的 Pythonic 写法,帮助你养成写优秀代码的习惯. 01. 变量交换 Bad tmp = a a = b b = tmp Pythonic a,b = b,a 02. 列表推导 Bad my_

  • Python中那些 Pythonic的写法详解

    前言 Martin(Bob大叔)曾在<代码整洁之道>一书打趣地说:当你的代码在做 Code Review 时,审查者要是愤怒地吼道: "What the fuck is this shit?" "Dude, What the fuck!" 等言辞激烈的词语时,那说明你写的代码是 Bad Code,如果审查者只是漫不经心的吐出几个 "What the fuck?", 那说明你写的是 Good Code.衡量代码质量的唯一标准就是每分钟骂

  • Pythonic版二分查找实现过程原理解析

    前提:升序数组,待查元素在数组中. 二分查找:就是一个递归函数c.待查元素a,当前数组中位数b,如果b=a则返回b的索引,b>a则在b左侧的子数组中调用函数c,否则在b右侧子数组中调用函数c. 第一次思考,按着上面的思路编程后的结果: def binary_search(index, a, value): if a[(len(a) - 1) // 2] == value: return index + (len(a) - 1) // 2 elif a[(len(a) - 1) // 2] <

  • 让你的python代码更加pythonic(简练、明确、优雅)

    何为pythonic? pythonic如果翻译成中文的话就是很python.很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等. 我的理解为,很+名词表达了一种特殊和强调的意味.所以很python可以理解为:只有python能做到的,区别于其他语言的写法,其实就是python的惯用和特有写法. 置换两个变量的值. 很python的写法: 复制代码 代码如下: a,b = b,a 不python的写法: 复制代码 代码如下: temp = a a = b b = temp 上面的例

  • Python代码显得Pythonic(区别于其他语言的写法)

    目录 一.字符串 二.运算 三.赋值 四.变量命名 五.提升代码可读性 (一)避免用分号;在一行内些多条语句 (二)避免用\符号来换行 (三)if-else三元表达式 一.字符串 对于字符串连接,相比于简单的+,更pythonic的做法是尽量使用%操作符或者format函数格式化字符串. name = "jack" n = 90   # no x = 'name: ' + name + '; score: ' + str(n)      # yes  x = 'name: %s; sc

  • C语言调用Python代码的方法

    问题 你想在C中安全的执行某个Python调用并返回结果给C. 例如,你想在C语言中使用某个Python函数作为一个回调. 解决方案 在C语言中调用Python非常简单,不过涉及到一些小窍门. 下面的C代码告诉你怎样安全的调用: #include <Python.h> /* Execute func(x,y) in the Python interpreter. The arguments and return result of the function must be Python flo

  • 如何更优雅地写python代码

    前言 Python 这门语言最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.但有时候我们写代码,特别是 Python 初学者,往往还是按照其它语言的思维习惯来写,那样的写法不仅运行速度慢,代码读起来也费尽,给人一种拖泥带水的感觉,过段时间连自己也读不懂. <计算机程序的构造和解释>的作者哈尔·阿伯尔森曾这样说:"Programs must be written for people to read, and only incidentally for mac

  • 通过PHP与Python代码对比的语法差异详解

    一.背景 人工智能这几年一直都比较火,笔者一直想去学习一番:因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着基础不牢,地动山摇的尴尬,比如在遇到稍微深入些的问题时候就容易卡壳,于是准备从Python入门从头学起: 笔者觉得应该有不少人同样熟悉PHP或者Python语言,对另外一个门语言并不是太熟悉,有想法学习另外一门语言,希望通过这篇文章能够对大家有一点帮助. 二.知识点 最近在完成一个小作业,题目要求:通过Python代码实现,让用户输入用户名密码,认证成功后显

  • Python代码一键转Jar包及Java调用Python新姿势

    需求背景 进击的Python 随着人工智能的兴起,Python这门曾经小众的编程语言可谓是焕发了第二春. 以tensorflow.pytorch等为主的机器学习/深度学习的开发框架大行其道,助推了python这门曾经以爬虫见长(python粉别生气)的编程语言在TIOBE编程语言排行榜上一路披荆斩棘,坐上前三甲的宝座,仅次于Java和C,将C++.JavaScript.PHP.C#等一众劲敌斩落马下. 当然,轩辕君向来是不提倡编程语言之间的竞争对比,每一门语言都有自己的优势和劣势,有自己应用的领

  • 浅谈Python中文件夹和python package包的区别

    pycharm右键新建时会有目录(文件夹)和python package两个选项,这两个到底有什么不同呢 1.原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有__init__.py那么它就是这个包的子包了. 当你将一个包作为模块导入(比如从 xml导入 dom)的时候,实际上导入了它的__init__.py 文件. 2.而目录跟包唯一不同的就是没有__init__.py 文件,一个包是一个带有特殊文

  • 分析详解python多线程与多进程区别

    目录 1 基础知识 1.1 线程 1.2 进程 1.3 两者的区别 2 Python 多进程 2.1 创建多进程 方法1:直接使用Process 方法2:继承Process来自定义进程类,重写run方法 2.2 多进程通信 Queue Pipe 2.3 进程池 3 Python 多线程 3.1 GIL 3.2 创建多线程 方法1:直接使用threading.Thread() 方法2:继承threading.Thread来自定义线程类,重写run方法 3.3 线程合并 3.4 线程同步与互斥锁 3

随机推荐