首页 > 代码库 > 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