Python【NO.1】:Python简介和入门

Python简介

①Python前世此生

     python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。 

最新的TIOBE排行榜,Python赶超PHP占据第五!!!html

Python能够应用于众多领域:python

数据分析    组件集成linux

网络服务    图像处理git

数值计算    科学计算等程序员

Python在互联网企业中的使用状况:web

Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA等。shell

互联网公司普遍使用Python来作的事通常有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。数组

②为何是Pythonn

C 和 Python、Java、C#等
      C语言: 代码编译获得 机器码
      其余语言: 代码编译获得 字节码
Python 和 C
      对于使用:Python的类库齐全而且使用简洁
      对于速度:Python的运行速度相较与C,绝逼是慢了
Python 和 Java、C#等
  对于使用:Linux原装Python,其余语言没有
  对于速度:Python在速度上可能稍显逊色
编-到字节码;相对慢;linux自带

③Python 种类

Cpython
  Python的官方版本,使用C语言实现,使用最为普遍,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),而后运行在Python虚拟机上。
Jyhton
  Python的Java实现,Jython会将Python代码动态编译成Java字节码,而后在JVM上运行转换后的程序
IronPython
  Python的C#实现,而且它将Python代码编译成C#中间代码(与Jython相似)
PyPy
  Python实现的Python
RubyPython、Brython、Pyobjc .
 
对应关系和执行流程以下:
pyp,相对使Python有所提高:

Python 环境搭建

安装安全

windos - linux 安装相对比较简单bash

..略..

PS:linux 更新新版本的python后,会致使yum执行异常,只需从新指引原版本号就行

查看默认Python版本
python -V

一、安装gcc,用于编译Python源码
    yum install gcc
二、下载源码包,https://www.python.org/ftp/python/
三、解压并进入源码文件
四、编译安装
    ./configure
    make all
    make install
五、查看版本
    /usr/local/bin/python2.7 -V
六、修改默认Python版本
    mv /usr/bin/python /usr/bin/python2.6
    ln -s /usr/local/bin/python2.7 /usr/bin/python
七、防止yum执行异常,修改yum使用的Python版本
    vi /usr/bin/yum
    将头部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6

Python 入门

1、Python 内部执行过程

本身写的.py文件是自定义模块

执行能够经过终端输入和文件两种方式来实现

读文件-->>词法-->>语法分析-->>编译-->>内容-->>执行

2、解释器

像shell同样,使用./脚本名时,其第一行顶格写明指向的解释器。

#!/usr/bin/env python

3、内部编码

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码):2**8=256  没法表示中文

Unicode(统一码、万国码、单一码):最少由 16 位来表示(2个字节),即:2 **16 = 65536 

UTF-8,是对Unicode编码的压缩和优化:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存(好处节省磁盘空间)

因此,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),

脚本中编码声明

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "你好,世界"

搞清楚了 ASCII、Unicode 和 UTF-8 的关系,咱们就能够总结一下如今计算机系统通用的
字符编码工做方式:
在计算机内存中,统一使用 Unicode 编码,当须要保存到硬盘或者须要传输的时候,就转
换为 UTF-8 编码。
用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为 Unicode 字符到内存里,编辑完
成后,保存的时候再把 Unicode 转换为 UTF-8 保存到文件:

 

Python 执行 -->>读进内存 Unicode -->>写入磁盘 UTF-8 

4、注释

单行:#被注释内容

多行:"""被注释内容"""

5、捕获脚本传入参数

Python有大量的模块,从而使得开发Python程序很是简洁。类库有包括三中:

  Python内部提供的模块

  业内开源的模块

  程序员本身开发的模块

Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import sys
  
print sys.argv 

  

6、pyc文件
执行Python代码时,若是导入了其余的 .py 文件,那么,执行过程当中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译以后产生的字节码。

两个命名同样的.py  .pyc文件执行顺序

python内部将2文件比较,.py优先

7、变量

一、声明变量

name = "abc"

变量名:name

name变量的值:"abc"

变量的做用:昵称,其代指内存里某个地址中保存的内容

 

变量定义的三条规则:

  变量名只能是 字母、数字或下划线的任意组合

  变量名的第一个字符不能是数字

  如下关键字不能声明为变量名

   ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',

'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

PS  不一样大小写的相同昵称的变量表明不用的变量名

二、变量赋值

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
name1 = "abci"
name2 = "123"

  

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
name1 = "abc"
name2 = name1

  

 

变量赋值会从新开通内存空间,变量的值指向内存地址的内容。

除以上状况外,python 自身优化功能:

Python是由C编写的,多个变量指向同一个值时,会通过预先规定好的范围进行优化,指向同一个值再也不从新开通内存空间,而是指向同一个内存地址。

>>> a='abc'
>>> b='abc'
>>> id(a),id(b)
(140692465670928, 140692465670928)
>>> c=500
>>> d=500
>>> id(c),id(d)
(18646952, 18646856)
>>> e=10
>>> f=10
>>> id(e),id(f)
(18371168, 18371168)

  

剖析Python源代码

 8、用户交互

输入:raw_input()   getpass.getpass()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import getpass
 
# 将用户输入的内容赋值给 name 变量
name = raw_input(">>>")
print name
 
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass(">>>")
print pwd

 

9、流程控制和缩进

If ….else….

If … elif … elif … else

Split

Strip

Len()

While True:

Break

Continue

多层循环

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import getpass

name = raw_input("请输入用户名:") # 输入alex
pwd = getpass.getpass("请输入密码:")

if name == "eric" and pwd == "123": 
    print "登陆成功,普通,123"
elif name == "tony" and pwd == "123": 
    print "登陆成功,超级,123"
elif name == "alex" and pwd == "123": 
    print "登陆成功,超神,123"
else:
    print "登陆失败"

""" 嵌套
if pwd == "123":
    if name == "eric":
        print "eric,普通"
    elif name == "tony":
        print " tony,超级"
    elif name == "alex":
        print " alex,超神"
    else:
        print "登陆失败"
else:
    print "登陆失败"
    
"""
# eric,普通,123
# tony,超级,123
# alex,超神,123

 

#_*_ coding:utf-8 _*_
import random #导入模块

real_num = random.randrange(10)  #设置随机数0~10
#guess_num = raw_input("Please guess the real number:") #输入的是字符串。
#计算机底层会吧字符串变成一个二进制来表示这个字符串,因此因此字符串和数字
#比较是不会出错的,但不能这么比较。
# print type(guese_num)   ord(guess_num)#看二进制位
retry_num = 0  #定义输入的次数
while retry_num < 3: #循环每次提示输入,最多重试3次
    guess_num = raw_input("Please guess the real number:").strip()
    if len(guess_num) == 0:  #若是输入空格或者回车就从新输入
        continue
    if guess_num.isdigit():  #判断字符串里包含数字是true,而后转成数字
        guess_num = int(guess_num)
    else:
        print "you need input a integer instead of string"
    if guess_num > real_num:
        print "wrong!you need try smaller!"
    elif guess_num < real_num:
        print "wrong!you need try bigger!"
    else:
        print "you got it!"
        break #输入正确跳出整个while循环
    retry_num +=1  #输入错误循环次数加1
else: #当猜错了执行下面命令
    print "The real num is", real_num
 BUG: 输如“回车”保持,回车是不能转intraw_input后面输入“空格”“回车”会当作一个字符串处理,能够用用字符串内置的方法strip(),默认会把空格和回车都去掉。这里须要判断是否是一个“空格”“或者回车”,每个字符长度是1,输入空格默认长度也是1

 

break----continue:

break是负责跳出整个循环,但continue是跳出本次循环,继续下一次循环。就是说,循环过程当中,若是遇到continue,那这一次循环本应该执行的后面的代码就不执行了,直接跳过了,直接进行下一次循环了。

外层变量,能够被内层变量使用
内层变量,没法被外层变量使用
 
10、数据类型
    '数据类型按特征划分':{
         '数字类型':{
            '整型':['布尔型','长整型','标准整型'],
             '非整型':['双精度浮点型','复数','decimal(不是内建类型)']
             },
        '序列类型':['字符串str','元组tuple','列表list'],
        '映像类型':'字典dict',
        '集合类型':['可变集合set','不可变集合frozenset']
        },
    '数据类型按可变性划分':{
        '可哈希的不可变数据类型':['数字类型','字符串str','元组tuple','不可变集合frozenset'],
        '可变数据类型':['字典dict','可变集合set','列表list']
        }

一、数字

2 是一个整数的例子。 长整数 不过是大一些的整数。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是复数的例子。

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647   在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)   跟C语言不一样,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上因为机器内存有限,咱们使用的长整数数值不可能无限大。   注意,自从Python2.2起,若是整数发生溢出,Python会自动将整数数据转换为长整数,因此现在在长整数数据后面不加字母L也不会致使严重后果了。 float(浮点型)  浮点数用来处理实数,即带有小数的数字。 complex(复数)   复数由实数部分和虚数部分组成,通常形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
 
二、布尔值
  真或假
  1 或 0
>>> a = True
>>> if a :print "it is ok"
... 
it is ok
True 是1
Flase是0
C语言中须要定义整型类型,若是超出就报错,python能够自动转换。

  

三、字符串
"hello world"
万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次建立字符串时候须要在内存中开辟一块连续的空,而且一旦须要修改字符串的话,就须要再次开辟空间,万恶的+号每出现一次就会在内从中从新开辟一块空间。

字符串格式化 

_author_ = "xu"

name = raw_input("please input your name:")
#age = int(raw_input("please input your age:"))
age = input("please input your age:")
sex = raw_input("please input your sex:")
job = raw_input("please input your job:")
print '''information of %s staff
NAME:%s
AGE:('%d') %f  %.2f
SEX:%s
JOB:%s
''' %(name,name,age,age,age,sex,job)

PS: 字符串是 %s;整数 %d;浮点数%f

字符串经常使用功能:

  •移除空白
  •分割
  •长度
  •索引
  •切片

四、列表

建立列表:

name_list = ['alex', 'seven', 'eric']
或
name_list = list(['alex', 'seven', 'eric'])

基本操做:
 •索引
 •切片
 •追加
 •删除
 •长度
 •切片
 •循环
 •包含

切片:

>>> shopping_list
['Iphone', 'Mac', 'Bike', 'Coffee', 'Car', 'Clothes', 'Food', 'Gift']
>>> shopping_list[0:3] #取0到第3个元素,不包括第4个
['Iphone', 'Mac', 'Bike']
>>> shopping_list[:3]   #同上,取0到第3个元素,不包括第4个,0能够不写
['Iphone', 'Mac', 'Bike']
>>> shopping_list[2:5]  #取第3至第5个元素
['Bike', 'Coffee', 'Car']
>>> shopping_list[:-3] #取从0至倒数第3个元素
['Iphone', 'Mac', 'Bike', 'Coffee', 'Car']
>>> shopping_list[-3:] #取最后3个元素
['Clothes', 'Food', 'Gift']
>>> shopping_list[1:8:2]	#从1至8隔一个取一个,后面的2是步长,即每隔几个元素取一个
['Mac', 'Coffee', 'Clothes', 'Gift']
>>> shopping_list[::2] #从头到位每隔一个取一个
['Iphone', 'Bike', 'Car', 'Food']

五、元祖

建立元祖:
ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))

基本操做:
 •索引
 •切片
 •循环
 •长度
 •包含

  tuple和list很是相似,可是tuple一旦初始化就不能修改。它也没有append(),insert()这样的方法。其余获取元素的方法和list是同样的,但不能赋值成另外的元素。由于tuple不可变,因此代码更安全。
只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,) >>> t (1,)

六、字典(无序)

建立字典:
person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})

经常使用操做:
 •索引
 •新增
 •删除
 •键、值、键值对
 •循环
 •长度

for key in date :
   print key,date[key]
和下面的到的结果是同样的,但有区别。前者在循环取的时候效率相对高不少。
for key,val in date.items():
    print key,val
ps: 索引是从0开始的

 11、运算

http://www.runoob.com/python/python-operators.html

12、文件的基本操做

  file_obj = file("文件路径","模式")

  不少时候咱们写的程序都须要对文件进行读、写操做,好比你要分析日志、存储数据等,和其它语言同样,Python也内置了对文件进行操做的函数,下面一块儿来学习一下。
  读写文件前,咱们先必须了解一下,在磁盘上读写文件的功能都是由操做系统提供的,现代操做系统不容许普通的程序直接操做磁盘,因此,读写文件就是请求操做系统打开一个文件对象(一般称为文件描述符),而后,经过操做系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)

 

1. 除了r\w\a三种最经常使用处理文件的模式以外,还有如下几种:
2. r+ 以读写模式打开,其实跟追加的效果是同样的,即能读,又能写,但写实际上是追加内容,可是若是文件不存在的话,不会像a同样建立文件,而是报错
3. w+ 以写读模式打开,
4. a+ 以追加和读的模式打开
5. rb,wb,ab 是指以二进制的模式打开并处理文件,当处理的文件是非文本文件时,就应该以二进制的格式打开文件,但有的同窗说了,我不加b也不出错呀,没错,即便不加b,file也能正常处理二进制文件,可是当你的程序涉及到跨平台时,就可能有问题了,由于在Linux和Windows的换行标志位是不同的,Linux是”\n”,Windows是”\r\n”,因此Windows上的文件在Linux下通常会在换行处显示^M,须要特别转换一下才能正常处理。 当你把Windows的文件copy到Linux并用Python file方法处理时,你在打开模式上加上b,Python就会帮你把^M转成\n,不然你的程序就不知道该在哪换行了喽!因此,咱们建议,若是你预计可能会处理Windows上产生的文件,那仍是默认就加上b吧。

 

文件其它方法
1. f.mode              显示文件打开格式
2. f.flush()             把缓冲区中的数据刷到硬盘,当你往文件里写数据时,python会先把你写的内容写到内存中的缓冲区,等缓冲区满了再统一自
                动写入硬盘,所以减小了对硬盘的操做次数,毕竟硬盘的速度比内存慢多了。
3. f.read()            把文件一次性读入内存
4. f.readline()          读一行内容
5. f.readlines()         把文件都读入内存,而且每行转成列表中的一个元素
6. f.tell()             显示程序光标所在该文件中的当前的位置
7. f.seek()            跳到指定位置,f.seek(0) 是返回文件开始
8. f.truncate()         f.truncate(10) 从文件开头截取10个字符,超出的都删除。
9. f.writelines()          参数需为一个列表,将一个列表中的每一个元素都写入文件
10. f.xreadlines()                   以迭代的形式循环文件,在处理大文件时效率极高,只记录文件开头和结尾,每循环一次,只读一行,所以不须要将整个文件都一
               次性加载到内存,而若是用readlines(),则须要把整个文件都加载到内存,处理大文件不适合,容易把内存撑爆。
相关文章
相关标签/搜索