Python--部分高级用法

推导式

推导式可以说是python语法的亮点之一,写法优雅,功能强大。

1、列表推导式

使用一句表达式构造一个新列表,可包含过滤、转换等操作,当需要每次输出2个值时,需将其做为一个元组或列表。

返回简单元素:

res = [i for i in range(10)]
print(res) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

返回列表:

res = [[i,i*i] for i in range(5)]
print(res) # [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16]]

返回元组:

res = [(i,i*i) for i in range(5)]
print(res)

要加else的时候,语法如下:

res = [i if i%2==0 else i*2 for i in range(10)]
print(res) # [0, 2, 2, 6, 4, 10, 6, 14, 8, 18]

嵌套循环时,语法如下:
 

res = [(x, y) for x in range(4) if x % 2 ==0 for y in range(5)]
print(res)

再复杂的就不建议用推导式了,就有点强行用的意思了。

 

2、字典推导式

data = [0,1,2]
res = {x:y for x,y in enumerate(data)}
print(res)  # {0: 0, 1: 1, 2: 2}

3、集合推导式

set1 = {i for i in range(10) if i %2 ==0}
print(set1) # {0, 2, 4, 6, 8},注意集合会自动去重哦。

4、嵌套推导式

lst = [[1,2,3], [4,5,6], [7,8]]
res = [y for x in lst for y in x]
print(res)  # [1, 2, 3, 4, 5, 6, 7, 8]

5、生成器

res = (x*2 for x in range(4) if x % 2 ==0)
print(res.__next__())  # 0
print(res.__next__())  # 4
# ...

 

 

多函数模式

python中一切皆对象,这种设计这其实模糊了很多底层概念,最明显的就是python中有引用而没有指针。

也正是这种设计才让python代码看起很优雅,衍生了不少高级用法。但其实也不完全是好事,如果写的太花里胡哨等过半年时间自己都未必能看懂为什么这么写0~0。

多函数实例:

# 假如我们要对下面字符串去除空格与$
str_lst = ['$1.123', '  $1123.454', '$899.12312']

def remove_space(str):
    """
    remove space
    """
    str_no_space = str.replace(' ', '')
    return str_no_space

def remove_dollar(str):
    """
    remove $
    """
    if '$' in str:
        return str.replace('$', '')
    else:
        return str

def clean_str_lst(str_lst, operations):
    """
        deal with string list
        参数1:接收要处理的列表
        参数2:接收一个由函数对象组成的列表
    """
    result = []
    for item in str_lst:
        # item被operations里的所有方法执行一遍
        for op in operations:
            item = op(item)
        result.append(item)
    return result

# 创建一个列表类型的参数对象
clean_operations = [remove_space, remove_dollar]
# 将列表对象传入
result = clean_str_lst(str_lst, clean_operations)
print(result)  # ['1.123', '1123.454', '899.12312']

 

其他小技巧

1、合并字典

x = {'a':1, 'b':2}
y = {'c':3, 'd':4}

z = {**x, **y}
print(z)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

由于z是个字典,里面必须接受的是key-value的形式,所以要进行拆包

* 与 ** 表示拆包,不懂的同学可以去了解一下这个知识,这里就不展开了。

 

2、另类拆包

a, *b = 1,2,3,4
print(a)  # 1
print(b)  # [2, 3, 4]

3、return多个值

python中return可以有多个值,但是内部会将它们打包成一个元组(好像ruby支持返回2个值,不知道是不是~)

def ret():
    return 1,2,3

res = ret()
print(res)  # (1,2,3)

4、列表合并为字符串

res = " ".join(["this", "is", "a", "demo"])
print(res)  # this is a demo

注意:“ ” 之间有空格,没有的话拼出来是thisisademo

 

5、链式比较

a = 2
if 1 < a < 3:
    print("true")  # true

 

 

如果本篇文章对你有帮助,可否在文章右侧点个赞再走呢~~

 

本文为原创,转载请注明出处

 

python 如何避免大量的if else​​​​​​​

python魔法方法(部分)

python避坑篇

python complex函数

python开发手册

python内置函数(下)

python内置属性,函数

python异常处理

python lambda函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Python,python,高级,推导式)