簡介
什麼是一行式(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}