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

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python
. c( ?+ l- y, n: g0 o8 |- \
7 r! A3 p" I, N8 o5 B& X3 z3 W对于python,我给大家总结了以下几点:
. T+ ^. |* e; z$ J# m# e4 KPython 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。* B; R" n& z9 w
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
4 [& Z, P* e5 }: }! s, [, I: L' l, z% O. r: f* T

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

3 Z6 [+ ~4 H! p2 t: O如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

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

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.|网站地图