python基础1

一 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"
elseprint "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()



 

posted @ 2015-10-31 10:54  杰希  阅读(179)  评论(0编辑  收藏  举报