python笔记55-有哪些 pythonic 的优雅语法能让你面试加分?

前言

现在面试的时候经常会考几个 python 基础的代码题,从答题者的解答代码就很容易看出一个人的代码水平。
一般笔试考代码题,主要是考察应聘者的代码是解决的这一个问题,还是这一类的问题?

交互

如何交换a和b的值? 如:a=1, b=2

先看第一个同学的答案

a = 1 b = 2 a = a+b b = a-b a = a-b print(a, b)

上面的解决思路虽然能得到b=1, a=2 但是解决的只是a和b都是数字的情况,解决的是这一个问题,而不是这一类的问题
题目的重点在于交换两个字,如歌a=”abc”,b=2,那么很明显上面的答案就会被推翻。

接下来看第二个同学的答案

a = 1 b = 2 # 用一个中间变量temp temp = a a = b b = temp print(a, b)

这一个用中间变量temp,就解决了交换的问题,也是一个很常见的解决问题的思路,只能算是及格,挑不出毛病。

再继续看第三个同学的答案

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

很明显第三个同学的答案又简介又优雅,还是很地道的 python 语法,这就是我们说的很 pythonic ,面试官一看就会有好的印象。

三元表达式

如果分数(score)小于60分,就认为成绩(result)是”不及格”, 大于等于60分,认为成绩是”及格”

于是这题写个 if 判断就可以了,没什么难度

# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ score = 90 if score < 60: result = "不及格" else: result = "及格" print(result)

如果学过其它编程语言应该知道有个三目运算符,如C++ ?:条件运算符(三目运算符) 用法

条件运算符强大而独特,它提供了一种表达简单 if-else 语句的简写方法。该运算符由问号(?)和冒号(:)组成,其格式如下:

表达式 ? 表达式 : 表达式 ;

以下是使用条件运算符的语句示例:

x < 0 ? y = 10 : z = 20;

这个语句被称为条件表达式,它由 3 个子表达式组成,使用问号 ? 和冒号 : 分隔。这 3 个表达式分别是:x<0,y = 10 和 z = 20。

上面的条件表达式与以下 if-else 语句执行相同的操作:

if (x < 0) y = 10;else z = 20;

java里面的三元表达式如下

int a = 1; String b = ""; b = a > 1? "执行表达式1":"执行表达式2" System.out.println(b)

python里面其实也有类似这种语法

# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ score = 90 result = "不及格" if score < 60 else "及格" print(result)

也可以在函数返回的时候用

def score_result(score: int): """根据分数返回成绩""" return "不及格" if score < 60 else "及格" if __name__ == '__main__': score = 90 print(score_result(score))

这种三元表达式的写法即简介又优雅,这就很 pythonic !

列表推导式

已知一个列表a = [1, -2, 3, -5, 7], 如何得到一个新的列表,把列表中的负数变成正数,得到[1, 2, 3, 5, 7]

对于这种列表题,很多小伙伴第一想到的解决办法就是先定义一个空的列表,然后for循环,挨个添加进去,如下

a = [1, -2, 3, -5, 7] b = [] for i in a: b.append(abs(i)) print(b)

虽然上面的代码也解决的问题,接下来看下更优雅的解决方式,使用列表推导式

a = [1, -2, 3, -5, 7] b = [abs(i) for i in a] print(b)

前面说了,面试考察的是你解决的是这一个问题,还是这一类的问题,只要是关于在原来列表基础上生成新的列表,都应该尽量使用列表推导式来解决。

比如上面的题变换下,如果a = [1, -2, 3, -5, 7], 列表中如果有负数,那么就计算它的平方,如得到新的列表[1, 4, 3, 25, 7]

# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ a = [1, -2, 3, -5, 7] b = [i if i > 0 else i**2 for i in a] print(b)

列表推导式可以结合上面的三元表达式,于是就可以优雅的解决上面的问题了,这就很 pythonic !

写代码就像写文章一样,优雅的代码会让人眼前一亮,回味无穷!
如果你写的文章是:我从桥上走了下来,就像我轻轻的走上来一样,我摆了摆手,跟夕阳再见了!(这是直男的文章)
徐志摩的文章是:轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。(这是渣男的文章)

2021年第六期《python接口自动化+测试开发》课程,1月9号开学(火热报名中!)

本期上课时间:1月9号-4月18号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • C 语言运算符与分支循环小记

    C 语言运算符与分支循环小记

  • 实现更好编码的 30 个神奇的 Python 技巧

    本文提供了 30 个 Python 技巧,可以将你的逻辑变成更优雅的代码. Python 因其代码的简单性和可读性,在其他编程语言中相当受欢迎.它是最简单的编程语言之一,可以作为你的第一门语言.如果你 ...

  • Java语言基础知识整理汇总

    表达式和运算符: 算术运算符: 元代表多少个操作数,一元表示一个操作数: 一元运算符:++自增(只能是变量),++a等价于a = a+ 1; ++a 与 a++ 有区别: ++a 先自增 在运算 a+ ...

  • 完整版Python笔记|超级有用

    完整版Python笔记|超级有用

  • 【python笔记】python java 语法,对比学习

    【python笔记】python java 语法,对比学习

  • python笔记2-冒泡排序

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...

  • python笔记3-发送邮件(smtplib)

    前言 本篇总结了QQ邮箱和163邮箱发送邮件,邮件包含html中文和附件,可以发给多个收件人,专治各种不行,总之看完这篇麻麻再也不用担心我的邮件收不到了. 以下代码兼容python2和python3, ...

  • python笔记4-遍历文件夹目录os.walk()

    前言 如何遍历查找出某个文件夹内所有的子文件呢?并且找出某个后缀的所有文件 一.walk功能简介 1.os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. 2.walk( ...

  • python笔记5-python2写csv文件中文乱码问题

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode. 当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的. 对 ...

  • python笔记6-%u60A0和\u60a0类似unicode解码

    前言 有时候从接口的返回值里面获取到的是类似"%u4E0A%u6D77%u60A0%u60A0"这种格式的编码,不是python里面的unicode编码. python里面的uni ...

  • python笔记7-多线程threading

    前言 1.python环境2.7 2.threading模块系统自带 一. 单线程 1.平常写的代码都是按顺序挨个执行的,就好比吃火锅和哼小曲这两个行为事件,定义成两个函数,执行的时候,是先吃火锅再哼 ...

  • python笔记8-多线程threading之封装式

    前言 冬天到了,小伙伴们最喜欢和好朋友一起吃火锅了,那么这种多个人同时吃火锅的场景如何用python实现呢? 一.执行函数 1.先写一个执行函数,用来实现做某件事情,不同的人吃火锅用一个参数peopl ...