Python的优雅本领

作者: 韦德国际1946手机版  发布:2019-09-03

<转> Python的优雅工夫,python本领

枚举

毫无这么做:

全选复制放进笔记

i = 0 
for item in iterable: 
    print i, item 
    i  = 1

而是那样:

全选复制放进笔记

for i, item in enumerate(iterable):
    print i, item

Enumerate能够承受第叁个参数,举个例子:

全选复制放进笔记

>>> list(enumerate('abc')) 
[(0, 'a'), (1, 'b'), (2, 'c')] 

>>> list(enumerate('abc', 1)) 
[(1, 'a'), (2, 'b'), (3, 'c')]

shell 中的<,<<,>,>>

文本陈述符

 

linux运维后,会暗中认可张开3个公文描述符,分别是:规范输入standard input 0,正确输出standard output 1,错误输出:error output 2

 

日后张开文件后。新添文件绑定描述符 能够依次扩展。 一条shell命令试行,都会继续父进度的文件陈诉符。由此,全数运维的shell命令,都会有暗中认可3个公文陈说符。

Python的优雅本领。 

linux shell下常用输入输出操作符是:

 

  1.  规范输入   (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0   0代表:/dev/stdin 

  2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1  1象征:/dev/stdout

  3.  规范错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

 

>,>>

输出重定向:表示把将出口重定向到显示屏大概器材只怕文件

上边大家一贯看有的例子吗

 

 

[email protected]:~/study_shell$ ls t.txt t.txt1
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt
# 正确输出和错误输出都显示在屏幕上
# 我们试着把正确输出重定向到suc.txt(success),可以看到屏幕输出上只有错误输出了,
#从这里也可以看出,默认的正确输出(代码为1,)是可以忽略不写的
[email protected]:~/study_shell$ ls t.txt t.txt1 >suc.txt
ls: 无法访问t.txt1: 没有那个文件或目录
[email protected]:~/study_shell$ cat suc.txt 
t.txt
# 正确输出和错误输出分别输出到不同的文件
[email protected]:~/study_shell$ ls t.txt t.txt1 1>suc.txt 2>err.txt
[email protected]:~/study_shell$ cat suc.txt err.txt 
t.txt
ls: 无法访问t.txt1: 没有那个文件或目录
# >> 这样写表示追加到文件
[email protected]:~/study_shell$ ls t.txt t.txt1 1>>suc.txt 2>>err.txt
[email protected]:~/study_shell$ cat suc.txt err.txt 
t.txt
t.txt
ls: 无法访问t.txt1: 没有那个文件或目录
ls: 无法访问t.txt1: 没有那个文件或目录
# &[-,1,2] 分别表示关闭对应的标识,正确输出,错误输出
# 关闭错误输出
[email protected]:~/study_shell$ ls t.txt t.txt1 2>&-
t.txt
# 错误输出重定向到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 2>/dev/null
t.txt
# 错误输出重定向到到文件
[email protected]:~/study_shell$ ls t.txt t.txt1 2>err1.txt
t.txt
# 关闭正确输出和错误输出
[email protected]:~/study_shell$ ls t.txt t.txt1 1>&- 2>&-
# 都输出到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 1>/dev/null 2>/dev/null 
# 把错误输出重定向到正确输出,正确输出重定向到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 1>/dev/null 2>&1 
[email protected]:~/study_shell$ ls t.txt t.txt1 >/dev/null 2>&1 
[email protected]:~/study_shell$ ls t.txt t.txt1 >ttt.txt 2>&1 
[email protected]:~/study_shell$ cat ttt.txt 
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt
# &代表所有输出
[email protected]:~/study_shell$ ls t.txt t.txt1 &>/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 &>te.txt
[email protected]:~/study_shell$ cat te.txt 
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt

 

 

输入重定向<,<<

也是直接来看有些事例吗

# cat命令表示从屏幕获取输入,然后输出
[email protected]:~/study_shell$ cat
sadf
sadf
# 最简单的例子,从屏幕获取输入,然后重定向给qwj(这里用到是的是输出重定向
[email protected]:~/study_shell$ cat > qwj
qiweijie shi 2B
[email protected]:~/study_shell$ cat qwj 
qiweijie shi 2B
#这里首先是从文件qwj获取输入给cat,然后cat输入重定向给qwj1
[email protected]:~/study_shell$ cat > qwj1 <qwj 
[email protected]:~/study_shell$ cat qwj1
qiweijie shi 2B
# << 两个小于号连在一起表示接受一个输入结束的标识,当输入这个标识是结束输入
[email protected]:~/study_shell$ cat > qq << eof
> q
> w
> j
> eof
qiweij[email protected]:~/study_shell$ cat qq
q
w
j
[email protected]:~/study_shell$ cat > qqq << e
> q
> w
> e
[email protected]:~/study_shell$ cat qqq
q
w
[email protected]:~/study_shell$

 

 

exec绑定重定向

 

# 绑定新的文件描述符之前的状态
[email protected]:~/study_shell$ ls /proc/self/fd
0  1  2  3
# 绑定一个新的文件描述符6,并且绑定标准输出(相当于给标准输出保存一个临时copy)
[email protected]:~/study_shell$ exec 6>&1
[email protected]:~/study_shell$ ls /proc/self/fd
0  1  2  3  6
# 绑定标准输出给suc.txt
[email protected]:~/study_shell$ exec 1>suc.txt 
# 发现标准输出都没有了啊
[email protected]:~/study_shell$ ls -al
# 俨然发现suc.txt已经是输出文件
[email protected]:~/study_shell$ cat suc.txt 
cat: suc.txt:输入文件是输出文件
[email protected]:~/study_shell$ ls /proc/self/fd
# 把标准输出绑定回来
[email protected]:~/study_shell$ exec 1>&6
[email protected]:~/study_shell$ ls /proc/self/fd
0  1  2  3  6
# 关闭自定义的文件描述符
[email protected]:~/study_shell$ exec 6>&-
[email protected]:~/study_shell$ ls /proc/self/fd
0  1  2  3
[email protected]:~/study_shell$ cat suc.txt 
总用量 128
drwxrwxr-x  2 qiweijie qiweijie  4096 11月 24 10:50 .
drwxr-xr-x 34 qiweijie qiweijie  4096 11月 24 10:06 ..
-rw-rw-r--  1 qiweijie qiweijie    61 11月 18 14:19 atlga.xml
-rw-rw-r--  1 qiweijie qiweijie    35 11月 18 14:16 atlga.xml.old
-rw-rw-r--  1 qiweijie qiweijie    13 11月 17 16:17 dos-file.txt
-rw-rw-r--  1 qiweijie qiweijie    52 11月 24 10:11 err1.txt
-rw-rw-r--  1 qiweijie qiweijie   104 11月 24 10:09 err.txt
-rw-rw-r--  1 qiweijie qiweijie    41 11月 18 14:20 example.txt
-rwxrwxr-x  1 qiweijie qiweijie    94 11月 17 16:56 finduser
-rw-rw-r--  1 qiweijie qiweijie     0 11月 24 10:50 g
-rw-rw-r--  1 qiweijie qiweijie   324 11月 18 14:57 merge-sales.sh
-rw-rw-r--  1 qiweijie qiweijie   271 11月 18 17:08 my-friends
-rw-rw-r--  1 qiweijie qiweijie   140 11月 23 17:43 my-friends.sh
-rwxrwxr-x  1 qiweijie qiweijie   141 11月 17 16:34 nusers
-rw-rw-r--  1 qiweijie qiweijie  1958 11月 18 13:54 passwd.txt
-rw-rw-r--  1 qiweijie qiweijie     6 11月 24 10:48 qq
-rw-rw-r--  1 qiweijie qiweijie     4 11月 24 10:49 qqq
-rw-rw-r--  1 qiweijie qiweijie    35 11月 18 14:54 quotas
-rw-rw-r--  1 qiweijie qiweijie    16 11月 24 10:46 qwj
-rw-rw-r--  1 qiweijie qiweijie    16 11月 24 10:47 qwj1
-rw-rw-r--  1 qiweijie qiweijie    39 11月 18 14:53 sales
-rw-rw-r--  1 qiweijie qiweijie     0 11月 24 11:00 suc.txt
-rw-rw-r--  1 qiweijie qiweijie    58 11月 24 10:40 te.txt
-rwxrwxr-x  1 qiweijie qiweijie    55 11月 17 17:02 trace1.sh
-rw-rw-r--  1 qiweijie qiweijie    58 11月 24 10:31 ttt.txt
-rw-rw-r--  1 qiweijie qiweijie 23733 11月 18 15:52 t.txt
-rw-rw-r--  1 qiweijie qiweijie    14 11月 17 16:18 unix-file.txt
-rw-rw-r--  1 qiweijie qiweijie    13 11月 17 16:20 unix.txt
-rw-rw-r--  1 qiweijie qiweijie    25 11月 17 16:15 UN工x-file.txt
0
1
2
3
6
# 如果直接把标准输出绑定到文件,那么问题就是,你再也变不回来了
[email protected]:~/study_shell$ exec 1>suc.txt 
[email protected]:~/study_shell$ cat suc.txt 
cat: suc.txt:输入文件是输出文件
[email protected]:~/study_shell$ exec 1>&-
[email protected]:~/study_shell$ cat suc.txt 
cat: 标准输出: 错误的文件描述符
[email protected]:~/study_shell$ ls /proc/self/fd
ls: 写入错误: 错误的文件描述符
[email protected]:~/study_shell$ 

 

 

相信经过这么些事例,我们对文件陈述符和<,<<,>,>>那八个暗号应该有自然的印象了吗

中的,,, 文件描述符 linux运维后,会默许打开3个文件描述符,分别是:标准输入standard input 0,精确输出standard output 1,错误输出:error ou...

shell 中的<,<<,>,>>,shell

深信不疑精晓linux的童鞋不会对那三个适合面生,shell脚本的公文流有的时候候真的挺轻便搞晕人的,上边大家共同通晓一下呢

仿照效法链接:

【structs2】>>> FilterDispatcher <<< is deprecated!,filterdispatcher

在struts2.3.31下,web.xml中使用

…
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>

会出现
***********************************************************************
*                               WARNING!!!                            *
*                                                                     *
* >>> FilterDispatcher <<< is deprecated! Please use the new filters! *
*                                                                     *
*           This can be a source of unpredictable problems!           *
*                                                                     *
*              Please refer to the docs for more details!             *
*                        *
*                                                                     *
***********************************************************************

缘由在于:

Class FilterDispatcher Deprecated. Since Struts 2.1.3, use StrutsPrepareAndExecuteFilter instead or StrutsPrepareFilterand StrutsExecuteFilter if needing using the ActionContextCleanUp filter in addition to this one..即,从Struts 2.1.3起已被注脚为过时的,改用StrutsPrepareAndExecuteFilter
竭泽而渔办法,将web.xml上述代码改为:

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

FilterDispatcher is deprecated!,filterdispatcher 在struts2.3.31下,web.xml中使用 …filter filter - name struts2 /filter-namefilter-class org.apache.struts2....

字典/集合 解析

你也许清楚列表深入分析,但不知情字典/会集解析。字典/会集分析轻松並且相当慢,举个例子:

全选复制放进笔记

my_dict = {i: i * i for i in xrange(100)} 
my_set = {i * 15 for i in xrange(100)}
# There is only a difference of ':' in both

文件陈述符

linux运行后,会私下认可展开3个文件描述符,分别是:规范输入standard input 0,正确输出standard output 1,错误输出:error output 2

自此展开文件后。新添文件绑定描述符 能够依次扩大。 一条shell命令推行,都会一连父进度的文书陈述符。由此,全数运转的shell命令,都会有暗中认可3个文件呈报符。

linux shell下常用输入输出操作符是:

1.  规范输入   (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0   0代表:/dev/stdin 
2.  正经输出   (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1  1象征:/dev/stdout
3.  正式错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

强制浮点数除法

若是我们除以四个整数,尽管结果是一个浮点数,Python(2) 依然会给大家叁个子弹头。为了避开那一个主题素材,我们要求这么做:

全选复制放进笔记

result = 1.0/2

但是现在有一种其余办法能够消除这一个标题,以致在事先自个儿都尚未发现到有这种格局存在。你能够扩充如下操作:

全选复制放进笔记

from __future__ import division 
result = 1/2
# print(result)
# 0.5

须要留神的是这个门槛只适用于Python 2。在Python 3 中就没有供给展开import 操作了,因为它早就私下认可进行import了。

>,>>

轻松的服务器

你想神速轻巧的分享引得下的文书呢?能够那样做:

全选复制放进笔记

# Python2
python -m SimpleHTTPServer

# Python 3
python3 -m http.server

那回运维二个服务器

输出重定向:表示把将出口重定向到显示器大概器材或然文件

下边大家直接看有的例子吗

[email protected]:~/study_shell$ ls t.txt t.txt1
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt
# 正确输出和错误输出都显示在屏幕上
# 我们试着把正确输出重定向到suc.txt(success),可以看到屏幕输出上只有错误输出了,
#从这里也可以看出,默认的正确输出(代码为1,)是可以忽略不写的
[email protected]:~/study_shell$ ls t.txt t.txt1 >suc.txt
ls: 无法访问t.txt1: 没有那个文件或目录
[email protected]:~/study_shell$ cat suc.txt 
t.txt
# 正确输出和错误输出分别输出到不同的文件
[email protected]:~/study_shell$ ls t.txt t.txt1 1>suc.txt 2>err.txt
[email protected]:~/study_shell$ cat suc.txt err.txt 
t.txt
ls: 无法访问t.txt1: 没有那个文件或目录
# >> 这样写表示追加到文件
[email protected]:~/study_shell$ ls t.txt t.txt1 1>>suc.txt 2>>err.txt
[email protected]:~/study_shell$ cat suc.txt err.txt 
t.txt
t.txt
ls: 无法访问t.txt1: 没有那个文件或目录
ls: 无法访问t.txt1: 没有那个文件或目录
# &[-,1,2] 分别表示关闭对应的标识,正确输出,错误输出
# 关闭错误输出
[email protected]:~/study_shell$ ls t.txt t.txt1 2>&-
t.txt
# 错误输出重定向到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 2>/dev/null
t.txt
# 错误输出重定向到到文件
[email protected]:~/study_shell$ ls t.txt t.txt1 2>err1.txt
t.txt
# 关闭正确输出和错误输出
[email protected]:~/study_shell$ ls t.txt t.txt1 1>&- 2>&-
# 都输出到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 1>/dev/null 2>/dev/null 
# 把错误输出重定向到正确输出,正确输出重定向到/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 1>/dev/null 2>&1 
[email protected]:~/study_shell$ ls t.txt t.txt1 >/dev/null 2>&1 
[email protected]:~/study_shell$ ls t.txt t.txt1 >ttt.txt 2>&1 
[email protected]:~/study_shell$ cat ttt.txt 
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt
# &代表所有输出
[email protected]:~/study_shell$ ls t.txt t.txt1 &>/dev/null
[email protected]:~/study_shell$ ls t.txt t.txt1 &>te.txt
[email protected]:~/study_shell$ cat te.txt 
ls: 无法访问t.txt1: 没有那个文件或目录
t.txt

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:Python的优雅本领

关键词:

上一篇:都市菜单详解,面向对象详解
下一篇:没有了