首页 > 编程语言 > 详细

python运维开发坎坷之路-01

时间:2016-01-03 20:51:24      阅读:363      评论:0      收藏:0      [点我收藏+]

  

前言

  2014年9月,新疆乌鲁木齐,在51CTO学院看着alex老师的python教学视频,不得不说这是我第一次接触python这门高级语言,从最开始的一无所知到现在能够用python写脚本,再到未来10个月内能够用python开发项目,这一步一步成长,充满着坎坷,汗水。在2014年9月--2015年12月,用python写的脚本帮助我做了很多事情,其中自己感觉最有用的就是自己写的一个批量管理服务器的脚本,我在公司管理着100多台服务器,没有一个运维平台的,都是手动挨个挨个管理,实在费劲,而且那时候对puppet,saltstack这些管理工具也不熟悉,所以只能自己写批量管理工具了,这是第一个我觉得在工作上能够解放双手,能够大幅提高工作效率的脚本,这个脚本在改良以后能够适用于一些采集信息的需求......总之,be prond of python!!

    言归正传,学习python就要知道什么是python,python能干嘛,python的哪个版本是主流,python的知识点有哪些and so on!

什么是python?

  Python(英语发音:/?pa?θ?n/), 是一种面向对象、解释型计算机程序设计语言,由龟叔(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991年。

    那么说的深点,我们从编程语言的角度去看python:

    编译型和解释型:

      编译型语言:

      程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。

      如C、C++、 Delphi等.

         解释型语言:

                 编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。

                  如 shell,BASIC

     动态语言和静态语言:.

           动态语言:

                  意思就是数据类型的检查是在程序运行时做的,如ruby、python........。

           静态语言:

                  数据类型的判断是在程序运行前判断,在写程序之前就要申明所有的数据类型,比如C#、java。

     强类型定义语言和弱类型定义语言:

            强类型定义语言:

                   强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。java、.NET、C++、python等都是强制类型定义的。

       也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

            弱类型定义语言:

                    与强类型定义语言相反,数据类型可以被忽略的语言。

        从以上三点可得,python是一门动态解释性的强类型定义语言。

python能干嘛?

      我们搞明白了python语言的特性(或者说什么是python),那么我们就要知道python能够干嘛了。

      
      1、图形界面:比如PyQt,WxPython,Tkinter等等都能够编写GUI用户界面
      2、网络编程,包括web网站,服务器后台衔接等,优秀web框架Django、flask等
      3、系统管理工具: 比如saltstack,Ansible等
      4、科学计算:Numpy、SciPy等
      5、人工智能、游戏、机器人等

 

 Python的优缺点

       从python的基因来看,我们就能看出python的优缺点了,

             优点:

         1 语言简洁,直观。

         2 开发效率高,第三方的库非常多

         3 可移植性,跨平台能力强,经过修改后就可以从linux迁移到windows。

         4 可嵌入型,你可以把 Python 嵌入你的 C/C++程序,从而向你的程序用户提供脚本功能。

 

     缺点:

         1 运行速度慢,这个速度慢不是人类能够通过肉眼或者感觉感知的,这个是相对的慢,python相对于C,JAVA来说是慢一拍,毕竟是解释型语言.

         2 代码不能够完全加密,源码以明文形式存放,如果考虑到代码不泄密的话,那么请使用其他语言.

         3 多线程不能够充分利用多CPU的问题,这个受制于GIL(Global Interpreter Lock)。

 

python版本问题

        目前主流的是python2.7 和 python 3.x,对于我们来说该如何选择?我们先浏览下官网的说法吧:https://docs.python.org/3/whatsnew/2.7.html

                      从官网来看,官方建议我们尽快升级到3.X版本,Python 2.7目前会保持支持的核心开发团队(接收安全更新和其他bug修复)至少在2020年之前。

                      那么python3.X和python2.X有什么区别呢,我个人觉得python3相对于python2来说是做了化繁从简的工作。好吧,简单罗列下面几点:

python 2.x python 3.x
print "xxxx"  print("xxxxxxx")
1/2 = 0 1/2=0.5
Unicode字符串和非Unicode字符串 Unicode编码,支持中文
字典有has_key 字典没有has_key
有input/raw_input 只有input
   
   
   
   

数据类型:

      1 整形

              任意大小的整数。

      2 浮点型

              也就是小数,如1.2 ,3.4等,但是对于很大或很小的浮点数,就必须用科学计数法表示,把 10用 e 替代,1.23x109就是 1.23e9 ,或者 12.3e8 ,

              0.000012 可以写成 1.2e-5。并且浮点数计算的话会存在精度差。

 

      3 字符串

                    任意的单引号或者双引号括起来的内容。

      4 布尔型

               True or False。

      5 空值

               空值是 Python 里一个特殊的值,用 None 表示。 None 不能理解为 0 ,因为 0 是有意义的,而 None 是一个特殊的空值。

      6 字典

                一种由{}引用起来的键值对,形式如这样{key:value},如{‘name‘:‘温柔易淡‘},value可更改,可迭代。

      7 元组

               一种由()引用起来的元素,里面的元素不可更改,可迭代。

      8 列表

               一种由[]引用起来的元素,里面的元素可更改,可迭代。

 

      9 集合

               一个无序不重复元素集,我在之前学过的其他的语言好像没有见过这个类型,基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交),                difference(差)和sysmmetric difference(对称差集)等数学运算,和我们初中数学学的集合的非常的相似

运算符

        1 加减乘除(+-*/)

        2 =   赋值号,把右边的对象和左边的变量进行关联引用。

        3 +=   比如a+=1 就等于a+1=a ,还有-=、*=之类的。

        4 & 与运算,这个二进制位必须在 2 组数中都为真,结果才返回真。

        5 | 或运算,这个二进制位只需在其中一组数据中为真即返回真。

        6 ^ 异或运算,只要这个二进制位在两组数据中不相同就返回真。

        7 <<左移运算,在二进制位下把数值整体往左移动若干位。

        8 >>右移运算,在二进制位下把数值整体往右移动若干位。

          9 逻辑运算符, and 、or、not

        10 关系运算 in 、not in

        11 验证引用关系运算   is 、not is

 缩进和注释

        1  Python 是强制缩进的语言,它通过缩进来确定一个新的逻辑层次的开始和结束,这也是python 语言的最重要的特色之一

        2   同一逻辑层次级别的代码缩进必须保持一致 

        3   顶层逻辑级别的代码必须不能有缩进(新行的开始不能有空格)

        4   整个程序的缩进风格应保持一致, 一般为 4 个空格或 2 个空格, 官方的推荐是用 4 个空格,当然用 tab 键也可以,但是在 Windows 上的 tab 键和 Linux 上的不一致,会导致你在

          Windows 上开发的程序 copy 到 Linux 上后运行出错,所以还是建议用 4 个空格。

        5 有关注释:

          当你写的代码逻辑变的复杂的时候,一定不要忘记给你的代码加上注释,否则过不了几天,你再返回头来看自己的代码的时候,很有可能你都不知道自己写了些什么,更别提

             别人能看懂你的代码了, 保证你的代码简洁、 易读是一个专业程序员最基本的道德品质,那给你的代码加多少的注释算是合适呢?一般情况下,源程序有效注释量应该在 20%以

          上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

 

just practice it!

        说了那么多,我们应该对python有个认识了吧。那么就该动手操作他了,好了,那些怎么安装python解释器 的步骤我就不赘述了,还有解释器的,我们就用默认的就可以了。

        官方版本的解释器:CPython。这个解释器是用 C 语言开发的,所以叫 CPython。

     1 hellow world:

>>> print("hello world")  #print() 是打印输出的一个函数
hello world         

     2 变量的使用:

                       什么是变量?

                           简单的来说就是变化的量(数据在程序运行中可能变化或被赋值,这称为变量),说白了变量就是数据在内存空间存储的表示。

                       如何使用变量?

>>> name=‘温柔易淡‘

变量被赋值的过程:
    1 创建一个对象,数值为‘温柔易淡‘
    2 创建一个变量name
    3 把变量和对象进行一个关联。

注意:

    1 变量到对象连接的关系叫做引用,在内存中以指针形式实现。
    2 对象的复用,对相同对象值的赋值将被复用,除非拷贝与深拷贝。

    3 对象两个标准头信息:
      类型标志:标志此变量值的类型
      引用计数器: 计数器对变量引用来计数, 如果都没有被引用则为 0,并在一段时间没有引用后启用回收机制。
  
    4 查看引用次数
      Import sys
      Sys.getrefcount(1)

>>> name=input("input your name ==>")

input your name ==>温柔易淡
>>> print(name)      #这里是print的内容是引用这个name的变量,应用变量直接写变量名就行了,不像shell一样需要在变量名之前添加$号
温柔易淡

说说每一步执行的过程吧
  1 input这个函数把()里面的内容打印出来后等待用户输入,把输入的数据以源数据类型赋值给变量name
  2 打印信息,等待用户输入
  3 print函数把name这个变量的值给打印出来

 

     3 字符串的操作

         什么是字符串刚才我也已经介绍了,那么下面我们动手来操作字符串。

    

>>> a=hellow world,i come from jiangxi province and work in Beijing‘          #将一句话赋值为一个变量a
>>> a
hellow world,i come from jiangxi province and work in Beijing
>>> a[1:10]
ellow wor
#切片处理,把变量a的下标为1到10的这段字符串打印出来,整数表示是从头开始,第一个数字1表示从下标1的字符开始,第二个10表示到下标为10的结束,这里下标你可以理解为索引。

>>> a[1:30:2]                                                                      
elwwrdicm rmjag
#也是切片处理,注意看[]里面这里多个2,这个2的意思是步进为2,意思是说把变量a的下标从1到10,每隔2个取出来。
>>> a.count(h)                                        #统计变量a里面有多少个h这个字符  。 
1
>>> a.count(o)                                        #同上,统计多少个o。
6
>>> ?.join(a)                                        # 把变量a里面的内容都用?来衔接起来。
h?e?l?l?o?w? ?w?o?r?l?d?,?i? ?c?o?m?e? ?f?r?o?m? ?j?i?a?n?g?x?i? ?p?r?o?v?i?n?c
?e? ?a?n?d? ?w?o?r?k? ?i?n? ?B?e?i?j?i?n?g>>> a.swapcase()                                        #把变量a里面的字符串做大小写转换。
HELLOW WORLD,I COME FROM JIANGXI PROVINCE AND WORK IN bEIJING
>>> a[-30:-4]                                        # 把变量a里面下标为-30到-4的内容打印出来,这里负数的话表示从结尾开始。
i province and work in Bei
>>> a[-30:-4:3]
irienwkne
也是切片处理,注意看[]里面这里多个3,这个3的意思是步进为3,意思是说把变量a的下标从-30到-4,每隔3个取出来。

>>> a="hellow"
>>> b="world"
>>> a+b
‘hellowworld‘
>>> a+" "+b      #拼接字符串,可以直接用+来拼接
‘hellow world‘


 

     4 如何获取帮助

>>> a="hellow world"        #变量a赋值
>>> dir(a)    #dir是显示这个a有什么方法注意,看这里,我们是使用不以两个下划线开头的方法,其中的原因我们会在后面讲到,比如upper,replace等方法. [__add__, __class__, __contains__, __delattr__, __dir__, __doc__, _ _eq__, __format__, __ge__, __getattribute__, __getitem__, __getnewargs       __, __gt__, __hash__, __init__, __iter__, __le__, __len__, __lt__, __mod__, __mul__, __ne__, __new__, __reduce__, __reduce_ex__, __r epr__, __rmod__, __rmul__, __setattr__, __sizeof__, __str__, __subcl asshook__, capitalize, casefold, center, count, encode, endswith, expandtabs, find, format, format_map, index, isalnum, isalpha, isd ecimal, isdigit, isidentifier, islower, isnumeric, isprintable, issp ace, istitle, isupper, join, ljust, lower, lstrip, maketrans, pa rtition, replace, rfind, rindex, rjust, rpartition, rsplit, rstrip , split, splitlines, startswith, strip, swapcase, title, translate , upper, zfill] 

>>> help(a.upper)  #这个help一般是查看怎么用,一般用于查询方法如何使用。

Help on built-in function upper:

upper(...) method of builtins.str instance
S.upper() -> str

Return a copy of S converted to uppercase.

 

 

     5 接受使用者输入  

>>> input("input your name ==>")
input your name ==>温柔易淡
‘温柔易淡‘

       6 条件判断

             if condition==True:    #如果条件判断为真,那么执行下面的代码块
                              code block  
            elif condition=True:    #同上
                 code block
            else:             #前面的条件都不匹配,那么执行下面的代码块
                 code block

     7 循环语句

while condition:        #当条件为真的时候循环往下走,执行代码块
    code block
    if codition==True:    #if做条件判断,这个条件判断不是必须的,我这里用if做条件判断是为了抛出break和continue的用法
           break        # break是跳出当前这层循环的意思,不再执行下面的语句,,结合if的话,条件判断为真那么跳出这个while循环
       else:          #如果添加为假
        continue        #continue继续循环,不再执行下面的语句。


for x in list:        #for循环,对列表进行迭代,循环停止条件就是把list迭代完
    print(x)

 

 

     8 格式化输出

第一种方法:
>>> name=ljf >>> age=23 >>> print("your name: %s,your age: %d" %(name,age)) your name: ljf,your age: 23
看到这里我想你们大概知道这个% 是啥意思了吧,这里 % 的是格式化字符串,%s表示用字符串来替换显示的,%d表示用数字类型替换显示,相对应的还有%f 表示浮点类型,%x 16进制整数。

第二种方法:

>>> print("your name {0}, your age: {1}".format(name,age))
your name ljf, your age: 23

这个使用format方法来格式化后输出的,这个方法我一般用的少,原理和%一样,通过一个{0}来占位,在用传给format第一个参数来替换{0}输出,第一个占位符就要以0开始。

 

      9 玩转列表

>>> list=list(range(10))        #使用list方法生成一个列表
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
>>> for i in list:            # for循环遍历一个列表
...   print(i)
...
0
1
2
3
4
5
6
7
8
9
>>> dir(list)              #查看一个list有什么方法
[__add__, __class__, __contains__, __delattr__, __delitem__, __dir__
, __doc__, __eq__, __format__, __ge__, __getattribute__, __getitem__
, __gt__, __hash__, __iadd__, __imul__, __init__, __iter__, __le__
, __len__, __lt__, __mul__, __ne__, __new__, __reduce__, __reduce_e
x__, __repr__, __reversed__, __rmul__, __setattr__, __setitem__, __s
izeof__, __str__, __subclasshook__, append, clear, copy, count, ex
tend, index, insert, pop, remove, reverse, sort]
>>> list.append(ljf)          #list的追加的方法,一般在尾部插入
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ljf]
>>> list.insert(3,test)        #list 插入方法,指定一个索引号插入
>>> list
[0, 1, 2, test, 3, 4, 5, 6, 7, 8, 9, ljf]
>>> help(list.remove)          #查看list.remove的方法如何使用
Help on built-in function remove:

remove(...) method of builtins.list instance
    L.remove(value) -> None -- remove first occurrence of value.
    Raises ValueError if the value is not present.
  
>>> list.remove(test)        # list中移除这个test值
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ljf]
>>> list.pop()              # list中删除最后一个值
ljf‘  
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

更多方法,请自己看dir(list)

 

 目前就写到这里吧,本人菜鸟一枚,如果写的地方有错,还得指出来更正,谢谢咯!

 

python运维开发坎坷之路-01

原文:http://www.cnblogs.com/liaojiafa/p/5096858.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!