Python那些事——python的奇技淫巧!

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python7 g  z+ z. h0 w2 N! N
3 i% O" t1 T' U- b
对于python,我给大家总结了以下几点:8 P) H$ M7 A( ?
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
4 v6 B) Q7 O! ^( F% JPython 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。- Z& v/ i" C/ v
9 l* D. L9 Q; ^; C8 }: P

    ! D% m% X. ~. H6 d$ ?
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    ( C3 I6 w1 S! J3 }
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。+ x% B, f  ]" I
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。1 r) Z# Q' \+ m% I( Z
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。0 n; r+ W9 s9 f; C. D7 J7 T
在这里,我给大家就分享一个关于Python的奇技淫巧吧!
3 |) W& w+ F% P, u! V控制台操作控制台不闪退$ e  P& k7 O$ q. \9 Q
1
0 {- Q- V" x" t# l) P
os.system('pause')
; Z1 u- i/ E: B, q
获取控制台大小
0 ?. F7 U5 C" V4 ]. ^$ U$ u
11 \7 ^$ o" ^+ U$ _. D. z% N  f
rows, columns = os.popen('stty size', 'r').read().split()! s  k: Y, E0 p. B3 F
输入输出控制解决输入提示中文乱码问题# S' Z) i- b" f6 \' I
1
& q3 r' \5 P& Y( U* {* T' {
raw_input(unicode('请输入文字','utf-8').encode('gbk'))
. J8 H: s; s3 e, F  ^8 s
格式化输出
& J) V- H" O+ y6 k# w& b1 k. I: ^
1( U) b4 y0 w" N( ^' v1 \
print a.prettify()
8 ^: O1 W7 @) s  G: w: R
接受多行输入2 n5 j3 S6 e$ `7 h1 B6 ]& f
1) `9 e6 G  W! G1 D
2
! E9 p" o& |+ M2 C# ^# v+ _7 m! @3
+ d- U+ g! b5 \: b: f. {( Y47 O7 Q8 ~# Z" o: O1 j
59 b- }% o8 b7 I2 Z6 r
6  p5 T( o0 a7 K' E. h
7
6 l8 R. X. h$ _3 a82 t0 a- f) O- g9 L
9
8 ^, f4 T# S& _/ f' G4 Y10( M# b. L1 Y% r
11
- m/ [0 Z, N5 t12
1 X7 _( w9 B+ y0 Y5 H13% j5 ~, y) Y# }) P* G4 J
149 f9 g) i$ g. ]& M3 L+ y/ F
15' D1 v- k4 E. H! U
text=""
! ^- S7 m6 m. d5 iwhile 1:
) `8 X0 V" J$ N1 N data=raw_input(">>")
$ k2 t: X  n+ m6 p6 |1 V if data.strip()=="stop":
' t# q) N' v) ~4 q# | break/ j, r; v9 S" H/ X- o8 O
text+="%s\n" % data
* T+ H: Y( u/ _% O4 i  cprint text
: @) B# b+ m8 I9 }---------------------------1 Z' M9 G3 A9 ]7 r
>>1
" o4 w; q( P( t) E: ~>>2
! ]" ]! ~( u3 K& X% K1 I>>3* z2 u3 J+ @! l0 ~. ?
>>stop* @- e6 x( y4 |* Y& c4 A: Y+ K2 N
1
9 c. j7 g+ t1 W  I6 I2" k* }2 k) S6 ]' y6 f
3* R3 C, c% {; w6 B, b1 m0 U
同行输出& g# R# i2 X* O, [4 Z
1
/ [. }# h* O' q' v8 f7 g2
5 {" k/ q$ v% v+ g( M; \* g- a
Print '%s' % a," F8 r- N, M/ P) F7 K6 E% ]0 R4 N
Print '%s \r' % a% p) [. Q1 A. \$ B
标准输入输出* Y- {% S# {2 H; }+ ]8 A
1
* o) k) G7 k& h0 l2
7 ^& ^2 m7 j% @9 R' T( g' L
sys.stdout.write("input") 标准输入
8 R4 j- S  C0 M# D- d: ~sys.stdout.flush() 刷新缓冲区
5 C; C1 F' j! f0 p+ Z# }8 b
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)( B! x! J! K& Q% ?- `+ h
1% w9 X9 _+ A$ @8 t! P
2
1 ~) s- G* D. p1 b9 a3( o) v. _/ K5 i/ h' h
4
+ M' I2 p% z5 y
WConio.textcolor(WConio.YELLOW)
4 c9 k4 U9 a* F) [print "yellow"( E4 i. M+ m0 r' |! q& d& d3 _; J
WConio.textcolor(WConio.BLUE): z# M" `0 k" f
print "blue"
* q. p- [3 d1 |1 v
输出颜色控制(全平台)
6 q4 D6 |1 G) |6 p6 }+ g3 x
11 I% J; ~+ j8 ?2 D
2
0 o( t4 ^' q7 F3 ?2 l( U3
+ ]( U- ~3 [# P# H) {7 e1 J4: u! d; @; Q7 k$ H5 K2 y( b" N2 r2 F# m
5
3 _5 f- y& _3 ^5 Z, R6- e  K4 S; K5 Q; f
7
9 h+ c  ~; @( }% J4 S8 |8
( B: |( g- {: u$ w+ N; P7 |: e
red = '\033[1;31m'
3 \. L6 u, j# Z( y9 l. k$ pgreen = '\033[1;32m'
) c& @6 J# e  y3 a% {4 syellow = '\033[1;33m'( R& l6 W% F% K8 _3 f  X; V
white = '\033[1;37m'
; |$ b( m. Q, W: y# Yreset = '\033[0m’: O6 p2 w% u2 R
print red+"color is red"+reset  W' g# m, L0 S( I2 b2 ^
print green+"color is green"+reset
8 I4 D: ?: |( N2 S9 M/ P/ N
进度条控制方案一
$ x2 F6 b8 Y* s% F0 R+ ^
1
% [; W# s4 X" g) m$ [9 ~+ p3 l. p2
; V: O! B/ r$ e# }$ A: s3' |& p% w7 @6 S" m& P) b
4  p1 ^6 H3 a  E. F5 }
5
6 w# Y. ~+ h# D6, a3 U# Y% ?9 @; l5 i. m7 G0 b/ Q
7
3 J% D/ C! e  K: n, u* ]/ H8( {1 E  S. M7 G# V( Y9 C
from __future__ import division" [+ q( S' S$ V& Y' D% U! S
import sys,time( A: \5 w3 x# ^, F) y7 I
j = '#'2 T9 s; y4 d6 n8 T0 Y$ P: E0 M
for i in range(1,61):! K) x9 h; s6 r2 z
j += '#'
1 C7 E$ t0 x9 D% G0 o. K sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")
  {5 N$ U3 [" M* S sys.stdout.flush()
- ?. A& z3 X5 m# K) t9 K time.sleep(0.1)
( b9 t  L9 [" }7 E
方案二
  G2 w$ P2 u4 |9 j# R* i" Q
1; ~- \" Q4 d8 i
20 d% k! g8 x: ~# G
3
% [/ S; R! m. }+ q( u" J3 Z" u4; O; v5 k: a" J" e4 X
5/ i5 u+ T$ p, V2 M
6
& {% `' u0 W% a) w3 D5 }
import sys
3 f. ?7 K0 L8 {7 Himport time
' S, ]3 o  M( dfor i in range(1,61):! v3 x! J, U! R9 Q' P  v
sys.stdout.write('#'+'->'+"\b\b")2 f( D6 c4 n- Q+ L  Z4 D
sys.stdout.flush()- Z5 `  [' l+ w& s8 f# D' p/ w
time.sleep(0.5)* w' p$ [3 l2 r, Z- G
方案三( I6 B1 }; m% R/ H: _9 e
1
/ X7 Z/ s6 A+ _3 Z2
9 w$ _  U! d$ J  U7 ?3
4 x0 R9 N( y5 s9 `; G$ w; _4
- [6 T4 ?! ^  C0 P5& n8 Y- g3 d& _
6( y* B7 c; o( |# n8 Y  H6 a5 ~
7
& J% w( P: b# f8+ C5 T4 I; a9 y( h% o5 }, X
9
$ t! w% A$ j3 r# y6 Q* M10
$ H% t4 J) t3 q5 [- r& R11
/ h# W  B  u9 {8 ~7 n12  I6 N" I$ C5 I" S$ m
13% @3 s8 {. Z9 Y2 f2 y1 D: f6 K
14
" L0 O7 Z" c2 a6 Z3 i15
* n3 S' c* l/ G5 L% J3 P: R16' J* R' M+ D- |2 o3 w) T* E3 e
17
1 L' q- \. a; u, L8 f8 w7 R6 U18
, P3 J) b3 r0 w/ `19
4 u3 x7 B. @! v: [) e20& {6 ?3 i  O7 V9 O3 x3 X
21
  w5 y$ H' M" K: c: q9 `2 Y22
8 `8 T: d" z5 Y7 Q9 C233 v7 k  T1 u& I8 Y; w
24
: Z  o7 W$ z) P  R25- `, _& l# ^. m0 v: h( [) P; l; T* `
from progressbar import *$ x" N7 u4 h" t* G& G# a
import time
4 i& b% ^, ~" [import os
6 }; N4 u- G0 F, U' S% n  S9 ]rows, columns = os.popen('stty size', 'r').read().split() #获取控制台size
6 ~% Q7 L; J5 a5 [console_width=int(columns)
, e; r, A- ^: h% p  q9 {total = 10
. o, D6 H6 o! N  ]0 Mprogress = ProgressBar()
# ?+ @3 J. U. a  f9 M8 h1 E* T4 G# W7 Zdef test():
2 d) f. f- v9 f  x4 k( ?0 W '''0 m- A+ M0 c- x) v
进度条函数,记录进度
! o, Z3 d/ [, K* I '''
$ M" G& W6 v6 Y for i in progress(range(total)):" \8 a$ U* n7 c; \
test2()7 m3 h% |" x: A
def test2():6 }4 {9 n8 U7 ^/ f  y  f+ M4 B  x3 ?
'''
# F7 n# d( x% w+ D. C$ J 执行函数,输出结果
1 u" o1 p0 F  d: E! ^6 n '''! _- S9 H' m9 p1 O- S; j
content="nMask'Blog is http://thief.one"
/ P* f% _; {7 u$ |  E sys.stdout.write("\r"+content+" "*(console_width-len(content)))0 r/ L. r5 y3 e& J0 E
time.sleep(1)/ O$ G! W9 j; U* E$ y; A
sys.stdout.flush()# G; g& f$ v. P8 G, g$ s! A1 l
test()
6 p+ w  |, r( N1 X
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径( |0 s5 Y& r5 v5 Z& c+ j8 L* R9 y' B
16 h. B3 F0 T9 ]9 ~- C
2
- W2 q, E& K( v: |' A. T
from distutils.sysconfig import get_python_lib
# a2 `; m' O2 y- \( Q9 d$ X/ }) ~print get_python_lib
0 R0 ^% i4 N% [6 x
获取当前时间$ k; C/ r% j- V' v2 |* n8 J
1
& y+ Q8 a# H" U- H21 p; H4 g3 H! t  q+ q1 P/ A, `
3
/ H( W, D  c( h: R, C4" D/ e9 F, o; @5 b, e
c=time.ctime()
' p& D4 `- c1 G+ a5 s#自定义格式输出1 p  E6 u9 [, s3 O! g% g2 R
ISOTIMEFORMAT=’%Y-%m-%d %X’
8 U, @( u: U7 A4 d- Htime.strftime( ISOTIMEFORMAT, time.localtime() )3 a/ y( q0 x' U* p* C# O
查看系统环境变量! R9 d3 r, B# n1 }8 X
1) O) M" n& c! p
os.environ["PATH"]! c6 i4 z( @  H) D  X$ y- }
获取系统磁盘! Z5 v# |& V2 ~9 U0 o
1
0 Y9 u. a2 }! X. V( ]+ G
os.popen("wmic VOLUME GET Name")
- t; w  _' y4 x
获取当前路径(包括当前py文件名)2 O# v) ^- J, B9 T( M4 S7 |
1
: h5 a3 m( v4 N! V4 {3 F
os.path.realpath(__file__)4 ^4 }- H5 A. l2 h; p7 ~
当前平台使用的行终止符, m2 v9 B5 S* G- m+ P
1
0 l7 T6 p$ `- \0 O. N& c* l) C# L
os.linesep4 X. B. ~/ C4 e0 p% R+ V
获取终端大小
* l' V0 M' x. Z4 b) \
1
% ]' s! {9 M; i0 O0 k3 J- N26 J8 }* d' z4 `: u6 }; p
3" t- t9 t5 m8 \' r" d  T
rows, columns = os.popen('stty size', 'r').read().split()
$ I' K" {6 q6 L- S#python3以后存在可以使用os
# V1 [8 \: c2 S% M, h2 y& f* i; Gos.get_termial_size()4 j- ]8 H. M8 n1 s& [6 g
退出程序
# M- z8 a# ^# u1 h$ J" J! D1 ]
    5 V+ F0 F  m# k: Z2 |) H( F/ e
  • return:返回函数的值,并退出函数。
    8 F2 \2 P2 J- d0 D( @5 S0 e
  • exit():直接退出。) c3 X/ W) C: ^8 f9 I: d
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。
    " m4 P; `/ x' U, Z4 T4 R4 E7 `5 {
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)" Q/ c+ B% j' e4 Q% T' u
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序)
    ; F4 \# ~0 g! _- Z/ m1 O
网络操作域名解析为ip
+ o' E5 z# K$ h7 x
1
4 a9 V, Y: x3 N( s0 L, m0 V4 |
ip= socket.getaddrinfo(domain,'http')[0][4][0]. X" N0 M7 V' b) s
获取服务器版本信息
! R% r. h* A- m0 Q/ ]4 V$ {
16 V8 a# l1 V8 Y6 {. _# w
2
9 d7 w; _2 q: Z3
4 T* Q+ d- ^, k  |  n3 ^
sUrl = 'http://www.163.com'/ I$ v8 M: G) ]; L
sock = urllib2.urlopen(sUrl)
3 i4 P; k$ K$ f" P) I( |& {sock.headers.values()7 i- h+ N5 M8 x$ o' Z7 q
文件操作输出一个目录下所有文件名称
! b/ F9 x$ N; |" e& T" n9 j* ?, \
18 k+ @2 Z* R8 l( @, N$ c* R
2
. [0 k* q% q3 s: B3" ]: c! U' k$ J- e9 o: w! B. m
4
2 ~9 p5 {5 F7 m% j) r- }5/ ^+ d$ m4 }3 t, b
6
$ w, }  t/ v9 w9 s% j6 Y! D7
; C5 U2 k7 \  x* q8) |1 [7 ]9 P+ P  |8 a. d2 w! V
def search(paths):1 O$ p1 |3 @& U6 Q0 I  x- O  A6 P4 @
if os.path.isdir(paths): #如果是目录; L+ _6 G7 O5 [8 G, l& g
files=os.listdir(paths) #列出目录中所有的文件6 a8 s7 Y) ^$ L% a! |, i
for i in files:
3 r2 m( I. G" ~9 b i=os.path.join(paths,i) #构造文件路径
4 _. s0 O# s  c1 {/ s! P2 ^ search(i) #递归
/ E8 s, W9 f; }+ |% I6 | elif os.path.isfile(paths): #如果是文件
  D5 H( y8 I1 w* P& [ print paths #输出文件名
, k7 p% F$ u6 D* Q. M
文件查找( X- f- f) D; Q) k8 R5 T3 G
1
5 b2 j0 q- k0 x0 a1 K0 d22 D% \% h0 b0 e+ n
3
4 L; z) D8 f) q5 N& Z5 i/ W4
4 v( {4 b. Q  g# Y5
. u# Z) R& y, j+ W. R% h6
# \$ `; J  O! [7 W, U, r2 @/ F) z; D
import glob
* Z6 d/ n8 B4 X. l/ z7 T+ f* v. i3 V  ?print glob.glob(r"E:/*.txt") #返回的是一个列表
$ \0 _6 b1 M* K5 t查找文件只用到三个匹配符:”*”, “?”, “[]“" \7 m) z' z; L( D
”*”匹配0个或多个字符;6 ^' h6 ^: i5 i
”?”匹配单个字符;* T' a9 X" l$ W8 O' Z  T
”[]“匹配指定范围内的字符,如:[0-9]匹配数字。
6 n+ }! b, J/ V' S6 t% ]) i
查找指定名称的文件夹的路径
  U, N& H) n  |8 S
1" L* H& w- y$ {% T+ _+ @0 f
23 g& G$ x6 T1 ]% B- D# z
3
) j0 w- n* S9 B: Q3 a7 `/ p8 D- J3 E4
; o0 ^- J7 ^# A* I) A3 }  [5
0 t, G; z6 y. k$ x% g' z9 J8 y0 f6
/ I7 E1 w, i: X2 m2 B7
$ [0 L5 b( I  Q% `8
- o) `- u( b) `4 e2 F/ T9% n" @2 s  s* x! k. N$ [
10" \8 o# I9 D* u- Y5 r
117 k: R- {0 H  {
12
4 I: W/ l! e. r: L- N3 H13# }; C% U1 Y7 o: d& S2 B: w
14, ]1 ~1 V3 a+ N( g$ y, }5 @
159 T2 r: `# J3 x' \3 s
16# |1 t: a0 |' [0 {; d( F
17
7 c' L/ D; V8 ^% z0 \- ^$ Z7 T
def search(paths,file_name,tag,lists):* ?: k, \6 O* P8 A. A
if os.path.isdir(paths): #如果是目录
7 I' K( @! D* ?6 [! L' O0 U if file_name==tag: #如果目录名称为tag/ b; }, s; Q2 H* O& A- R
lists.append(paths) #将该路径添加到列表中
+ U5 M6 P! x/ ^9 r5 w else: #如果目录名称不为tag2 g8 o! ]3 {% {* ]/ A, c) y
try:
0 s" K- [, t) x' o! O1 \ files_list=os.listdir(paths) #列出目录中所有的文件
$ h2 S; n0 P0 I& \ for file_name in files_list:
/ A. z5 V- ?, N# x) q* j# _9 o path_new=os.path.join(paths,file_name) #构造文件路径2 T( t) w7 z6 B
search(path_new,file_name,tag,lists) #递归. q) ~$ o4 k+ L  V
except: #遇到特殊目录名时会报错- I4 C8 Z0 u, j/ b% S
pass
- U( `: d0 U* @6 S# G0 R0 ~6 | elif os.path.isfile(paths): #如果是文件
% ]: K$ V: }6 K& [. w pass
% j* m1 M( _1 Q) X4 ?( t0 Z return lists$ n* b% I7 ~8 [" o
数据操作判断数据类型
) U! G5 ~# e. v* Y
1
5 V5 |& j2 Q! d' [/ F$ b0 g
isinstance("123",(int,long,float,complex): y# I) Z; ?, I9 U4 \
字符串(string)去掉小数点后面的数字
& F5 n9 S/ a2 z( v
1
: J/ Q- ^% x: }% e4 H2
( W4 l* C9 h1 V3 y1 p$ b
a=1.21311/ X, u8 r  \. }
b=Int(math.floor(a))& H% q$ d# a- }
字符串倒置5 I! F4 R! W0 M4 x. y
1
0 j6 Q3 S2 m6 |1 V& ~: D& g2
/ R7 J7 ?+ y" f6 |
>>> a = "codementor"
& B0 m! [7 Q5 V; I. }>>> a[::-1]0 }# ?, {6 ]  i- G0 n
字符串首字母变大写( q* d; k. v/ x) `& c7 z
1
. j7 P& g# P, g( v! O2
9 @6 r3 w5 w8 n/ [1 E9 d3
2 B0 U4 h9 @7 I& @) M# R# R/ c
info = 'ssfef'
7 V+ c- v% Q0 sprint info.capitalize()
' w: P2 ]# k) q( `& B0 T7 X) \print info.title()# a/ v# n( J  l9 {7 _. Y
返回一个字符串居中,并使用空格填充至长度width的新字符串。3 _4 [' N3 c0 A' H
1
+ L+ V; k! Y5 w' m9 l
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。
4 \0 X4 X/ y6 g# C
列举所有字母
2 Q+ K- V; X' l/ B' G4 R
1
- D! |. |2 n4 ]2 V23 w4 n+ c7 F& b6 e" T
3- k' T  a" N# F  Q
print string.ascii_uppercase 所有大写字母
8 P& C' l4 l& \& wprint string. ascii_lowercase 所有小写字母  i; f; t& X$ O8 Z, ~$ y
print string.ascii_letters 所有字母(包括大小写)
* u" n' i8 x! R3 ]
列表(list)列表去重
; J4 J: w* T) a
1
7 W3 [8 `9 U# B! z2
, P* N' l$ T- O+ R
ids = [1,4,3,3,4,2,3,4,5,6,1]
, |9 Q* L' U' E; D$ o5 y. J1 vids = list(set(ids))
5 M& y1 z+ f6 @& r( ]3 \- M
列表运算
4 X* R; M+ j+ Y* w  V
1) k1 `8 o, \+ X8 P6 Q6 M
24 p) @0 S' l" ^$ J( ]
3
4 f0 J  j+ v6 V9 J( {' {4
$ ~: h. [! N$ {" W- B2 Q5
( @) q- n5 e3 k+ s
a=[1,2,3]
- c2 m' W; R+ y. H$ [b=[3,4,5]
( j/ o. f- O  X5 R; Y  Tset(a)&set(b) 与
  u, z& c: s0 g! I. Yset(a)|set(b) 或
6 d0 I6 |; t6 H: P8 Yset(a)-set(b) 非
* _- G6 N3 W+ O: c# v, s0 U5 S
单列表元素相加
! z# M- Z* C3 x, a1 Y* Q- B
1) d7 Y$ o3 ^- Q! Z
2  _7 h$ L5 \; B) x
3% s& j$ |9 d7 s; z; D, {
a = ["Code", "mentor", "Python", "Developer"]
: d3 u. c2 p- c+ W2 q>>> print " ".join(a)+ ~! S+ k) Z! u0 {# J* {
Code mentor Python Developer# H7 B& T0 O4 y% K* {
多列表元素分别相加
1 |' J0 k/ G: s% k- }
1
$ a% U$ H, Q; p# p9 p2$ V( R0 q! t- a" ]
3
8 V% r5 [7 K. l/ f4
) S# n) c/ m7 a0 S& ~" p' K5 H+ U5! I! Q0 G# r. R8 M
6& D* _# n; X7 H# |4 c2 Y( a
7, ]$ Q- T1 H6 ?( ]6 ^
88 y4 Z6 _2 q) l$ G3 G( O
list1 = ['a', 'b', 'c', 'd']
+ X3 f8 S5 ^% p* b- olist2 = ['p', 'q', 'r', 's']
0 E& F2 o! U- K>>> for x, y in zip(list1,list2): 8 c, }) d. d( b
print x, y
  T/ d" P# p6 q' bap
* ~7 M& p: n. l8 `bq8 V. N' R( Q  ?9 i8 |& {
cr! {, ]$ l8 o4 }& K! b4 f& u
ds* n4 t. Q; i& f) d! B
将嵌套列表转换成单一列表. A- g" D+ w9 [* j: a. r# [- w  o# W& U
1
8 p6 F" j; S% H4 _2 p+ U2
+ U& O' E: Y4 m5 P5 g3 p5 }* n3* D& K; u1 X( m$ ?. X: v0 \3 _- j' M: W
4
+ i& K; P* S4 c
a = [[1, 2], [3, 4], [5, 6]]5 h2 N$ J6 U. B
>>> import itertools8 Q0 c" K  h, J6 d* y
>>> list(itertools.chain.from_iterable(a))) c, V* q" a5 L# g4 z9 g
[1, 2, 3, 4, 5, 6]
0 |/ P, K5 R! F3 B  N/ s
列表内元素相加. ~0 D1 v5 Q$ X- `9 |: A2 b
1
7 d% e7 v% v8 i4 H& q2 u2
; E8 e0 u0 R: J  M& v5 j& |
a=[1,2,3](数字)2 k* K+ o- x% T+ X! I
sum(a)
/ M; O& a! w6 P  d- ~( b# z
产生a-z的字符串列表3 t" ~  \* N" z: K  ~  ?
1% U/ m) g" g/ Z& @; H: V% u6 ]
map(chr,range(97,123))0 B1 _' H) B. m% P
列表复制* _2 W1 f3 g- {3 t4 Z: |! A+ U
1
# z4 ~, w+ T0 S4 r, O7 n; G& [4 R2! n1 G3 G# k& Z
3' g( u* F0 s' w! L5 ?
a=[1,2,3]
* X9 K& }" o; c6 ?+ I& O0 L0 Yb=a( G$ ^* D! V$ F$ R2 f
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。
# G8 w  ?4 [" O0 }. i
列表解析if+else配合列表解析" Z, C4 q8 K. S* w, s1 {
1
* j1 \5 g9 `( a+ o
[i if i >5 else -i for i in range(10)]
+ C9 s1 ~% B' f# l" L4 n
字典操作(dict)筛选出值重复的key" _, u6 A3 t# N* g) L! g- ?
17 ]3 g: Z9 ~$ ^% A( \1 \
2
, T4 L2 n$ c5 [3
, @: T) m/ f: ]4
& R# {0 e% ?6 s/ D. h; V) Q5
. |" w( b/ c7 S2 K1 S7 ?- Z6  R& \2 I- O# V, u% ~7 |
list1=self.dict_ip.items()
! u, B; j% c  N2 S ddict=defaultdict(list)* {" d  C  ?; I7 W. @, p! s% R
for k,v in list1:
; D1 n9 E8 @6 c5 F+ D9 T4 x! S ddict[v].append(k)* i# ?3 D4 A- @8 E4 }
list2=[(i,ddict) for i in ddict if len(ddict)>1]6 G- x- O% u7 E
dict_ns=dict(list2)
9 U6 q( F/ J' b+ I4 c/ B2 B; {
字典排序(py2)3 P6 j; f& M. E2 Z% D5 \- r8 e
1
5 Y. c3 `* \3 t6 ^& u. g2
; i; l' W) |: v# Q8 K& L4 h
file_dict={"a":1,"b":2,"c":3}# A: F) G) p! k+ Z0 X# N
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。) m7 M& Z* m2 D
模块操作导入模块时,设置只允许导入的属性或者方法。
& M& Q  w" b3 w; I' ?  G5 w
1! p) [8 h7 A+ t/ Q" q! R
2% d7 J) ]( z" t+ N
32 C/ l, `, D9 U2 g
4" s/ F4 A' F+ R$ z) }$ m
5
6 o; |# D0 h9 z  i' A9 v* f. }6% V4 O* `  W; p/ O8 a
7
5 e/ j& G; G9 a$ H1 E2 H- L1 ]6 G8% I5 v& l& n0 q
9
; k. v8 v, i- @1 ~8 H10
4 Y1 t$ r) p5 b( x( t0 z9 b* {0 {
fb.py:0 G4 @( t& `- d
-----------------------
* t- ?9 T- d: x1 z( X: k, Y__all__=["a","b"]: r# K4 w: L, \. b; _& f. f* R- `8 {( E. x
a="123"; J9 M8 o0 C9 ^: J  n* b6 t
c="2345"( q# G8 B3 n5 ^4 v8 ]
def b():7 O& H) `6 G  w6 r7 k6 d
print “123”
% J* r4 U2 T5 M( Q6 N" f- j7 b( Y( M-----------------------
4 @. A; r0 k2 q% v  S$ Z% }from fb import *) E1 [5 X" o$ G( E: M8 W1 Q5 {: `
可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。5 Y. Q4 \& L! V
导入上级目录下的包
7 h/ R) }8 I' x3 w3 u* V- ^, A
1$ p5 ?0 V0 n3 T+ u
2
1 _1 g$ O" Y  B* `9 M
sys.path.append("..")/ H) ~: y0 \5 m  Q9 v7 a
from spider.spider_ import spider_: ]9 P# Z$ A- P1 A3 r8 s' C
导入外部目录下的模块( I/ ?; O- u# o6 W  g* s; ]
1
5 P9 Z0 T! g. ~7 K
需要在目标目录下创建__init__.py文件,内容随便。
& |4 m, A( u5 A' C# i, F
增加模块属性+ R% _) W4 Y7 H) E6 D* i6 ]; D
1
- w! O$ l( h5 d2 F/ C2
' N# B9 J4 w, f/ n$ n. W3
( W/ d! f( P8 V) b, _* t4
( z" Q+ c! \; F, a5 ^$ E6 R1 `0 [
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。
3 V7 C: h3 |* y2 ]1 Ha.py:
# D! c( S0 w3 v$ k4 v#! -*- coding:utf-8 -*-) I+ ]; m8 g: a( g2 I6 d5 o& K* E
__author__="nMask"
3 \! b1 V* ]2 U% k% p5 V! a3 w2 f
然后当我们导入a这个模块的时候,可以输出dir(a)看看
/ q/ g* @! u, h$ p- K; z, d+ g4 v
1
5 A- L' h( l4 Q28 \( G9 J* x; e
3
. H" s7 Q* J) n% L$ [4
! b4 r6 k1 @) B& a5
' H! A2 P! `* S/ g; z  ?
>>> import p9 H  ~- d; Q$ j, C
>>> print dir(p)
6 T, V# P) p+ ]$ k  G['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']+ T9 C9 A6 [7 X) x- |- j
>>> print p.__author__% [0 p$ J; k" O& Q
nmask2 j# s, \+ I% f" V9 v9 ~: P$ s
动态加载一个目录下的所有模块
8 u3 \" P, J2 F* Y  }5 J# {
1
& |. L7 d1 S  K1 S2 K' M6 R5 c2; j) _# v& Z/ L4 e
3
8 f: Y/ b5 a& d! s4 M4
; r# p4 i9 ^0 O0 c5
# n* v" N' A# K8 Y6- i4 A, g8 T. |3 p* R) T2 ~1 ?
7
0 k, O; U- ^) n7 [. b4 B8 K8+ B  V$ R6 ]' ^- K5 W* ]
9
& s8 V6 w; ]& k) M104 v$ l6 Q. X: T% G9 b$ ~' u
11* b& `: P6 l; ?. {8 @
目录:
4 U% u! E- l7 P' z" M1 ~8 P---test
. r; c6 K/ q/ B& H! s4 H3 G4 `8 V ----a.py6 m3 [, w5 b1 Z; w. ?. H
----b.py
$ x# ?: g; a- |$ l. _" n- ^1 f---c.py
# I( Y2 n5 M, Wc.py导入test下面的所有模块:" T" K6 V/ }( P
for path in ["test"]:
( P1 w3 Q+ Q- q$ Y+ z( j4 Z for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):/ |# j/ s! u8 N" ^4 d
if i!="__init__" and i!=".DS_Store": ##排除不必要的文件
3 u( e$ K" z5 V# K7 X  ? import_string = "import path+"."+i+"
8 r1 w! P2 u, O0 _9 o* H exec import_string #执行字符串中的内容* }3 ~2 {6 r& t# C/ C
函数操作装饰器函数输出当前时间装饰器3 f7 w; m6 @# N" f+ L9 H/ J
1
( B+ s: z) ^6 D% E+ A2
7 `; t2 b) r; m+ w( p% y3) N8 W: w" Y" a" `, h
4
% P' S5 U2 }0 K; V' A( F5
# O4 a# z3 W$ p# I  {. X0 ?5 \- H
def current_time(aclass):* ^+ N! ?2 b, |( r
def wrapper():
1 Y1 _) v& L& p4 o. ?& ^& ~; H5 J print "[Info]NowTimeis:",time.ctime()
: p- J* {$ x& [  v+ ?; f return aclass()( S( K2 u3 {( b, }: r
return wrapper1 H( h6 s2 O" L+ v) }/ f7 h8 X
itertools迭代器  C1 a+ j& V/ q( H2 I. @
1
3 e$ Y% u, p4 p2
9 O' w% I* W5 c& F3
% i( m6 I1 {0 [- b
p=product(["a","b","c","d"],repeat=2)' E! T& s+ X4 k) N1 u  f
----, h/ ?, w% w2 h" x/ r
[("a","a"),("b","b")......]# z- A, o% ~' a  y4 }+ n" y
reduce函数函数本次执行的结果传递给下一次。& A- G2 ]& Z) I7 V7 I% e2 A
1
, w1 I+ V# a& I. y) L2
1 Y8 v# t3 N( z. k0 I36 |  L$ {6 W2 H. l. @3 I
4
- {+ m" L. X, @3 T4 o1 h
def test(a,b):
$ K- C% L3 f; l return a+b, T2 M9 @8 m2 q: R2 Q9 i/ ]% r
reduce(test,range(10))
# s6 R, }" q2 m: h- d结果:从0+1+2......+9
' a# O% K6 V9 \* q: W

  `) G5 Q9 z: @" U, X) L如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

精彩评论19

fabao 发表于 2017-12-31 08:34:59 | 显示全部楼层
好尴尬,没人看嘛?
回复

使用道具 举报

cck123 发表于 2017-12-31 08:38:55 | 显示全部楼层
货太干了,值得收藏
回复

使用道具 举报

assdsss 发表于 2017-12-31 08:41:46 | 显示全部楼层
不错不错,高级技能!
回复

使用道具 举报

oLjwRgTm 发表于 2017-12-31 08:44:50 | 显示全部楼层
毕竟能静下心来好好学习的人真是不多
回复

使用道具 举报

ASUKI 发表于 2017-12-31 08:48:35 | 显示全部楼层
这是写控制台的语句吗
回复

使用道具 举报

bigocean 发表于 2017-12-31 08:51:42 | 显示全部楼层
写得不错!
回复

使用道具 举报

qXwqtnuK 发表于 2017-12-31 08:54:38 | 显示全部楼层
小编加油    是不是怀疑没过审核
回复

使用道具 举报

vsCnfaOT 发表于 2017-12-31 08:58:32 | 显示全部楼层
内容很老了,也谈不上奇巧,都是手册上内容。递归查找文件那个直接用os.walk或os.path.walk要省事多了。
回复

使用道具 举报

6363 发表于 2017-12-31 09:02:14 | 显示全部楼层
奇淫技巧吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图