一 python与C的区别
c--代码编译直接得到机器码,机器码直接在处理器执行
Python--代码编译得到字节码,虚拟机直接执行字节码并转换成机器码,然后再次在处理器上执行
优点:Python类库多而且十分简洁
缺点:运行慢
二 Python种类:
1.Cpython--用C实现的python,将python编成python字节码(使用最广泛)
2.Jpython--用java实现的python,拿到python的源码后编译成java的字节码,然后再来执行
3.Rubypython---用ruby实现的python
4.PyPy---使用Python实现的Python,将python的字节码进行处理,执行起来更快
三 安装Python
1.windows环境下
1.下载包:https://www.python.org/downloads/
2.安装,C:\python27/
3.环境变量的配置
2.Linux环境下
1.python内部执行过程:加载内存-->词法分析--语法分析---编译--字节码
四 编码(ASSII码、Unicode、UTF-8)
1.ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
2.Unicode(统一码、万国码、单一码)
是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,至少2个字节16位
特点:能表示中文,但是不能读到硬盘上
3.UTF-8,
是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
特点:节省了硬盘空间,所有的英文采用1个字节即8位存,中文就用3个字节即24位存,避免了空间的浪费
注:此处说的的是最少2个字节,可能更多
五 python集体实践
1.
#!/usr/bin/env python
print "你好,世界"
报错:ascii码无法表示中文
改正:应该显示的告诉python解释器,用什么编码来执行源代码,
注释:
1.单行注释
#
2.多行注释(用三个引号进行多行注释)
"""
......
"""
参数
模块
1.sys模块(系统内置模块)---sys.argv捕获执行python脚本传入的参数
eg:
#vim hello.py #!/usr/bin/env python # -*- coding:utf-8 -*- import sys #导入模块 print sys.argv #调用模块,捕获并打印解释器后面跟的参数
执行:
[root@localhost ~]# python test.py haha
['test.py', 'haha'] #两个参数,存储在一个容器当中然后被打印出来
字节码:
2.自定义模块
#vim m.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
print "hello"
#vim hello.py
.............. import sys #导入模块 print sys.argv #调用模块,捕获并打印解释器后面跟的参数 import m #导入m模块,使用m里面的功能
执行后# python hello.py,会生成m的.pyc字节码文件(m.pyc),即编译m.py后生成的文件
变量:其实就是:指向、引用、软链接--代指内存里某个地址保存的内容,其实就是某个地址内的内容的快捷方式
1.声明变量、变量赋值
变量名 = "字符串"
2.变量命名的规则:
1.变量名只能是字母、数字或下划线的任意组合
2.变量名的第一个字符不能是数字
3.以下关键字不能声明为变量名
['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']
eg:当两个不同的变量name1、name2指向同一个内存地址时,修改一个变量name1,则另外一个变量name2不会改变
>>> name1="hello" >>> name2=name1 当修改name1时,name2的值不会改变 >>> name1="123" >>> name1 '123' >>> name2 'hello'
注意:C语言没有字符串,只有字符,所以C语言的字符串通过连续的字符数组实现
python里的字符串,在C语言里面是通过字符数组['h','e','l','l','o']来保存的,当修改字符串的时候,python就会重新开辟、创建一个字符数组,而不是在原来的基础上添加。
如:"hello"+"world"+"ok",就开辟了3段内存空间:
1."hello"
2."hello world"
3."hello world ok"
新开辟的3段内存,最终会由python的虚拟机垃圾回收器自动回收,而不会造成内存泄露。C语言要手动释放。
python默认的缓冲池:-5 - 257,
输入输出:
1.raw_input() :输入函数
eg:
raw_input("请输入内容:")
eg:赋值
name=raw_input("请输入内容:")
模块:
2.getpass 模块:让用户输入的内容不可见(一般写用户登录界面书写密码使用)
eg:
import getpass
pwd=getpass.getpass(">>>")
print pwd
流程控制:
1.if else语句
eg:单条件的流程控制
name = raw_input("请输入用户名:") if name == "alex" : #值与值进行对比,而不是内存地址对比,采用"==" print "log in success" else: print "log in failed"
注意:
==是比较两个变量的值相同
is是比较两个变量在内存中的地址相同
eg:多条件的流程控制
if name == "eric" : print "普通" elif name == "tony" : print "超级" elif name == "alex" : print "超神" else: print "*****"
eg:
import getpass name = raw_input("请输入用户名") pwd = getpass.getpass("请输入密码:") if name == "alex" and pwd =="123": print "登录成功" else: print "登录失败"
数据类型:
1.单值
数字
整型、长整型、浮点型、复数
字符串
占位符:%s,%d
eg:%s占位符,调用---%'alex'
>>> name="i am %s" %'tanjie'
>>> print name
i am tanjie
eg:%d占位符,调用---%("alex",12)
字符串格式化的2种格式:
>>> message="i am %s ,age %d" %("tanjie",21) #只在内存里面分配1次,而+要分配2次
>>> print message
i am tanjie ,age 21
或
>>> name = "i am %s,age %d"
>>> name %("alex",21)
'i am alex,age 21'
或
>>> message = "i am {0},age {1}"
>>> message.format("tanjie",21)
'i am tanjie,age 21'
eg:打印多行
print """
a
b
c
d
"""
eg:字符串切片
name = "alex"
print name[0] #打印第一个字符
print name[0:2] #只打印小于第二个的字符(左边包含,右边不包含)
print name[0:] #打印到结尾的字符串
print name[-1] #打印最后一个字符
print name[:-1] #打印开头到倒数第二个字符(左边包含,右边不包含)
eg:打印最后一位字符
name = "tanjie"
print len(name) #返回name的长度
print name[len(name)-1] #打印最后一位的字符
eg:去除字符串两头的空格
>>> name=" tanjie "
>>> name.strip() #去除两头的空格
'tanjie'
>>> name.lstrip() #去除左边的空格
'tanjie '
>>> name.rstrip() #去除右边的空格
' tanjie'
eg:字符串分割,并以列表的形式返回
>>> name="tanjie,wangning"
>>> name.split(",")
['tanjie', 'wangning'] #表示按","对name字符串进行分割
若要按tab键分割,使用:name.split('\t');
若要按空格分割,使用:name.split(' ');
布尔值:True / False
1.type(TYPE) 查TYPE的类型
2.id(VALUE) 查看VALUE的地址
2.集合
列表
创建列表:
>>> name_list=['tanjie','wangning','lilin']
或
name_list=list(['tanjie','wangning','lilin'])
调用:
name_list[0]
name_list[1]
name_list[-1]
追加:修改、追加列表元素,列表在内存中的地址不会改变的
>>> name_list.append("tanqi")
删除:
del name_list[0] #删除列表中的第一个元素
列表长度:
len(name_list)
将列表变成字符串,并以_隔开,返回改变后的字符串
"_".join(name_list)
eg:
>>> " ".join(name_list)
'tanjie wangning lilin'
>>> "".join(name_list)
'tanjiewangninglilin'
>>> "-".join(name_list)
'tanjie-wangning-lilin'
判断某元素是否在列表里面,返回布尔值
"tanjie" in name_list
eg:
>>> "tanjie" in name_list
True
元组---元组不可修改,列表可修改
创建元组
tuple=("tanjie","lilin")
若列表中有元组:
[
"lilin",("tanjie","tanqi")
]
这里可以直接删除"lilin"和("tanjie","tanqi"),但不可以对元组("tanjie","tanqi")进行修改
字典---也称为键值对
创建字典
eg:
>>> person={
... "name":'tanjie',
... "age":21,
... "gender":'man'
... }
查找字典里面的元素:
eg:
person["name"]
字典内循环:
1.
eg:
for ele in person : print ele #打印的ele只是字典里面的键key
2.person.items()的使用----获取到所有的元素
eg:
for k,v in person.items(): #将字典里面的键赋值给key,值赋值给v print k print v print "======"
3.person.keys()--获取到字典内的所有的key,用列表封装
使用同person.items()
4.person.values() ---获取到字典内所有的value,使用列表封装
使用同person.items()
str、list、tuple
共同点:
1.都可以切片
2.都有索引(特殊的:-1)
3.都有长度:len()
4.循环
1.for循环
eg:。打印的是列表中的所有元素
name_list = ["alex","seven","eric"] for ele in name_list : print ele
eg:break的使用
name_list = ["alex","seven","eric"] for ele in name_list : if ele == "alex": print "%s is here" %(ele) break #找到后跳出整个循环 else: pass #pass表示:略过,不执行
eg:continue的使用
name_list = ["alex","seven","eric"] for ele in name_list : if ele == "alex": print "%s is here" %(ele) continue #跳过本次循环,不执行下面的代码,进入下一次循环 if else == "eric" print "%s is here" %(ele) else: pass #pass表示:略过,不执行
2.while循环
while 条件 : #若条件为真执行...
....
while True: #死循环
....
while 1==1: #死循环
....
eg:
不同点:
str修改后,str会在内存中重新开辟空间,内存地址改变
而list修改后内存地址不会改变,tuple不能修改
运算:
>>> 5/2
2
>>> 5%2
1
>>> 2**10
1024
>>> 5.0/2
2.5
文本操作(读、写):
流程:找到文件---打开文件---文件操作--关闭文件
1.找到文件:
2.打开文件:
file(参数1,参数2) 参数1:文件路径;参数2:模式
模式有:
1.r,以只读模式打开
2.w,打开文件,只用于写入。eg:'r+':可读、可写;
3.a,打开一个文件,用于追加
eg:
file_obj = file(文件路径,'r+')
file_obj.read() #将所有内容读入内存
file_obj.readlines() #得到以行为值的列表
file_obj.xreadlines()
eg:
for line in file_obj.xreadlines():
print line
或
for line in file_obj: #每次循环只读一行,避免一次性全部读入内存
print line
file_obj.write()
file_obj.writeline()
3.文件操作:
4.文件关闭
file_obj.closed()