**python**
# python简史
蟒蛇:解释性的,面向对象的带有动态语义的程序设计语言
创建者:Guido van Rossum
# CNRI时期 python 1.5
# BeOpen时期 python 1.6
# DC时期, Digital Creations 使用python开发了Zope系统
# python 3.0
2010年获得Tiobe编程语言大奖
# python特性
脚本语言
高阶动态编程语言
简单易学
解释性&编译性:不需要变异成二进制,但是需要解释器, 也可以进行编译,速度更快
面向对象:及支持面向过程编程又支持面向对象的编程
可扩展性挤可嵌入性,可以嵌入到c/c++程序,提供脚本功能,部分程序也可以用c或者c++编写
可移植性:所有程序无需任何修改即可运行在任何平台
丰富的库:密码系统,GUI, TK,文档生成,单元测试,线程,CGI, 电子邮件
其他高质量库:wxPython, Twisted, Python图像库等等
自动化的内存管理
免费,开源
---> 胶水语言
# python应用
google web爬虫,搜索引擎
yahoo, 管理讨论组
youtobe, 分享服务
豆瓣,前台+后台+服务器都用的是python
文件类型
==================================================
源代码: 以.py为扩展名,有python程序解释,不需要编译
字节代码:编译后生成扩展名为.pyc的文件
import py_compile
py_compile.compile("hello.py")
优化代码:经过优化的源文件, 扩展名为.pyo
以上三种均可直接运行
/1.py
print("hello, world")
运行 python 1.py
==> hello, world
/2.py
import py_compile
py_compile.compile('1.py')
生成文件__pycache__/1.cpython-33.pyc
运行 python 1.cpython-33.pyc
==> hello, world
生成优化代码:
运行 python -O -m py_compile 1.py
生成文件__pycache__/1.cpython-33.pyo
运行 python 1.cpython-33.pyo
==> hello, world
python变量
===========================================
>>a1 = 123
>>a2 = 123
>>id(a1)
505912912
>>id(a2)
505912912
于c语言不通,c语言给变量名开辟空间,存放数值,python则相反,数值是存在内存中的
不同变量可以指向同一地址空间的数值
python运算符&表达式
=============================================
赋值运算符
-----------------------
= += -= *= /= %=
算数运算符
-----------------------
+ - * / //(整数除法) %(求余) **(求幂)
>> 4/3
1.33333333333333
>> 4//3
1
关系运算符
-----------------------
< > <= >= != ==
>> a = 1
>> b = 1.0
>> a == b
true
>> a = "hello"
>> b = "hello"
>> a == b
true
逻辑运算符
------------------------
and or not
优先级(低到高)
================================
或 or
与 and
非 not
成员:in, not in
同一性:is ,is not
< , <=, >, >=, !=, ==
按位或 |
按位异或 ^
按位与 &
移位 << , >>
+, -
*, /, %
正负号 +x, -x
按位翻转 ~x
指数 **
数据类型
=======================
# 数字类型
2.x版本中分为:整型,长整型,浮点型,复数型
3.x版本中氛围:整型,浮点型,复数型
可以用type函数查看类型
>> a = 111
>> type(a)
int
>> a = 1.23
>> type(a)
float
>> a = 12j
>> type(a)
complex
# 字符串类型
>> "let's go" #正确
>> 'let's go' #错误
转义
>> a = "let's \"go\""
>> print(a)
let's "go"
换行 \n
不使用换行,使用三重引号 ''' xxxxxxx '''
>> str = 'abc'
>> str[0]
a
>> str = "abc"
>> str[0]
a
切片&索引 操作:
>> a = "123456"
>> a[1:4]
1234
>> a[2:]
3456
>> a[:4]
1234
>> a[-1]
6
>> a[::1] 间隔0个一取
123456
>> a[::2] 间隔1个一取
135
>> a[:]
123456
>> a[::]
123456
# 序列
列表,元组,和字符串都是序列
序列的两个主要特点:索引操作符和切片操作符
# 序列的基本操作:
len()
>> len("abcdef")
*
>> 5*"a"
+
>> "abc" + "bcd"
in
>> "a" in "abc"
max()
>> max("adfe")
f
min()
>> min("dfa")
a
cmp(tuple1, tuple2)
tuple1> tuple2 ==> 1
tuple1< tuple2 ==> -1
tuple1 = tuple2 ==> 0
cmp("abc", "123") ?
cmp 在3.x版本中不存在
元组
元组和列表十分相似,只不过元组和字符串一样是不可变的,即不能修改
通常用在使用语句或者用户定义的函数,能够安全的采用一组值的时候
创建元组()
空元组 a = ()
含有单个元素的元组 a = ("a",)
一般的元组 a = ("a", "b")
>> a = ()
>> b = (2,)
>> c = (1,2)
>> type(a) ==> tuple
>> type(b) ==> tuple
>> type(c) ==> tuple
错误的写法
>> d = (2)
>> type(d) ==> int
>> d = ("ss")
>> type(d) ==> str
元组的值不能修改
>> a = (2,3)
>> a[1] = 4 #报错TypeError: 'tuple' object does not support item assignment
赋值
>> name,age,sex = ("zhang", 20, "man")
>> name ==> "zhang"
>> age ==> 20
>> sex ==> "man"
#列表list[]
列表元素可变
>> a = [1]
>> type(a) ==> list
基本操作
索引 list[index]
切片 list[:]
添加 list.append()
查找 var in list
删除 list.remove() #删除第一个出现的元素
>> a = [1,2,3,2]
>> a.remove(2) ==> [1,3,2]
系统方法del
>> del(a[0]) ==> [3,2]
注意:列表重新赋值后,地址空间不变
>> list = [1, 3]
>> id(list) => 85445
>> list[0] = 2
>> id(list) => 85445