我的Python学习之路-day1
一、关于python的基本介绍
1、python由来
python是由吉多·范罗苏姆(Guido van Rossum) 是一名荷兰计算机程序员,在圣诞节期间,他为了在阿姆斯特丹打发时间而编写了python语言,此语言为ABC语言的继承。在 Python 社区,吉多·范罗苏姆被人们认为是“仁慈的独裁者(BDFL)”,意思是 他仍然关注 Python 的开发进程,并在必要的时刻做出决定,也决定着python的发展方向
2、python与其他语言比较
python是一种动态的解释型语言、C/C++/C#是静态的编译型的语言、java是静态的解释型语言
计算机在编译C语言时是C语言直接通过编译编译成机器码到内存中,计算机的cpu直接读取机器码来运行程序
计算机在运行例如PYTHON(java、c++、c#)时候会先编译成字节码,再由字节码通过计算转换成机器码才被cpu读取
通过以上的执行过程可以看出C语言相对于其他语言执行的速度会快,但这个速度我们是感知不到的。
3、python种类
1>Cpython
使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上
2>Jyhton
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
3>IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
4>PyPy(特殊)
Python实现的Python,将Python的字节码字节码再编译成机器码。
二、python安装
1、windows版:
在官网下载好windows版本的安装包,如:python-2.7.10.amd64.msi
安装好此文件会在c盘默认创建一个文件夹名为:Python27的文件夹
之后在windows环境变量中声明一下变量就可以在windows 的cmd环境中运行python程序了,如图
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

如此保存退出后打开cmd命令行输入python即可进入到python环境中,如图:

2、linux版本
1>linux版本的系统会默认安装python,
注:ubuntu 15.04 server系统的python版本为2.7.9;centos7为2.7以上,centos6.3为2.6需要升级为2.7以上版本
2>centos 6.3 python升级为2.7.3
#wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
#tar zxvf Python-2.7.3.tgz
#cd Python-2.7.3
#./configure --prefix=/usr/local/python273
#make && make install
python -V可以看到新版本python2.7.3已经生效了,正常情况下即使python2.7安装成功后,系统默认指向的python仍然是2.6.6版本,考虑到yum是基于python2.6.6才能正常工作,所以这里先备份老版本的/usr/bin/python文件为/usr/bin/python- old,然后再做个软连接到/usr/bin/就可以了。
mv /usr/bin/python /usr/bin/python-old
ln -s /usr/local/python273/bin/python /usr/bin/
升级安装好以后你会发现yum无法使用了,因为yum使用的是2.6.6版本的python,所以要修改yum的配置文件以便能够识别2.6.6版本下的python
#vi /usr/bin/yum
#!/usr/bin/python --> #!/usr/bin/python-old #修改此处为2.6.6的位置,就可以继续使用yum了整个升级过程完成,可以使用Python2.7.3版本了
三、写第一个python小程序

好,第一次已经用了,下面我们开始介绍python的基本知识点了。
四、关于python的基础知识点:
1、一个python执行过程
加载内存、词法分析、语法分析、编译-->字节码、执行字节码、机器码<----cpu读取
2、编码
一个python程序执行会对内容进行编译,默认编码为ASCII,此ASCII码为外国人发明,无法表示中文,如果要要想输入中文必须指定python的编码格式,这样unicode就应运而生,而utf-8UTF-8,是对Unicode编码的压缩和优化,我们在编写时候需要指定编码格式(注:python3.0默认的编码就是utf-8所以需要将来到python3.0就无需声明编码了)
python默认的编码是ASCII编码如果是这样编写代码就会报如下错误:


解决如上错误需要在里面指定编码的格式:


ps:此时可能有人会提问这显示也不正常啊,这是由于cmd的编码格式为bgk编码格式,所以显示不正常,通过查看资料还可以我们在输出是指定其编码会显示正常,如下:


这样就显示正常了,通过测试在linux上不用在输出前面强制指定编码格式,只在程序声明一下编码格式就能正常显示中文。
3、python注释
1> # 单行注释
2> 多行注释
"""
注释内容
"""
4、捕获参数
import sys
sys.argv
脚本代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print sys.argv

ps:此模块就是抓去参数,以列表的形式显示出来。
5、模块
既然上面提到了捕获参数,用的就是python内置的模块一个功能,python语言有强大的类库,模块来供我们开始使用,他的类库模块有三种来源
1、python 内置的模块
2、到开源社区有很多业内程序员开发的模块,免费下载下来引用即可
3、根据业务需求,自己开发模块引用。
上面捕获参数用的就是python的内部模块sys,用sys的argv功能来自动捕获参数。
6、字节码
我们在一个python脚本中引用另外一个python脚本,在执行后会自动生成一个已被引用为名的pyc文件,关于此文件的说明,请看下面的例子:
我们在电脑的硬盘上创建一个名为m.py的文件在里面编辑如下内容:
我们执行hello.py后查看文件

ps:打开m.pyc文件里面是机器码,此时文件夹下有三个文件分别为:hello.py 、 m.py、 m.pyc,如果删除m.py仍然出现结果,这是为什么?是因为第一次执行hello.py这个程序生成了m.pyc的文件,python内部有一个计算方法如果m.py内容没有发生改变,python会直接调用m.pyc,此时m.pyc优先级高,如果m.py 改变程序会先条用m.py 重新生成m.pyc,这样重新生成的m.pyc又比m.py优先级高
7、变量
1、变量命令规则:
1>变量名只能是 字母、数字或下划线的任意组合
2>变量名的第一个字符不能是数字
3> 不能以关键字声明变量
2、变量赋值
关于为变量赋值在计算机内存中保存的一个详细过程,如下:
name1='zhangsan'
name2=name1
输出name1和name2都是zhangsan
如果此时name1=lisi
输入name2值依然是zhangsan
以上原因:'zhangsan'这个字符串在内存中存放,name1和name2全部指向此变量,此时又给name1重新指定一个变量lisi,在内存中会单独存放一个'lisi'的字符串,此时name1变量指向了lisi,而name2没有发生改变,所以会出现name2值不会改变(这种限于赋给变量值为<字符串>而言,)
字符串特性:一旦修改,会在内存中重新创建空间
虽然python有这种特性但是由于python有内部优化功能,所以请看下面事例:
>>> name1='lisi'
>>> name2='lisi'
>>> id(name1),id(name2)
(39517080L, 39517080L)
关于以上情况说明:
python内部有一个内部优化机制在一定范围内,如果赋给变量值一样会在内存中只创建一个空间来保存变量值,两个变量分别指向此值
python源码关于数字规定数字在-5至257范围内,如果变量赋值一样内置在内存中创建一个空间保存,超过范围会各自创建空间
例:
>>> i1=2
>>> i2=2
>>> id(i1),id(i2)
(30699040L, 30699040L)
>>> i1=700
>>> i2=700
>>> id(i1),id(i2)
(39594312L, 39594288L)
8、数据类型:
type() 查看变量类型
两部分:
1、单值
数字
整形 123
长整型
浮点型 3.14
复数 z = a + b
布尔值,True,False
1 0
字符串
%格式化:
name = "I am %s , age %d" % ("alex",73)
索引格式化:
name = "i am {0},age{1}"
name.format("alex",18)
索引
>>> name = 'alex'
>>> name[0]
'a'
>>> name[-1]
'x'
>>> name[:-1]
'ale'
>>> name[-1:]
'x'
>>> len(name)
4
>>> name[0:2]
'al'
len() 查看长度
name[-1] == name[len(name)-1]
print name.strip()去除空格
print name.lstrip()去除左面空格
print name.rstrip()去除右面空格
分割:
name ="alex,eric"
names.split(',')
["alex","eric"]
names = "alex 123 18"
names.split('\t')
从列表变成字符串:"_".join(name_lsit)注:""里面指定连接符
2、集合
列表 list []
name_list['alex','eric','john','hello']
追加一个元素:name_list.append('seven')在列表最后添加
删除元素:del name_list[0]
查看长度:len(name_list)
查看一元素是否在列表用: alex in name_list
元组 tuple ()
name_list1=("alex","eric")
元组与列表唯一区别是元组是不可修改,列表可修改
列表包含元组只能修改元组,但是不可以修改元组里面的元素
["alex",("seven","eric")]
字典,dict,键值对 {}
persion ={
"name": 'alex'
"age": '18'
}
查找字典里面元素:
persion['name']
例:
persion ={
"name": 'alex'
"age": '18'
}
for k,v in persion.items()
print k
print v
字典保存方式是无序的<特性>,特殊的for循环
persion.keys() 所有key
persion.values() 所有value
persion.items() 所有键值
9、循环
for循环:
name_list2 = ["age","b","c"]
for ele in name_list2
print ele
执行过程:
# 1,ele=age
# 2,ele=b
# 3,ele=c
for ele in name_list2
if ele == "age":
print "sb"
continue
if ele == "b":
print "找到"
break
解释第一次循环是age 已经匹配,遇到continue会重新下一次循环不再执行第二个if
continue只是跳出一层循环,break跳出整个循环
while:
while条件只有为真是才往下执行,为假不执行
格式:
while 条件:
print '1111'
while True:
print 'true' 死循环
10、文本初步操作:
文件里写,读
1、找到文件
文件路径 E:/log
2、打开文件
file_obj=flie(文件路径,模式)
打开文件的模式有:
r,以只读方式打开文件
w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
open
3、文件操作,读写
file_obj.read()#将所有读入内存
file_obj.readlines() [行,为元素的列表]#将所有读入内存,并按行分开
for line in file_obj.xreadlines():
print line
for line in file_obj:
#每次循环,只读一行。避免全部读入内存
file_obj.write()
file_obj.writelines()
4、文件关闭
file_obj.close()

浙公网安备 33010602011771号