自动化运维Python系列(一)之基础篇

Python介绍

Python是由创始人吉多·范罗苏姆(Guido van Rossum)在1989年圣诞节假期期间,为了打发时间,构思出来的一个新的脚本解释器。由于Guido在开发Python语言过程中,借鉴了很多ABC语言特性,所有后来包括Guido自己也那么认为,Python语言的前身就是ABC语言。

Python是一门面向对象的、动态解释型强定义语言;Python崇尚简洁、优美、清晰,是一门优秀的被广泛使用的语言。

在2015年以前,最流行的Python版本还是2.4,但是由于Python官方在2008年发布了3.0,一是款完全不同的Python版本,不兼容包括2.4在内以前的的任何版本,这就影响了3.0的推行,才出了一个既可以兼容2.4又支持很多3.0新特性的2.6版本。官方还开发了专门的帮助将2.x转为3.0版本的转换工具,因此,python3.0的使用才开始逐渐多了起来。

Python应用领域

云计算:Openstack

自动化:Saltstack、Ansible

系统运维:运维人员必会的语言

图形:PyQT, WxPython,TkInte

Web开发:众多大型网站都是基于Python开发,如Youtube 典型的Web框架有Django

科学运算:人工智能如AlphaGo、典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas

金融行业:在金融工程领域,作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测

Python特点

优点

1)Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

2)开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

3)高级语言:当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

4)可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

5)可扩展性:如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

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

缺点

1)速度慢:由于天生就是一门解释型语言,Python和C、JAVA对比的话,运行速度是会慢很多,适合对一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序;不适合对速度要求极高的搜索引擎等程序。

2)代码不能加密:如果你的项目源代码要求加密,那么不适合用Python开发

3)线程不能利用多CPU:这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行

Python的安装

1)windows

官方网站提供了默认的下载渠道:https://www.python.org

截止到现在,最多的还是3.5版本,不过要注意区分平台:Windows、Mac、Linux

建议同时下载安装两个版本,分别放在C:\Python2.7和C:\Python3.5, 方便对一些程序特性做测试

注意修改环境变量:

右键计算机-->属性-->高级系统设置-->环境变量-->找到变量名为Path的一行双击-->Python安装目录追加到变量值中,用分号;分割。

2)Linux

Linux Centos 7 中是将Python作为默认软件安装的,只不过具体OS版本不同

[[email protected] ~]# python
python     python2    python2.7 #centos7中默认为2.7版本

我们只需要下载并安装3.5版本就可以了,下载地址:https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz

tar xf Python-3.5.2.tar.xz
cd Python-3.5.2/
./configure
make && make install

修改系统默认的Python版本

[[email protected] Python-3.5.2]# mv /usr/bin/python /usr/bin/python2.ori
[[email protected] Python-3.5.2]# ln -s /usr/local/bin/python3.5 /usr/bin/python

为了防止修改完Python版本后yum出问题,需修改yum

vim /usr/bin/yum
#!/usr/bin/python  #修改为/usr/bin/python2.ori

3)Mac

直接下载运行即可

Max Os X 10.5:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.5.pkg

Max Os X 10.6:https://www.python.org/ftp/python/3.5.2/python-3.5.2-macosx10.6.pkg

lichengbing:~ lichengbing.cn$ python3
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python开发环境【Pycharm】

For Windows下载地址:http://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC

Python快速入门

1)我的第一个Python程序“Hello World!”

[[email protected] ~]# vim hello.py
#!/usr/bin/env python
print("Hello World!")
[[email protected] ~]# ./hello.py # .执行文件需要给文件添加x权限
Hello World

  

2)变量和字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascillASCII(American Standard Code for InformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(万国码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536.

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

#!/usr/bin/env python #设置脚本系统环境变量
 # -*- coding:utf-8 -*- #Python3.0版以上默认字符集为UTF-8,可以支持中文显示
 name = "lichengbing"
 age = 21
 
 print(name,age)

3)注释

‘‘‘  
name = "lichengbing" # This is a variable 
age = 21 print(name,age) 
‘‘‘
#注释最好不超过80个字符

4)用户输入

C:\Users\lilongzi>python2
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> user_name = raw_input("you name:")
you name:lichengbing
>>> print(user_name)
lichengbing

格式化用户输入

name = input("input you name:")
age = int(input("input you age:"))
job = input("input you job:")
msg = ‘‘‘
Infomation of user name:%s:
--------------
Name:  %s
Age:   %d
Job:   %s
------END-----
‘‘‘ % (name,name,age,job)
print(msg)

执行结果

input you name:lichengbing
input you age:25
input you job:ENGINEER
Infomation of user name:lichengbing:
--------------
Name:  lichengbing
Age:   25
Job:   ENGINEER
------END-----

用户输入密码隐藏

import getpass
username = input("uesrname:")
password = getpass.getpass("password:")
print(username,password)
#只支持在Linux环境下用Python3执行

5)初识模块

调用系统命令

[[email protected] ~]# python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("df -h")
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.0G  5.1G  4.0G  56% /
devtmpfs        480M     0  480M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           489M   19M  470M   4% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1       253M  111M  143M  44% /boot
tmpfs            98M     0   98M   0% /run/user/0
0

保存调用的命令并定义为变量

>>> cmd_res = os.popen("df -h").read()
>>> print(cmd_res)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.0G  5.1G  4.0G  56% /
devtmpfs        480M     0  480M   0% /dev
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           489M   20M  470M   4% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1       253M  111M  143M  44% /boot
tmpfs            98M     0   98M   0% /run/user/0

Python全局环境变量

>>> import sys
>>> print(sys.path)
[‘‘, ‘/usr/lib64/python27.zip‘, ‘/usr/lib64/python2.7‘, ‘/usr/lib64/python2.7/plat-linux2‘, ‘/usr/lib64/python2.7/lib-tk‘, ‘/usr/lib64/python2.7/lib-old‘, ‘/usr/lib64/python2.7/lib-dynload‘, ‘/usr/lib64/python2.7/site-packages‘, ‘/usr/lib64/python2.7/site-packages/gtk-2.0‘, ‘/usr/lib/python2.7/site-packages‘]

将tab.py放入环境变量中,Python在导入os等模块后能自动补全命令

[[email protected] site-packages]# pwd
/usr/lib64/python2.7/site-packages
#!/usr/bin/env python
# python startup file
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind(‘tab: complete‘)
# history file
histfile = os.path.join(os.environ[‘HOME‘], ‘.pythonhistory‘)
try:
    readline.read_history_file(histfile)
except IOError:
    pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter

查看自动补全

>>> import tab
>>> import os
>>> os.
Display all 249 possibilities? (y or n)
os.EX_CANTCREAT             os.__package__              os.listdir(
os.EX_CONFIG                os.__reduce__(              os.lseek(

6)if条件判断

if判断

age = 22
guess_number = int(input("input you guess number:"))
if guess_number == age :
    print("Congratulations!")
elif guess_number < age :
    print("Think smaller...")
else :
print("Think larger...")

跳出循环

age = 22
for i in range(10):
    guess_number = int(input("input you guess number:"))
    if guess_number == age :
        print("Congratulations!")
        break
    elif guess_number < age :
        print("Think smaller...")
    else :
        print("Think larger...")

简单的猜数字游戏

age = 22
counter = 0
for i in range(10):
    if counter <3:
        guess_number = int(input("input you guess number:"))
        if guess_number == age :
            print("Congratulations!")
            break
        elif guess_number < age :
            print("Think smaller...")
        else :
            print("Think larger...")
    else:
        #print("Too namy attempts...bye!")
        #break
        continue_confirm = input("Do you want to continue guess? Y or N: ")
        if continue_confirm == ‘Y‘:
            counter = 0
            continue
        else:
            print("bye...")
            break
    counter += 1
input you guess number:21
Think smaller...
input you guess number:25
Think larger...
input you guess number:1
Think smaller...
Do you want to continue guess? Y or N: Y
input you guess number:
时间: 2024-10-08 23:54:08

自动化运维Python系列(一)之基础篇的相关文章

自动化运维Python系列之ForeignKey、relationship联表查询

一对多和多对多 数据库表结构设计是程序项目开发前的重要环节,后期数据库操作都是围绕着这个已经设计好的表结构进行,如果表结构设计有问题,整个程序项目就有存在需要整个推翻重构的风险... 数据库表结构除了简单的单表操作以外,还有一对多.多对多等. 一对多 基于SQLAlchemy我们可以先创建如下结构的2张表,然后来看看具体怎样通过外键ForeignKey或者relationship联表操作 创建表 from sqlalchemy.ext.declarative import declarative

自动化运维Python系列(三)之基础函数和文件操作

函数作用 增强代码的重用性和可读性 在没有使用函数编程之前,我们可能一直遵循的都是面向过程编程,即根据业务逻辑从上到下实现各个功能,这样的做的坏处是代码可读性不强,大量冗余代码,而且执行效率不高:有了函数后,我们就可以将多次使用到的相同代码模块放在单独的函数定义中,在任何想要调用它的地方随时调用,这就叫做函数式编程. 面向对象编程其实就是对函数进行再分类和封装,让开发"更快更好更强..." 函数的定义 def 函数名(参数): ... 函数体 ... 返回值 函数的定义主要有如下要点:

自动化运维Python系列(二)之基础数据类型

一.列表和元组 列表是我们最常用到的数据类型之一,在一个变量中定义多个变量,可以理解为数组 定义列表 >>> name = ["liunx01","linux02","Unix",22] >>> print(name) ['liunx01', 'linux02', 'Unix', 22] >>> name[0] 'liunx01' >>> name[-1] 步长 >&g

自动化运维Python系列(七)之Socket编程

了解知识点TCP\IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准, 从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族.不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中(数据链路层和物理

自动化运维Python系列(四)之装饰器和生成器

装饰器 在理解什么事装饰器之前,我们需要理解:函数也是一个对象,可以赋值给变量,通过变量来调用 def f1():     print('2016') d = f1 d() 输出: 2016 那么装饰器的作用就是在不改变原函数的前提下,调用这些函数,并且为函数增加我们需要的新功能. 我们平时在编写好很多独立函数模块以后,突然需要在每个模块内添加一个功能,比如: def f1():     print('F1') def f2():     print('F2') def f3():     pr

【Python自动化运维之路Day7】基础篇

今日目录: 模块 configparser xml shutil zipfile tarfile subprocess 面向对象(上) 一. 模块 上一期博客里列出了几个常用模块(os,hashlib,sys,re), 还有几个剩余的,这篇来继续往下走. 1. configparser模块 configparser模块是Python自带模块,主要用于处理特定的文件(ini文件),格式比较像MySQL的配置文件类型,就是文件中有多个section,每个section下面有多个配置项,如下: [my

自动化运维Python系列之Memcache、Redis操作

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memcached安装 wget http://memcached.org/latest tar -zxvf memcach

自动化运维Python系列(五)之常用模块

模块 用一坨代码实现了某个功能的代码集合 模块分为三种 · 自定义模块 · 第三方模块 · 内置模块 1)自定义模块 自己编写并存在在某个路径下的python程序,实现了某个功能,可以被其他程序调用 2)第三方模块 网络上下载并能兼容当前Python版本的第三方程序模块,比如支持HTTP测试的requests库 3)内置模块 C:\Python3.5\Lib目录下的py文件大部分都是Python的内置模块,如sys.os.time等 导入模块 import module from module.

自动化运维Python系列之Django进阶操作

FBV && CBV FBV.CBV是Django视图路由处理模型,当用户请求送达路由系统URL后,由其转发给视图view来分析并处理 // FBV    function base views  // CBV    class base views 区别就是一个直接用函数驱动,一个用类驱动,两者在使用上存在一些区别 1)FBV URL中根据路由匹配直接转发给视图中的某一个处理函数 urlpatterns = [     url(r'^home/', views.home), ] 视图函数