第一章 Python基础知识

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执行。

         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以空白符作为语句缩进,意味着语句没有结尾符,给往往因为少写个fi的人带来了福利,在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 运算操作符  


运算符

描述

示例

+

加法

1 + 1 = 2

-

减法

3 - 1 = 2

*

乘法

2 * 1 = 2

/

除法

2 / 1 = 2

%

取余/模

2 % 1 = 2

**

指数/幂

2 ** 1 = 2

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

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


博客地址:http://lizhenliang.blog.51cto.com and https://yq.aliyun.com/u/lizhenliang
QQ群:323779636(Shell/Python运维开发群)


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!

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 运行第一个程序

# vi test.py

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

print "Hello World!"

# python test.py

Hello World!

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

# vi test.py

#!/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 -*-   # 设置解释器默认编码,下一章会讲到

# 单行注释

'''

多行注释

多行注释

'''

"""

多行注释

多行注释

时间: 2024-12-11 05:20:14

第一章 Python基础知识的相关文章

《Python数据科学实践指南》一 第2章 Python基础知识

第2章 Python基础知识 为了开启我们的数据科学之旅,本章会进行一些基础的编程训练.第1章中已经搭建好了Python的运行环境,读者应该已经能够在Python shell中执行简单的打印和四则运算了.接下来我们要完整地学习一遍构成一个Python程序的基本要素. 2.1 应当掌握的基础知识 本节会介绍一些学习Python前应当掌握的基础知识,这一部分内容在所有的编程语言学习中基本上都是类似的,Python当然也遵守这些通用的规则,熟悉这些内容的读者可以跳过这一节. 2.1.1 基础数据类型

《Python数据科学实践指南》——第2章 Python基础知识 2.1 应当掌握的基础知识

第2章 Python基础知识 为了开启我们的数据科学之旅,本章会进行一些基础的编程训练.第1章中已经搭建好了Python的运行环境,读者应该已经能够在Python shell中执行简单的打印和四则运算了.接下来我们要完整地学习一遍构成一个Python程序的基本要素. 2.1 应当掌握的基础知识 本节会介绍一些学习Python前应当掌握的基础知识,这一部分内容在所有的编程语言学习中基本上都是类似的,Python当然也遵守这些通用的规则,熟悉这些内容的读者可以跳过这一节. 2.1.1 基础数据类型

《Python数据科学实践指南》——第2章Python基础知识

第2章Python基础知识为了开启我们的数据科学之旅,本章会进行一些基础的编程训练.第1章中已经搭建好了Python的运行环境,读者应该已经能够在Python shell中执行简单的打印和四则运算了.接下来我们要完整地学习一遍构成一个Python程序的基本要素.

《Python和Pygame游戏开发指南》——第2章 Pygame基础知识 2.1 GUI vs. CLI

第2章 Pygame基础知识 Python带有诸如random.math或time这样的几个模块,它们为程序提供额外的功能,同样,Pygame框架也包含了几个模块,其功能包括绘制图形.播放声音.处理鼠标输入等. 本章将介绍Pygame所提供的基本模块和功能,并且假设你已经了解Python编程的基础知识.如果你对理解一些编程概念感到困难,可以阅读我的<Invent Your Own Computer Games with Python>一书,这本书的目标读者是程序设计的完全初学者. <In

《Python密码学编程》——第2章 Pygame基础知识 2.1 下载和安装Python

第2章 Pygame基础知识 本章主要内容: 下载和安装Python: 下载Pyperclip模块: 如何启动IDLE: 本书采用的格式: 复制粘贴文本. 开放社会的隐私需要密码学.如果我说了什么,我希望听到的人都是我想让他们听到的.如果我讲话的内容全世界都能知道,那我就没隐私了. --Eric Hughes,<A Cypherpunk's Manifesto>,1993(http://invpy.com/cypherpunk) 本章内容很像Invent Your Own Computer G

《树莓派Python编程指南》——第3章 Python基础3.1 变量、值和类型

本节书摘来自华章计算机<树莓派Python编程指南>一书中的第3章,第3.1节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问"华章计算机"公众号查看. 第3章 Python基础 在前面章节中,我们直接深入Python程序中,希望能够给你一个概念--什么是Python.但你还不清楚它具体是如何工作的.本章中,我们将回答这些问题,并详细介绍如何在Python中创建自己的程序.在后继的章节中,我们将分别介绍Python的不同特性,帮助你为树

《非常网管:网络管理从入门到精通(修订版)》——第1章 网络基础知识回顾1.1 计算机网络基础

第1章 网络基础知识回顾 古语云:"练武不练功,到老一场空",学习网络的基础理论就像练功一样重要.本章主要介绍网络的基础.网络的体系结构.ISO/OSI(International Standard Organization/Open System Interconnection,国际标准化组织提出的开放系统互联)参考模型.TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),其间穿插大量的实验和技巧,有

《算法导论(原书第3版)》一第一部分 基础知识

第一部分 基础知识 这一部分将引导读者开始思考算法的设计和分析问题,简单介绍算法的表达方法.将在本书中用到的一些设计策略,以及算法分析中用到的许多基本思想.本书后面的内容都是建立在这些基础知识之上的. 第1章是对算法及其在现代计算系统中地位的一个综述.本章给出了算法的定义和一些算法的例子.此外,本章还说明了算法是一项技术,就像快速的硬件.图形用户界面.面向对象系统和网络一样. 在第2章中,我们给出了书中的第一批算法,它们解决的是对n个数进行排序的问题.这些算法是用一种伪代码形式给出的,这种伪代码

《python 与数据挖掘 》一 第2章 Python基础入门

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第1章,第2.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 第2章 Python基础入门 本章是Python的基础章节,读者可以在这章中学习到丰富的Python基础知识.首先我们会从操作符和最简单的数字数据入手,然后就是流程控制,到这里读者能够对Python程序结构有一个清晰的认识.接着是较复杂的数据结构,主要涉及Python最常用的五大内建数据类型:列表,字符串,元组,