首页 > 代码库 > python

python

##############python################

一 python的简介


1.python的优点


(1)创始人评价:简单、优雅、明确

   简单体现在如果你的母语是英语,写python脚本就像写文章,很简单;

   优雅体现在python的格式,比如缩进来确定代码块,可避免编程人员进行复杂的嵌套;

   明确体现在解决问题的方法只有一种最优选项,而perl语言是每个问题有很多最优解,但不利于团队协作;

(2)有强大的第三方库模块,需要实现一复杂功能,只需要调用现有的库,可快速实现功能。20多年的发展,各种库都已经完备,比如:邮件库,爬虫库......

(3)可跨平台移植,java有Java的虚拟机,python同样;

(4)是一种面向对象的语言;

(5)是一种可扩展的语言(与C,C++,Java结合)


2.python的缺点


   (1)代码执行速度慢,相比C语言,不过现在python的异步并发框架导致执行速度慢;

   (2)python是开源的编程语言,代码不能加密,当然有相应的工具可以将python代码转换为exe的二进制可执行码,但是反解码也很容易;


3. python的应用


(1)软件开发

***游戏后台、搜索、图形界面

***网站

***科学运算

(2)系统管理

***脚本

***IT自动化工具

***数据分析:Hadoop处理文件(>TB) Map-Reduce,10G(matlab,R)


二 环境配置


1.python的安装


(1)访问python官网,下载不同平台下的python软件;

(2)Linux操作系统上一般iso镜像里面自带,直接通过yum安装;

 1001  vim /etc/yum.repos.d/yum.repo  ####配置yum源镜像7.0

 1002  yum clean all                 ###更新yum源

 1003  yum install python -y      #####安装python

截图:

技术分享



注意点:

python有 python2.x系列和python3.x系列

(1)python2.6是一个过渡版本,既可以执行,又包含python3.0的新特性;

(2)现在企业实战应用python版本为2.7版本;

python2.7是python2.x系列最后一个版本,不会再有python3.0


2.查看python版本


[root@foundation44 ~]# python --version

Python 2.7.5

# 此处显示python的版本为2.7.5


3.交互式使用python


[root@foundation44 ~]# python

Python 2.7.5 (default, Oct 11 2015, 17:47:16) 

[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> print "hello"

hello

***当在shell命令行输入python命令会进入一个交互式的python编程环境;

***python沿袭了C语言的很多用法,输出一字符串,使用print;

***退出python的交互式环境通过快捷键ctrl+d或者使用exit()函数;

技术分享

4.Python解释器


 (1)cpython 

 (2)ipython:基于cpython,交互方式有所增强,cpython高配版

 (3)Jpython:java平台上的python解释器,将python代码编译成java字节码执行。

 (4)IronPython: 直接将python代码编译成.net的字节码

工欲善其事,必先利其器

 (5)pypy: 对代码进行动态编译, JIT技术(  just-in-time compiler  ,即时编译器),显著提高代码执行速度。



####ipython#######

从网上下载软件ipython

shell终端中执行命令ipython试试效果;

#######Pycharm#######

访问pycharm官网,或者点击百度云共享链接安装;下载pychrm社区版本,安装使用,后面我们专门写一个章节,来描述pycharm常用的操作、设置以及快捷键.


 ########ipython安装################


[root@foundation44 ~]# cd /home/kiosk/Desktop/ ####切换到ipython所在的上级目录。

[root@foundation44 Desktop]# ls

Advanced Bash Shell Guide.pdf  python1              rht-server.desktop

ipython                        python1.1            Untitled Folder

python                         rht-desktop.desktop  Untitled Folder 2

[root@foundation44 Desktop]# cd ipython/  #####切换到ipython目录

[root@foundation44 ipython]# yum install *  -y  #####安装ipython


安装效果:

技术分享

#################### Pycharm安装#####################


技术分享

(1)

技术分享

(2)

技术分享

(3)

技术分享

(4)

技术分享


新建py文件:file -> new -> python file


技术分享

更改字体:file -> setting -> Appearance&Behavior ->Appearance ->Apply ->OK

技术分享


更改文件内部字体:file -> setting ->Editor ->Colors&Fonts  ->Font ->Apply ->OK

技术分享


文件开头语句添加:file -> setting ......->Apply ->OK

技术分享

添加效果

技术分享


pycharm 图形打开方式

技术分享

命令打开方式:charm


三 python编程风格


1 .python脚本文件


  在python交互式环境中,我定义一个变量  a=1  ,存放在内存中.。如果没有退出交互式环境,可通过  print a  打印出a的指,如果退出此次交互式环境,  a  变量存的值  1  已经被内存释放了。因此怎么在下次使用时,依旧可以查看到a变量的值呢?当然是把原先存放在内存的,存放在硬盘上即可。


# hello.py文件的内容可通过cat hello.py来查看

[root@foundation44 ~]# vim hello.py

[root@foundation44 ~]# cat hello.py 

#!/usr/bin/env  python

a = 1

print a

# 脚本文件一定要注意加上执行权限

[root@foundation44 ~]# chmod +x hello.py 

[root@foundation44 ~]# python hello.py 

1


(1)env作用:


    #!/usr/bin/python 这种写法表示直接引用系统的默认的 Python 版本,这样的话 python 程序移植到其他机器上可能运行的时候有问题,因为别人系统默认的Python版本与你预期的并不一致。

    #!/usr/bin/env python 这种写法表示,引用环境变量里面自定义的 Python 版本,


2.字符编码种类:


(1)ASCII:美国人发明了计算机,用二进制存储数据,英文字母加各个字符一共128个,每8位存储一个字符,2^8=256,可通过ord()数去查看字符对应的ASCII码。

(2)Unicode:但是ASCII码忽略了中文,韩文,日文等其他国家的文字,这个时候256个字符的对应关系明显是不够用的,这时候就用两个字节对应一个文字,2**16=65536.

(3)UTF-8:英文字符明明可以通过一个字节存储,Unicode却需要2个字节来存储,对于存储比较小的计算机来说,是浪费很多不必要占用的空间,这个时候就出现utf-8。


ASCII码: 1字节=8位,2^8=256

unicode:2字节=16位,2^16=65536   英文存2字节 中文存2字节

utf-8: 英文存1字节,中文存3个字节:两个是内容本身,一个是解释

GB2312:中文存2字节


(4)那么什么是utf-8呢?

   简单来说就是可变长度编码格式,英文字符用ASCII码来存,而中文呢,就用utf-8来存,这个时候中文就不是两个字节存储,而是三个字节来存。


python编程有个要注意的问题,当python90年代还没有出现Unicode,使用时需要手动指定Unicode格式。 指定存储格式为Unicode 


>>> name_unicode = u"高山"   #####name_unicode变量名,u"高山"变量的值 

>>> type(name_unicode)  ####查看字符的类型

<type ‘unicode‘>


3.字符的编码与解码


当存储数据到硬盘,需要考虑到节省空间的问题,所以采用utf-8格式进行存储;

当将数据读入内存时,统一一个编码格式便于操作,采用unicode编码格式;


内存读取:规范 Unicode        从内存读取到硬盘  #####字符编码

存在硬盘:节省空间 utf-8      从硬盘到内存   #字符解码


字符的编码:(encode)unicode -> utf-8   

字符的解码:(decode)utf-8 -> unicode


# 定义一变量,编码格式为unicode

>>> name_unicode = u"高山"   #####name_unicode变量名,u"高山"变量的值  

>>> type(name_unicode)  ####查看字符的类型

<type ‘unicode‘>

# 字符的编码,从unicode到utf-8格式

>>> name_utf8 = named_unicode.encode (‘utf-8‘)#####将变量用utf-8编码

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name ‘named_unicode‘ is not defined  ###报错

>>> name_utf8 = name_unicode.encode (‘utf-8‘)

>>> type(name_utf8)  ####查看字符的类型

<type ‘str‘>   

# 字符的解码操作,从utf-8解码到unicode编码格式   

>>> name_unicode1 =  name_utf8.decode(‘utf-8‘)#####将变量用utf-8解码

>>> type(name_unicode1) ####查看字符的类型

<type ‘unicode‘>


技术分享

4.python编程风格


    python简洁明了的编程格式,如果不按照python既定的格式进行编写程序,直接报错,所以说,刚开始编写python代码会常常报错。这里我就用C语言和python语言做简单的比较。


(1)C语言显示  hello 


#include <stdio.h>

 

void hello()

{

    printf("hello!\n");

}

 

void main()

{

    hello();

}

从上面的代码我们会发现,C代码块是通过花括号  {}  做以区别。


[root@foundation44 ~]# vim hello.c

[root@foundation44 ~]# yum install gcc -y

[root@foundation44 ~]# gcc hello.c -o hello

[root@foundation44 ~]# ls

anaconda-ks.cfg             hello.c                             Pictures

Desktop                     hello.py                            Public

Documents                   initial-setup-ks.cfg                PycharmProjects

Downloads                   Mail                                Templates

foundation-config-post.log  Music                               Videos

hello                       ntfs-3g-2013.1.13-5.el7.x86_64.rpm

[root@foundation44 ~]# ./hello.c

 hello!


(2)python显示  hello 


#!/usr/bin/env  python


def hello():

    print "hello"

def main ():

    hello()

print "world"

main()

技术分享



(3)main()根据上面的两个不同编程语言实现同一功能的分析,总结python编程初级要掌握的编程风格如下:


 1)不要在行尾加分号;

 2)每行不超过80个字符;

 3)Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。 

 4)增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。


(4)python注释


1)单行注释:  #  常被用作单行注释符号,  #  开头的行,其右边的任何数据都会被忽略,当做是注释。

2)块注释: 需要批量文本或代码时,使用三引号  ‘‘‘ ‘‘‘  .,当然三引号也可以实现多行文本格式化打印。


四 基础概念


1.输入与输出


(1)输出: 告诉用户程序执行的结果

# print + 字符串...    //字符串可为多个,逗号隔开

# print + 数字|表达式


[root@foundation44 ~]# python 

Python 2.7.5 (default, Oct 11 2015, 17:47:16) 

[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> print ‘hello‘,‘word‘

hello word

>>> print 100

100

>>> print 100+200

300

>>> print "100+200=" 100+200

  File "<stdin>", line 1

    print "100+200=" 100+200

              

SyntaxError: invalid syntax  ####格式错误

>>> print "100+200=", 100+200

100+200= 300


(2).输入: 告诉计算机程序所需的信息


# raw_input写入的内容赋值给变量name,输入的内容为字符类型

>>> name = raw_input("Name:")

Name:westos

>>> print name

westos

>>> type(name)

<type ‘str‘>

 

# input写入的内容赋值给变量age,输入的内容为数值类型

>>> age = input("Age:")

Age:14

>>>  type(age)

  File "<stdin>", line 1

    type(age)

    ^

IndentationError: unexpected indent#####命令没有顶头写

>>> type(age)

<type ‘int‘>


(3)小练习: 编写一程序,录入信息包括  hostname、IP、used_year、CPU、Memory、manager_name  ,如果使用年限超过10年,直接显示警告

信息“该服务器使用年限太久!”,如果使用年限不超过10年,显示该服务器信息如下面的格式如下:

主机信息

主机名: hostname

IP:IP

使用年限:used_year

CPU:CPU

Memory:Memory

技术分享

技术分享

3.变量


变量是内存中的一块区域。


(1)变量的命名: 变量名由字母,数字,下划线组成。


>>> a=1

>>> print a

1

>>> a_1 = 111

>>> _a = 222

>>> print _a

222

>>> 1a = 111

  File "<stdin>", line 1

    1a = 111

     ^

SyntaxError: invalid syntax  //语法法错误,无效的语法,变量的首位不能是数字

 

>>> a = 5

>>> b = 3>>> print a + b

8

>>> print a + b +c

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name ‘c‘ is not defined   //名称错误,没有变量c


(2)变量的特性:


实际存储在内存上;

变量名最好见名知意;

变量可重新赋值;

>>> number1 = 1

>>> number2 = 2

>>> number1 + number2

3

python中地址变量与c语言刚好相反,一条数据包含包含多个标签;

>>> a = 1

>>> b = 1

>>> id(a)

10812520

>>> id(b)

10812520


面试题常见问题:

简要描述Python的垃圾回收机制(garbage collection)。

Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会消失,分配给该对象的内存就会释放出来用作他用。

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。


4.运算符与表达式


(1)赋值运算符:=, +=, -=, /=, *=, %=

(2)算术运算符:+, -, , /, //, %, *

  >>> 1 + 1

  2

  >>> 1 - 1

  0

  >>> 1 * 3

  3

  >>> 1 / 2

  0

  >>> 1.0 / 2

  0.5

  >>> 1.0 // 2 ##整除取整数

  0.0

  >>> 1 % 2   ####整除取余

  1

  >>> 2 ** 3  ###2的三次方

  8

  >>> a33 = 3 ** 3 

  >>> print a33

  27

  >>> print "a33=",a33

  a33= 27

  


In [1]: 5/2

Out[1]: 2


In [2]: from __future__ import division ###当除法有小数点时,显示小数点后的数


In [3]: 5/2

Out[3]: 2.5


In [4]: print ‘5 / 2 = %d‘ %(5/2)  ##商取整数

5 / 2 = 2

In [6]: print ‘5 / 2 = %f‘ %(5/2)   ##商取小数点后六位

5 / 2 = 2.500000

In [8]: print ‘5 / 2 = %.1f‘ %(5/2)  ##商取小数点后1位

5 / 2 = 2.5

In [9]: print ‘5 / 2 = %.11f‘ %(5/2)

5 / 2 = 2.50000000000


In [10]: print ‘5 / 2 = %.2f‘ %(5/2)

5 / 2 = 2.50


In [11]: print ‘5 / 2 = %.3f‘ %(5/2)

5 / 2 = 2.500


(3)关系运算符: >, >=, <, <=, !=, ==

布尔值:1 < 2,返回一个布尔类型的结果

>>> 1 < 2

True    ###1代表True

>>> 1 > 2

False   ####0代表False

(4)逻辑运算符:逻辑与and, 逻辑或or, 逻辑非not


练习:

编写一四则表达式,(if语句实现)

技术分享

技术分享


(5)

In [1]: num =1   


In [2]: type(num)

Out[2]: int  ####当输入一个数时,默认为数据类型为整型


In [3]: num =111111111111111111111111111111111111


In [4]: type(num)

Out[4]: long  ####当输入一个数比较大时,默认为数据类型为长整型


In [5]: num =1


In [6]: type(num)

Out[6]: int


In [7]: num =1L  ###当输入一个数后加了“L”时,手动更改数据类型为长整型


In [8]: type(num)

Out[8]: long

In [9]: a=12e9  


In [10]: print a

12000000000.0   ####12e9 表示12成以10的九次方,类型时浮点型


In [11]: type(a)

Out[11]: float


In [13]: print ‘\hello\n‘

\hello



In [14]: print ‘hello\n‘

hello        ####\n 表示换行



In [15]: print ‘\thello\n‘

hello  #####\t表示留出每行前面的几个字符


In [16]: a=‘hello westos‘


In [17]: a[1]   ###给hello westos每个字符编号从0开始(包括空格),输出第1个字符

Out[17]: ‘e‘


In [18]: a[6]   ####输出第6个字符

Out[18]: ‘w‘


In [19]: a[0:5]  ####输出从0到5 个字符

Out[19]: ‘hello‘


In [29]: tuple = ()


In [31]: type(tuple)

Out[31]: tuple




python