1)自动化
2)python编写的 openstack jumpserver ansible SaltStack
yuanj
zabbix json
docker yaml

 2)The Zen of Python

在 Python shell 中输入 import this,就会展示 Tim Peters 的 The Zen of Python:

import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
译文如下:

Python 之禅, by Tim Peters
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido)
做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)


1) 代码是以.py为扩展名的文本文件
2) tab(四个空格)强制缩进
3) 除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。开发的代码通过封装,也可以作为第三方库给别人使用。
4) 区分大小写
5) 编程工具用subline 和notepad

缺点
1、运行速度慢,一行一行地翻译成CPU能理解的机器码,这不是事。
2、源代码不能加密,发布Python程序,实际上就是发布源代码。
完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行,所以Python是一种相当高级的语言。

  代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。

解决字符编码:

#coding=utf-8
#-- coding=utf-8 --
from future import unicode_literals
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

raw_input( ) 将所有输入作为字符串看待,返回字符串类型。
input( ) “数字”的输入,它返回所输入的数字的类型( int, float )。手动加引号输入字符串

print u'中文测试'
name=raw_input(u'请输入姓名:'.encode('gbk')).decode('gbk')

如果你使用Notepad++进行编辑,除了要加上# -- coding: utf-8 --外,中文字符串必须是Unicode字符串:
申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保Notepad++正在使用UTF-8 without BOM编码:
Python2.x_第1张图片

五种数据类型

Numbers(数字):大的用十六进制
String(字符串):1连接字符串 2访问字符串 3字符串格式化
List [列表],可嵌套,有序,可变对象
Tuple(元组),不可变对象
Dictionary {字典},无序,dict的key必须是不可变对象。因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
自定义数据类型

变量

变量名必须是大小写英文、数字和_的组合,且不能用数字开头
任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的

1)常量,大写字母表示

2)空值,用None表示。None不能理解为0,因为0是有意义的。

3)布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来:

True
True
3 > 2
True

4)特殊变量:
以单划线_
以双划线开头__


语法

缩进
代码块

函数

函数定义
函数调用abs(-10)
参数传递

高级特性
切片
迭代
列表生成式
生成器
函数式编程
高级函数
匿名函数
装饰器:代码运行期间动态增加功能
偏函数:

效果:多次调用
使用:函数的名称和参数,传入的参数数量和类型符合要求,如何返还值
1)内置函数:不需要使用import导入,print () raw_input input()
2)自定义函数:
规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

查看函数帮助信息:
1)从Python的官方网站查看文档
https://docs.python.org/2/library/functions.html#abs
2)交互式命令行通过help(abs)查看abs函数的帮助信息
dir(help)

函数调用:
1)要调用一个函数,需要知道函数的名称和参数;对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

2)函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”,通过别名调用函数

a = abs # 变量a指向abs函数
a(-1) # 所以也可以通过a调用abs函数
1

2、报错提示一般3个:
(1)NameError: name 'abc' is not defined,函数没有被定义;
(2)调用函数的时候,如果传入的参数数量不对,会报TypeError的错误;
(3)参数类型不能被函数所接受,也会报TypeError的错误;

参数传递:
参数类型:

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的

必备 参数:必须传入一个参数
关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
默认 参数:必须指向不变对象!
不定长参数:

匿名函数lambda
递归函数
函数式编程
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

模块,就是一个.py文件

查看python安装模块
dir()

查看某个模块使用方法
使用help(module_name)时首先需要import该模块,有些教程中不进行导入而在模块名中加入引号help('module_name'),这种方法可能会带来问题,大家可以用math模块测试,建议使用先导入再使用help()函数查询

Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。
Python math 模块提供了许多对浮点数的数学运算函数。
Python cmath 模块包含了一些用于复数运算的函数。

所有的第三方模块都会在,PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用easy_install或者pip安装。

模块导入的时候,要注意.py文件名不要和已知的模块名相同,不然会出问题的

import os
dir(os)
https://pypi.python.org/pypi

from os import mkdir,system
from os import *
paramiko
time datetime
数据可视化,有matplotlib、pygal
subprocess模块,来调用系统命令
import sys,os
import psutil

包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。int.py用于标识当前文件夹是一个包。

---文件操作--

>>> with open('1', 'r+') as f:           
...     print(f.read())
... 回车结束代码块
接着输出文件内容

搭建开发环境三大神器,独立项目,独立环境git+virtual+Python

脚本

https://blog.51cto.com/yangrong/1603634

参考

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000