zoukankan      html  css  js  c++  java
  • 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 !

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

  • 相关阅读:
    『Python基础』第4节:基础数据类型初识
    『Python基础练习题』day02
    『Python基础』第1节 Windows环境下安装Python3.x
    Windows安装Mysql5.7.22
    jar 运行报错:找不到或无法加载主类
    linux 下的mysql 连接报错
    将本地Jar包安装到maven仓库中去
    Mysql 中的伪列用法
    Mysql 中的伪列用法1
    关于springboot中文件上传,properties配置
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14383369.html
Copyright © 2011-2022 走看看