###################################################
######################了解python#######################
###################################################
一.什么是python?
* python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。
二.python的简史
* 1989年,Guido(龟叔)为ABC 语言写的一个插件。因MontyPython的喜剧团体的原因,故给这个语言起名python。linux也是1989年诞生的,1991年正式发布linux1.0内核;
* 1990年, 发布python的第一个版本;
* 2001年发布python2.0版本;
* 2010年获年度Tiobe编程语言大奖,TIOBE网站;
TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如 Google、MSN、Yahoo!、Wikipedia、YouTube以及 Baidu 等)进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
* 2013年发布python3.x版本;
三.python为什么这么火?
早期的国外互联网公司很多网站就是用python开发,google中国将python编程带到中国,后面有豆瓣网站Youtube,雅虎,google(现在主推Go语言),NASA用python编程,2010年之后,移动互联网的兴起,项目开发周期短的语言越来越火,在运维圈,有很多优秀的第三方库,便于开发,移植性很强。
四.python的优点
1.创始人评价:简单、优雅、明确
* 简单体现在如果你的母语是英语,写python脚本就像写文章,很简单;
* 优雅体现在python的格式,比如缩进来确定代码块,可避免编程人员进行复杂的嵌套;
* 明确体现在解决问题的方法只有一种最优选项,而perl语言是每个问题有很多最优解,但不利于团队协作;
2.有强大的第三方库模块,需要实现一复杂功能,只需调用现有的库,可快速实现功能。20多年的发展,各种库都已经完备,比如:邮件库,爬库......
3.可跨平台移植,java有Java的虚拟机,python同样;
4.是一种面向对象的语言;
5.是一种可扩展的语言(与C,C++,Java结合)
五.python的缺点
* 代码执行速度慢,相比C语言,不过现在python的异步并发框架导致执行速度慢;
* python是开源的编程语言,代码不能加密,当然有相应的工具可以将python代码转换为exe的二进制可执行码,但是反解码也很容易;
六.python的应用
* 软件开发
* 游戏后台、搜索、图形界面
* 网站
* 科学运算
* 系统管理
* 脚本
*IT自动化工具
##################################################
######################使用python######################
##################################################
python的安装
* 访问python官网,下载不同平台下的python软件;
* Linux操作系统上一般iso镜像里面自带,直接通过yum安装;
注意点:
* python2.6是一个过渡版本,既可以执行,又包含python3.0的新特性;
* 现在企业实战应用python版本为2.7版本;
* python2.7是python2.x系列最后一个版本,不会再有python3.0;
首先yum install pytnon -y ##安装python
1.python -V
python -version ##查看python版本
2.python ##进入交互式python
[root@foundation57 ~]# 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 "hahahakaixin" #输出
hahahakaixin
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
ps:用exit()或Ctrl+d退出,交互
3.脚本执行python
在python交互式环境中,我定义一个变量 a=1 ,存放在内存中.。如果没有,退出交互式环境,可通过 print a 打印出a的指,如果退出此次交互式环境, a 变量存的值 1 已经被内存释放了。因此怎么在下次使用时,依旧可以查看到a变量的值呢?当然是把原先存放在内存的,存放在硬盘上即可。此时就用到了脚本执行python
[root@foundation57 ~]# vim hahaha.py ##名字可以随便起 py代表python
#!/usr/bin/env python
#coding:utf-8
print "哈哈哈开心“
[root@foundation57 ~]# chmod +x hahaha.py ##给脚本文件加上执行权限
[root@foundation57 ~]# python hahaha.py
哈哈哈开心
******************************************************
*********为什么要用#!/usr/bin/env python开头********
******************************************************
a.#!/usr/bin/python这种开头表示直接引用系统默认的python版本,但由于不同版本的python不兼容,这个python程序移植到其他机器可能就会有问题(which python)可以查看python可执行文件的位置。
b.#!/usr/bin/env python 加上env后,作用主要是代码移植。表示引用环境变量里面自定义的 Python版本,
c.如果要用中文的话,就要用国际通用的编码格式,常见的几种有:
#coding:utf-8
#coding=utf-8
#encoding:utf-8
#encoding=utf-8
执行:python hahaha.py
切记:绝对不能使用 word (不是纯文本文件)和 windows 自带的记事本(在文件开始的地方加特殊字符 0xefbbbf<16进制>UTF-8BOM ,有了前缀,程序自动判断它为 utf-8 格式,并按 utf-8 格式解析文本或字符串,否则,需要按照字符编码格式一个个
去验证。
######################Python解释器#######################
cpython
ipython:基于 cpython,交互方式有所增强
pypy: 对代码进行动态编译, JIT技术( just-in-time compiler ,即时编译器),显著提高代码执行速度。
Jpython:java平台上的 python解释器,将 python 代码编译成 java`字节码执行。
IronPython:直接将 python代码编译成 .net 的字节码
##################################################
#####################字符编码#######################
##################################################
* ASCII:美国人发明了计算机,用二进制存储数据,英文字母加各个字符一共128个,每8位存储一个字符,2^8=256,可通过 ord() 函数去查看字符对应的ASCII码。
* Unicode:但是ASCII码忽略了中文,韩文,日文等其他国家的文字,这个时候256个字符的对应关系明显是不够用的,这时候就用两个字节对应一个文字,2**16=65536.
* UTF-8:英文字符明明可以通过一个字节存储,Unicode却需要2个字节来存储,对于存储比较小的计算机来说,是浪费很多不必要占
用的空间,这个时候就出现utf-8。那么什么是utf-8呢?简单来说就是可变长度编码格式,英文字符用ASCII码来存,而中文呢,就用utf-
8来存,这个时候中文就不是两个字节存储,而是三个字节来存
ASCII:1字节=8位,2^8=256
Unicode:2字节=16位,2^16=65536 a -> 2字节中文 -> 2字节
utf-8:a -> 1字节, 中文 -> 3字节
GB2312:2字节
内存读取:Unicode
存在硬盘:utf-8
字符的编码(encode):unicode->utf-8
字符的解码(decode):utf-8->unicode
##在进行内存读取处理时,要统一字节,不然不符合储存规则。即统一一个编码格式便于操作,所以采用unicode编码格式;
而存在硬盘时,当然是越小越好。就用utf-8格式进行存储。
所以就存在字符的编码,解码。
示例:
[root@foundation57 ~]# 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.
>>> a=u"哈哈" ##指定a=unicode类型
>>> type(a) ##type()查看变量类型
<type 'unicode'>
>>> b=a.encode('utf-8') ##进行字符编码,编码unicode->utf-8
>>> type(b)
<type 'str'>
>>> c=b.decode('utf-8') ##进行字符解码,解码utf-8->uincode
>>> type(c)
<type 'unicode'>
>>>
############################################
############将c语言与python比较#################
############################################
C语言显示hello world:
[root@foundation44 ~]# vim hello.c
#include <stdio.h>
void hello(){
printf("hello!");
}
void main()
{
hello();
}
从上面的代码我们会发现,C代码块是通过花括号 {} 做以区别。
python显示 helloworld:
[root@foundation44 ~]# yum install gcc
[root@foundation44 ~]# gcc hello.c -o hello ##编译
[root@foundation44 ~]# ./hello ##执行
hello!
[root@foundation44 ~]# vim hello.py ##有缩进
#!/usr/bin/env python
def hello():
print "hello"
def main():
hello()
print "world"
main()
[root@foundation44 ~]# python hello.py
hello
world
[root@foundation44 ~]# vim hello.py ##没有缩进
#!/usr/bin/env python
def hello():
print "hello"
def main():
hello()
print "world"
main()
[root@foundation44 ~]# python hello.py
world
hello
* 根据上面的两个不同编程语言实现同一功能的分析,总结python编程初级要掌握的编程风格如下:
a.不要在行尾加分号;
b.每行不超过80个字符;
c.Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。
d.增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。
##################python注释################
* 单行注释: # 常被用作单行注释符号, # 开头的行,其右边的任何数据都会被忽略,当做是注释。
* 块注释: 需要批量文本或代码时,使用三引号 ''' ''' .,当然三引号也可以实现多行文本格式化打印。
##################################################
#####################编写简单的题目###################
###################################################
1.输出: 告诉用户程序执行的结果
# print + 字符串... //字符串可为多个,逗号隔开
# print + 数字|表达式
示例:
>> print 300
300
>>> 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:12
>>> type(age)
<type 'int'>
3.变量
变量是内存中的一块区域。
变量的命名: 变量名由字母,数字,下划线组成。
示例:
>>> a=1
>>> print a
1
>>> a_1 = 111
>>> _a = 222
>>> print _a
222
>>> 1a = 111
File "<stdin>", line1
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 //名称错误
4.变量的特性:
实际存储在内存上;
变量名最好见名知意;
变量可重新赋值;
示例:
>>> number1 = 1
>>> number2 = 2
>>> number1 + number2
3
5.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时,该对象生命就结束了。
###################运算符与表达式######################
赋值运算符:=, +=, -=, /=, *=, %=
算术运算符:+, -, , /, //, %, *
示例:
>>> 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
8
>>> a33 = 3 ** 3
>>> print a33
27
>>> print"a33=",a33
a33= 27
>>> print "a33=",a33
a33 = 27
关系运算符: >, >=, <, <=, !=, ==
布尔值:1 < 2,返回一个布尔类型的结果
示例:
>>> 1 < 2
True
>>> 1 > 2False
逻辑运算符:逻辑与and, 逻辑或or, 逻辑非not
############################################
##############python的基本数据类型################
############################################
整型:
>>> num1 = 123
>>> type(num1)
<type 'int'>
>>> type(123)
<type 'int'>
长整形:
>>> num2 = 999999999999999
>>> type(num2)
<type 'int'>
强制定义为长整型: num3 = 123L:
>>> num3 = 123L
>>> type(num3)
<type 'long'>
浮点型:表示小数:
>>> f1 = 12
>>> type(f1)
<type 'int'>
>>> f2 = 12.0
>>> type(f2)
<type 'float'>
复数类型:python对复数提供内嵌支持,eg: 3.14j,8.32e-36j:
>>> c = 3.14
>>> type(c)
<type 'float'>
>>> c = 3.14j
>>> type(c)
<type 'complex'>
#############字符串###############
1.字符串的定义
# 字符串定义的第一种方式:
>>> str1 = 'our company is westos'
# 字符串定义的第二种方式:
>>> str2 = "our company is westos"
# 字符串定义的第三种方式:
>>> str3 = """our company is westos"""
>>> type(str1)
<type 'str'>
>>> type(str2)
<type 'str'>
>>> type(str3)
<type 'str'>
>>> say = 'let\'s go'>>> say
"let's go"
>>> say = "let's go "
>>> say
"let's go "
转义符号
>>> mail = "tom: hello i am westos "
>>> print mail
tom: hello i am westos
>>> mail = "tom:\n hello\n i am westos "
>>> print mail
tom:
hello
i am westos
三重引号
块注释
函数的doc文档
字符串格式化
>>> mail = """tom:
... i am jack
... good luck
... """
>>> print mail
tom:
i am jack
good luck
>>> mail
'tom:\n\ti am jack\n\tgood luck\n'字符串索引
>>> a = 'abcde'
>>> type(a)
<type 'str'>
>>> a[0]
'a'
>>> a[1]
'b'
>>> a[3]
'd'
>>> a[0]+a[1]
'ab'
>>> a[0]+a[2]
'ac'
字符串切片
>>> a
'abcde'
>>> a[1:5:2]
'bd'
>>> a[1:5] //代表切片取出第2个到第4个
'bcde'
>>> a[:5]
'abcde'
>>> a[4:]
'e'
>>> a[4:1] //python中默认是从左向右取值
''
>>> a[4:1:-1] //当步长为-1时,从右向左取值
'edc'
>>> a[:]'abcde'
>>> a[-1]
'e'
>>> a[-4:-1] //代表倒数第2个到倒数第4个切片
'bcd'
>>> a[-2:-4]
''
>>> a[-2:-4:1]
''
>>> a[-2:-4:-1]
'dc'