Python一行式,一行程序完成強大操作

簡介

什麼是一行式(One-Liners)?

一行式指一行程序完成強大操作




共享文件

命令行

python -m http.server

在這裏插入圖片描述




美化JSON

file.json

{"name": "XerCis", "age": 23, "personality": "awesome"}

命令行

cat file.json | python -m json.tool

在這裏插入圖片描述




CSV轉JSON

file.csv

name,age,personality
XerCis,23,awesome
Xiaoming,18,poor

命令行

python -c "import csv, sys, json; print(json.dumps(list(csv.reader(open(sys.argv[1])))))" file.csv

在這裏插入圖片描述




性能分析

詳細內容查閱The Python Profilers

test.py

def f1():
    return [i * i for i in range(10)]


def f2():
    return [i * i for i in range(10000000)]


if __name__ == '__main__':
    f1()
    f2()

命令行

python -m cProfile test.py

在這裏插入圖片描述




列表輾平

from itertools import chain

a = [[1, 2], [3, 4], [5, 6]]
print(list(chain.from_iterable(a)))  # 層次必須相同
# [1, 2, 3, 4, 5, 6]

層次不同可查閱完全輾平




初始化

class A:
    def __init__(self, a, b, c, d, e, f):
        self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})




字符串描述

class A:
    def __init__(self, a, b, c, d, e, f):
        self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})

    def __str__(self):
        return "{}({})".format(self.__class__.__name__, ' '.join(map(lambda t: '{}={!r}'.format(t[0], t[1]), self.__dict__.items())))


class B(A):
    pass


print(A(a=1, b=2, c=3, d=4, e=5, f=6))
print(B(a=1, b=2, c=3, d=4, e=5, f=6))
# A(f=6 e=5 d=4 c=3 b=2 a=1)
# B(f=6 e=5 d=4 c=3 b=2 a=1)




解碼十六進制字符串

解碼十六進制字符串,帶/x,如/x48/x65/x6c/x6c/x6f/x20/x57/x6f/x72/x6c/x64/x21

python -c "import sys; print(''.join(chr(int(''.join(i), 16)) for i in zip(*[iter(sys.argv[1].replace('/x', ''))] * 2)))" /x48/x65/x6c/x6c/x6f/x20/x57/x6f/x72/x6c/x64/x21

解碼純十六進制字符串,如48656c6c6f20576f726c6421

python -c "import sys; print(''.join(chr(int(''.join(i), 16)) for i in zip(*[iter(sys.argv[1])] * 2)))" 48656c6c6f20576f726c6421

在這裏插入圖片描述




Linux的tail

test.txt

with open('test.txt', mode='w') as f:
    for i in range(10000):
        f.write(str(i) + '\n')

命令行,第一個參數爲文件名,第二個參數爲返回行數

python -c "import sys; from collections import deque; print(''.join(deque(open(sys.argv[1]), int(sys.argv[2]) if sys.argv[2] else 10)))" test.txt 5

在這裏插入圖片描述




是否迴文

命令行

python -c "import sys; print(sys.argv[1].find(sys.argv[1][::-1]) == 0)" 德韋恩韋德

在這裏插入圖片描述




快速排序

a = [3, 2, 5, 4, 1]
qsort = lambda l: qsort([x for x in l[1:] if x <= l[0]]) + [l[0]] + qsort([x for x in l if x > l[0]]) if l else []
print(qsort(a))
# [1, 2, 3, 4, 5]




素數篩

素數篩,即埃拉託斯特尼篩法,找出範圍內的所有素數

在這裏插入圖片描述

from functools import reduce

primes = lambda n: reduce((lambda r, x: r - set(range(x ** 2, n, x)) if (x in r) else r), range(2, int(n ** 0.5)), set(range(2, n)))
print(primes(100))
# {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}







參考文獻

  1. 一行式 - Python進階
  2. Powerful Python One-Liners - Python Wiki
  3. What Are The 10 Most Elegant Python One-Liners?
  4. The Shortest Quicksort Implementation in Python
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章