• 欢迎访问蜷缩的蜗牛博客 蜷缩的蜗牛
  • 微信搜索: 蜷缩的蜗牛 | 联系站长 kbsonlong@qq.com
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

第一章 Python基础知识

Python 蜷缩的蜗牛 7个月前 (02-08) 4次浏览 已收录

1.1 介绍

1.1.1 特点

Python 是一种面向对象、解释型计算机程序设计语言。语法简洁清晰,强制用空白符作为语句缩进。

Python 具有丰富和强大的库,又被称为胶水语言。能把其他语言(主要 C/C++)写的模块很轻松的结合在一起。

1.1.2 应用领域

Web 网站:有很多优秀的开源 Web 框架,比如 Django(最流行)、Tornado(轻量级、异步)、Flask(微型)、Web.py(简单)等。

数据采集:有好用的 http 库,比如 urllib2、requests 等。还有高级的屏幕爬取及网页采集框架 scrapy。并对网页解析也有很多库,比如 lxml、xpath、BeautifulSoup 等。    

大数据分析:常用模块有 Numpy、Pandas。并支持写 MapReduce、PySpark 处理 Spark RDD(弹性分布式数据集)。

运维自动化:编写脚本、Web 平台,自动化日常工作。

科学计算:在科学计算也应用越来越广泛,常用的模块有 Numpy、SciPy。

等等…可见 Python 是一门通用语言!

1.1.3 为什么选择 Python?

运维的目的呢,主要还是学习 Python 用来实现运维自动化了。大多数人除了 shell 脚本外有其他语言基础的应该占少数。

我们以 Python 作为第一门语言是很好的选择。为什么呢?

1) 语法简洁,易于学习。

2) 广泛的标准库,适合快速开发,不就追求极快处理速度。

3) 跨平台,基本所有的所有的操作系统都能运行。

4) 运维领域 Python 最流行。

1.2 安装 Python

操作系统采用 CentOS6.5,默认安装了 Python2.6.6,那我们升级到 Python2.7 最新版 Python2.7.12

1. 安装 Python2.7

# wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
# tar zxvf Python-2.7.12.tgz
# cd Python-2.7.12
# ./configure
# make && make install
# mv /usr/bin/python /usr/bin/python2.6.6
# ln -s /usr/local/bin/python2.7 /usr/bin/python
# python -V
Python 2.7.12

注意:软链接指向 Python2.7 版本后,yum 将不能正常工作,因为 yum 不兼容 2.7 的,所有需要指定下 yum 命令里默认 Python 版本为 2.6.6 版本

# sed -i ‘1s/$/2.6.6/’ /usr/bin/yum

2. 安装 setuptools

# yum install python-devel zlib-devel openssl-devel -y
# wget https://pypi.python.org/packages/32/3c/e853a68b703f347f5ed86585c2dd2828a83252e1216c1201fa6f81270578/setuptools-26.1.1.tar.gz
# tar zxvf setuptools-26.1.1.tar.gz 
# cd setuptools-26.1.1
# python setup.py install
......
"Compression requires the (missing) zlib module"
RuntimeError: Compression requires the (missing) zlib module
解决方法,进入刚解压的 Python2.7 目录重新编译安装:
# cd ../Python-2.7.12
# make && make install
# python setup.py install

3. 安装 pip2.7

# wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
# tar zxvf pip-8.1.2.tar.gz
# cd pip-8.1.2
# python setup.py install

1.3 解释器

1.3.1 Python 解释器几种实现版本

1) CPython     

当我们装完 Python 后,其默认解释就是 CPython,也是官方默认解释器。CPython 是 C 语言写的,当执行代码时会将代码转化成字节码(ByteCode)。

2) IPython

基于 CPython 之上的一个交互式解释器,相当于默认解释器的一个增强版,最显著的功能就是自动补全,挺好用的。

3) PyPy

PyPy 本身是由 Python 编写的,使用了 JIT 编译器(即时编译器)技术,当执行代码时 JIT 编译器将代码翻译成机器码。性能相比 CPython 要好。JAVA 也采用了 JIT 编译器。

4) Jython

Jython 是由 JAVA 编写的一个解释器,可以把 JAVA 模块加载到 Python 的模块中使用,也可以把 Python 代码打包成 JAR 包,意味着允许用 Python 写 JAVA 程序了。当执行代码时会将代码转化成 JAVA 字节码,然后使用 JRE(Java Runtime Environment)执行。

5) IronPython

在.NET 平台上工作的 Python 语言。

1.3.2 Python 代码执行过程

大致流程:源代码编译成字节码(.pyc 文件)–> Python 虚拟机 –> 执行编译好的字节码 –> Python 虚拟机将字节码翻译成对应的机器指令(机器码)

运行 Python 程序时,先编译成字节码并保存到内存中,当程序运行结束后,Python 解释器将内存中字节码对象写到.pyc 文件中。

第二次再运行此程序时,先回从硬盘中寻找.pyc 文件,如果找到,则直接载入,否则就重复上面的过程。

这样好处是,不重复编译,提供执行效率。

1) 字节码

字节码是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。字节码是一种中间码,比机器码更抽象。

2) 机器码

机器码是一种指令集,让 CPU 可直接解读的数据。也称为原生码。

1.4 代码规范化

1.4.1 代码风格有毛用?

个人觉得有以下几个作用:

1) 团队协作     

在企业中,往往是一个团队开发一个项目。开发朋友知道,刚入职一家新公司后,领导会先让你熟悉公司的编码规范文档,其目的是让参与项目中的每位成员,在写代码时能够统一标准,避免项目中出现多种编码风格版本,不利于后期维护和交接。

2) 有利于解决问题

草泥马,又出问题了,代码运行不起来了,怎么办?根据报错找百度、谷歌无解…,还是看看代码吧!这里代码怎么会这么写?琢磨了一会,写的什么玩意,太不规范了,注释都没,看来看点局部代码是解决不了问题了,还是梳理代码功能和逻辑关系吧!时间就这样一分一秒过去了,最后结果可能是一个很小的代码不严谨导致,浪费了大把时间!

3) 未雨绸缪

项目功能终于实现了,发布到线上运行也挺正常,过了半年后,突然跑不起来了,赶紧排查问题,代码自己看着都懵逼了,这还是自己写的代码嘛,长的这么不像我!

1.4.2 编写代码怎么能更规范化?

1) 缩进

Python 以空白符作为语句缩进,意味着语句没有结尾符,刚入门的朋友往往因为上下逻辑代码不对齐导致运行报错,在 Python 中最好以 4 个空格作为缩进符,严格对齐。

2) 代码注释

据说优质的代码,注释说明要比代码量多,详细的代码说明不管是对自己还是对他人,在后期维护中都是非常有利的。就像一个流行的开源软件,如果没有丰富的使用文档,你认为会有多少人耐心的去花大把的时间研究它呢!

3) 空格使用

在操作符两边,以及逗号后面,加 1 个空格。但是在括号左右不加空格。

在函数、类、以及某些功能代码块,空出一行,来分隔它们。

4) 命名

模块:自己写的模块,文件名全部小写,长名字单词以下划线分隔。

类:大/小驼峰命名。我一般采用大驼峰命名,也就是每个单词首字母大写。类中私有属性、私有方法,以双下划线作为前缀。

函数:首单词小写,其余首字母大写。

变量:都小写,单词以下划线分隔。

需要注意的是:所有的命名规则必须能简要说明此代码意义。

5) 代码换行

按照语法规则去换行,比如一个很长的表达式,可以在其中某个小表达式两边进行换行,而不是将小表达式拆分,这样更容易阅读。

1.5 交互式解释器

直接执行 Python 命令就启动默认的 CPython 解释器:

# python
Python 2.7.12 (default, Sep  3 2016, 21:51:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello World"
Hello World

配置自动补全:
# pip2.7 install readline
# pip2.7 install rlcompleter2
>>> import readline, rlcompleter
>>> readline.parse_and_bind("tab: complete")

1.6 运算操作符  

运算符

描述

示例

+

加法

>>> print 5 + 3

8

减法

>>> print 5 – 3

2

*

乘法

>>> print 5 * 3

15

乘法还可以连续输出多少个字符:

>>> print ‘#’*3

###

/

除法

>>> print 5 / 3

1

%

取余/模

>>> print 5 % 3

2

**

指数/幂

>>> print 5 ** 3

125

1.7 赋值操作符

操作符

描述

示例

=

变量赋值

a = b + c

+=

加法

a += b 等同于 a = a + b

-=

减法

a -= b 等同于 a = a – b

*=

乘法

a *= b 等同于 a = a * b

/=

除法

a /= b 等同于 a = a / b

%=

a %= b 等同于 a = a % b

**=

指数/幂

a **= b 等同于 a = a ** b

赋值操作符,操作符左边运算右边,然后将结果赋值给操作符左边。

1.8 变量

1.8.1 变量赋值

>>> xxoo = 2    
>>> print xxoo
>>> 2
说明:等号左边是变量名,等号右边是值
# 多重赋值
>>> xx, oo = 1, 2
>>> print xx
1
>>> print oo
2
>>> xx = oo = 2
>>> print xx
2
>>> print oo
2

1. 8.2 变量引用

上面打印时就是在引用变量了,可见 Python 引用变量不用加$什么特殊字符,不像 Shell、PHP 那样,还要加$。

的确,直接用变量名即是引用,下面说一种常用的字符串格式输出时引用变量的方法。

>>> xxoo = 2    
>>> print "xxoo: %d" % xxoo
xxoo: 2
>>> xxoo = "xo"
>>> print "xxoo: %s" % xxoo
xxoo: xo
>>> x = "abc"
>>> o = 123
>>> print "str: %s, int: %d" %(x, o)  
str: abc, int: 123

说明:双引号里面%操作符算是一个占位符,d 代表数字,s 代表字符串。双引号外面%加上后面的变量名对应里面的第一个%。下面同时引用了两个变量,外面%()里变量名位置对应双引号里面的%位置。

1.8.3 局部变量

>>> xxoo = 2     
>>> print xxoo
2

1.8.4 全局变量

>>> global xxoo   # 声明为全局变量    
>>> print xxoo
2

说明:从上面并不能看出什么区别,后续在函数章节中会讲解局部变量和全局变量的区别和使用。

1.9 转义字符(列出一些常用的)

符号

描述

\

字符串太长,换一行接着输入

\’   \”

单引号和双引号

\r

光标

\t

横向制表符(tab 键)

\v

纵向制表符

\n

换行符,打印到下一行

示例:

>>> print "Hello \
... World"       
Hello World
>>> print "Hello \"World!"
Hello "World!
>>> print "Hello \rWorld!"
World!
>>> print "Hello\tWorld!"
Hello   World!
>>> print "Hello \vWorld!"
Hello
      World!
>>> print "Hello \nWorld!"
Hello
World!

如果不想让转义字符生效,可以用 r 指定显示原始字符串:
>>> print r"Hello \nWorld!"
Hello \nWorld!
>>> print "Hello \nWorld!"
Hello
World!


博客地址:http://lizhenliang.blog.51cto.com

QQ 群:Shell/Python 运维开发群 323779636


1.10 获取用户输入

1.10.1 raw_input()  

>>> name = raw_input("My name is: ")    
My name is: xiaoming
>>> print name
xiaoming

   1.10.2 input()

>>> name = input("My name is: ")    
My name is: xiaoming
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'xiaoming' is not defined
>>> name = input("My name is: ")
My name is: "xiaoming"
>>> print name
xiaoming
>>> name = input("My name is: ")
My name is: 1 + 2
>>> print name
3

1.10.3 raw_input()与 input()函数区别

可以看到两个函数用同样的方式输入,结果 input()报错!     

原因是因为 raw_input()把任何输入的都转成字符串存储。

而 input()接受输入的是一个表达式,否则就报错。

1.11 运行第一个程序

#!/usr/bin/env python  # 说明用什么可执行程序运行它,env 会自动寻找 python 解释器的绝对路径
print "Hello World!"

# python test.py
Hello World!

easy!打印 Hello world 已经没什么难度了,那改进下刚学接受用户输入。

#!/usr/bin/env python
name = raw_input("My name is: ")
print name

# python test.py
My name is: xiaoming
xiaoming

1.12 注释

单行注释:井号(”#”)开头

多行注释:三单引号或三双引号

#!/usr/bin/env python    
# -*- coding: utf-8 -*-   # 设置解释器默认编码,下一章会讲到
# 单行注释
'''
多行注释
多行注释
'''
"""
多行注释
多行注释

本文转载自 第一章 Python 基础知识


蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明第一章 Python 基础知识
喜欢 (0)
[]
分享 (0)