- 变量名只能是字母,数字和下划线的任意组合(例如:me_name,__name__,name3)
- 变量的第一个字符不能是数字
- 不能用关键字作为变量名(比如:as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real')
- 变量名尽量简单易懂
- 数字
- 布尔值
- 字符串
- 列表
- 元组
- 字典
例子:
python可以处理非常大的整数:1000000000000000000L
普通整数不能大于2 147 483 647 (也不能小于-2 147 483 648),如果需要大数,可以使用长整型长整型数书写方法和普通整数一样,但是结尾有个Lname = input("name:")运行结果:
age = int(input("age:"))
job = input("job:")
msg='''
Infomation of %s:
name:%s
age:%s
job:%s
'''%(name,name,age,job)
print(msg)
print("Infomation of %s: name:%s age:%s job:%s" %(name,name,age,job))
创建列表
sample_list = ['a',1,('a','b')]
Python 列表操作
sample_list = ['a','b',0,1,3]
得到列表中的某一个值
value_start = sample_list[0]
end_value = sample_list[-1]
删除列表的第一个值
del sample_list[0]
在列表中插入一个值
sample_list[0:0] = ['sample value']
得到列表的长度
list_length = len(sample_list)
列表遍历
for element in sample_list:
print(element)
Python 列表高级操作/技巧
产生一个数值递增列表
num_inc_list = range(30)
#will return a list [0,1,2,...,29]
L.append(var) #追加元素
L.insert(index,var)
L.pop(var) #返回最后一个元素,并从list中删除之
L.remove(var) #删除第一次出现的该元素
L.count(var) #该元素在列表中出现的个数
L.index(var) #该元素的位置,无则抛异常
L.extend(list) #追加list,即合并list到L上
L.sort() #排序
L.reverse() #倒序
list 操作符:,+,*,关键字del
a[1:] #片段操作符,用于子list的提取
[1,2]+[3,4] #为[1,2,3,4]。同extend()
[2]*4 #为[2,2,2,2]
del L[1] #删除指定下标的元素
del L[1:3] #删除指定下标范围的元素
list的复制
L1 = L #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的
L1 = L[:] #L1为L的克隆,即另一个拷贝。
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 长度 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 串联 |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 重复 |
3 in (1, 2, 3) | True | 成员 |
for x in (1, 2, 3): print x, | 1 2 3 | 迭代 |
dictionary: 字典
dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。
键是唯一的,字典只认最后一个赋的键值。
dictionary的方法
D.get(key, 0) #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常
D.has_key(key) #有该键返回TRUE,否则FALSE
D.keys() #返回字典键的列表
D.update(dict2) #增加合并字典
D.popitem() #得到一个pair,并从字典中删除它。已空则抛异常
D.clear() #清空字典,同del dict
D.copy() #拷贝字典
D.cmp(dict1,dict2) #比较字典,(优先级为元素个数、键大小、键值大小)
#第一个大返回1,小返回-1,一样返回0
dictionary的复制
dict1 = dict #别名
dict2=dict.copy() #克隆,即另一个拷贝。
3、tuple:元组(即常量数组)
tuple = ('a', 'b', 'c', 'd', 'e')
可以用list的 [],:操作符提取元素。就是不能直接修改元素。
4、string: 字符串(即不能修改的字符list)
str = "Hello My friend"
字符串是一个整 体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。
子字符串的提取
str[:6]
字符串包含 判断操作符:in,not in
"He" in str
"she" not in str
string模块,还提供了很多方法,如
S.find(substring, [start [,end]]) #可指范围查找子串,返回索引值,否则返回-1
S.rfind(substring,[start [,end]]) #反向查找
S.index(substring,[start [,end]]) #同find,只是找不到产生ValueError异常
S.rindex(substring,[start [,end]])#同上反向查找
S.count(substring,[start [,end]]) #返回找到子串的个数
S.lowercase()
S.capitalize() #首字母大写
S.lower() #转小写
S.upper() #转大写
S.swapcase() #大小写互换
S.split(str, ' ') #将string转list,以空格切分
S.join(list, ' ') #将list转string,以空格连接
处理字符串的内置函数
len(str) #串长度
cmp("my friend", str) #字符串比较。第一个大,返回1
max('abcxyz') #寻找字符串中最大的字符
min('abcxyz') #寻找字符串中最小的字符
string的转换
oat(str) #变成浮点数,float("1e-1") 结果为0.1
int(str) #变成整型, int("12") 结果为12
int(str,base) #变成base进制整型数,int("11",2) 结果为2
long(str) #变成长整型,
long(str,base) #变成base进制长整型,
字符串的格式化(注意其转义字符,大多如C语言的,略)
str_format % (参数列表) �#参数列表是以tuple的形式定义的,即不可运行中改变
>>>print ""%s's height is %dcm" % ("My brother", 180)
#结果显示为 My brother's height is 180cm
list 和 tuple 的相互转化
tuple(ls)
list(ls)
luchk_number = 28
int_put = int(input("请输入数字:"))
if int_put == luchk_number:
print("你猜对了 ")
elif int_put > luchk_number:
print("你猜大了 ")
else:
print("你猜小了 ")
执行结果:- 算术运算符
- 比较运算符
- 赋值运算符
运算符
|
描述
|
实例 |
+
|
加:两个对象相加 | a + b 结果为 7 |
-
|
减:前面的数减掉后面的数
|
a - b 结果为 -3 |
*
|
乘:两个数的相乘的结果
|
a * b 结果为 10
|
/ |
除:前面的数除以后面的数的商
|
b / a 结果为 2.5
|
%
|
取模:前面的数除以后面的数的余数
|
b % a 结果为 1
|
**
|
幂:前面数的多少次方
|
a ** b 结果为 32 |
//
|
取整除:前面的数除以后面的数的商的整数部分
|
b // a 结果为 2
|
运算符 |
描述
|
实例
|
== | 等于:比较对象是否相等 |
(a==b)返回False
|
!=
|
不等于:比较两个对象是否不相等
|
(a!=b)返回True
|
> |
大于:返回x是否大于y
|
(a>b)返回False |
<
|
小于:返回x是否小于y
|
(a<b)返回True
|
>=
|
大于等于:返回x是否大于等于y
|
(a>=b)返回False
|
<=
|
小于等于:返回x是否小于等于y
|
(a<=b)返回True
|
运算符
|
描述
|
实例
|
=
|
简单的赋值运算符 | c=a+b将a加bdeepin运算结果赋值为c |
+=
|
加法赋值运算符
|
c+=a等效于c=c+a |
-=
|
减法赋值运算符
|
c-=a等效于c=c-a
|
*=
|
乘法赋值运算符
|
c*=a等效于c=c*a
|
/=
|
除法赋值运算符
|
c/=a等效于c=c/a
|
%=
|
取模赋值运算符
|
c%=a等效于c=c%a
|
**=
|
幂赋值运算符
|
c**=a等效于c=c**a
|
//=
|
取整除赋值运算符
|
c//=a等效于c=c//a
|
运算符
|
描述
|
&
|
按位与运算:一个为假即为假
|
|
|
按位或运算:一个为真即为真
|
^ |
按位异或运算:真真为假,假假为假,真假为真
|
~
|
按位取反:两个数相加的结果为 -1
|
<<
|
左移运算:向左移动x位,等同于乘以2的x次方
|
>>
|
右移运算:向右移动x位,等同于除于2的x次方
|
运算符 |
描述
|
实例
|
and
|
布尔值“与”,两个都为真才是真
|
(a and b)为True |
or
|
布尔值“或”,一个为真即为真
|
(a or b)为True
|
not
|
如果条件为真,则逻辑非运算符为假 | not(a and b)为False |
- 关系运算符
- 验证运算符
运算符 | 描述 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |
1. 字符编码简介
1.1. ASCII
ASCII(American Standard Code for Information Interchange),是一种单字节的编码。计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号。不过ASCII只用到了其中的一半(x80以下),这也是MBCS得以实现的基础。
1.2. MBCS
然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求。后来每个语言就制定了一套自己的编码,由于单字节能表示的字符太少,而且同时也需要与ASCII编码保持兼容,所以这些编码纷纷使用了多字节来表示字符,如GBxxx、BIGxxx等等,他们的规则是,如果第一个字节是x80以下,则仍然表示ASCII字符;而如果是x80以上,则跟下一个字节一起(共两个字节)表示一个字符,然后跳过下一个字节,继续往下判断。
这里,IBM发明了一个叫Code Page的概念,将这些编码都收入囊中并分配页码,GBK是第936页,也就是CP936。所以,也可以使用CP936表示GBK。
MBCS(Multi-Byte Character Set)是这些编码的统称。目前为止大家都是用了双字节,所以有时候也叫做DBCS(Double-Byte Character Set)。必须明确的是,MBCS并不是某一种特定的编码,Windows里根据你设定的区域不同,MBCS指代不同的编码,而Linux里无法使用MBCS作为编码。在Windows中你看不到MBCS这几个字符,因为微软为了更加洋气,使用了ANSI来吓唬人,记事本的另存为对话框里编码ANSI就是MBCS。同时,在简体中文Windows默认的区域设定里,指代GBK。
1.3. Unicode
后来,有人开始觉得太多编码导致世界变得过于复杂了,让人脑袋疼,于是大家坐在一起拍脑袋想出来一个方法:所有语言的字符都用同一种字符集来表示,这就是Unicode。
最初的Unicode标准UCS-2使用两个字节表示一个字符,所以你常常可以听到Unicode使用两个字节表示一个字符的说法。但过了不久有人觉得256*256太少了,还是不够用,于是出现了UCS-4标准,它使用4个字节表示一个字符,不过我们用的最多的仍然是UCS-2。
UCS(Unicode Character Set)还仅仅是字符对应码位的一张表而已,比如”汉”这个字的码位是6C49。字符具体如何传输和储存则是由UTF(UCS Transformation Format)来负责。
一开始这事很简单,直接使用UCS的码位来保存,这就是UTF-16,比如,”汉”直接使用x6Cx49保存(UTF-16-BE),或是倒过来使用x49x6C保存(UTF-16-LE)。但用着用着美国人觉得自己吃了大亏,以前英文字母只需要一个字节就能保存了,现在大锅饭一吃变成了两个字节,空间消耗大了一倍……于是UTF-8横空出世。
UTF-8是一种很别扭的编码,具体表现在他是变长的,并且兼容ASCII,ASCII字符使用1字节表示。然而这里省了的必定是从别的地方抠出来的,你肯定也听说过UTF-8里中文字符使用3个字节来保存吧?4个字节保存的字符更是在泪奔……(具体UCS-2是怎么变成UTF-8的请自行搜索)
另外值得一提的是BOM(Byte Order Mark)。我们在储存文件时,文件使用的编码并没有保存,打开时则需要我们记住原先保存时使用的编码并使用这个编码打开,这样一来就产生了许多麻烦。(你可能想说记事本打开文件时并没有让选编码?不妨先打开记事本再使用文件 -> 打开看看)而UTF则引入了BOM来表示自身编码,如果一开始读入的几个字节是其中之一,则代表接下来要读取的文字使用的编码是相应的编码:
BOM_UTF8 ‘xefxbbxbf’
BOM_UTF16_LE ‘xffxfe’
BOM_UTF16_BE ‘xfexff’
并不是所有的编辑器都会写入BOM,但即使没有BOM,Unicode还是可以读取的,只是像MBCS的编码一样,需要另行指定具体的编码,否则解码将会失败。
关于open 模式:
w 以写方式打开,
a 以追加模式打开 (如果文件不存在则创建新文件)
r 以读写模式打开
w+ 以写模式打开
a+ 以追加和读的模式打开
r+ 以读写模式打开,和追加的效果是一样的,但是如果文件不存在,则会报错
rb/wb/ab 以二进制读模式打开,如果需要跨平台,一定要加上b
文件其他方法:
f.moed 显示文件打开格式
f.flush() 把缓冲区的数据刷到硬盘
f.read() 把文件一次性读入内存
f.readline() 读一行内容
f.readlines() 把文件都读入内存,并且每行转成列表中的一个元素
f.tell() 显示程序光标所在该文件中的当前的位置
f.seek() f.truncate(10)从文件开头截取10个字符,超出的都删除
f.writelines() 参数需要为一个列表,将一个列表中的每个元素都写入文件
f.xreadlinses() 以迭代的模式循环文件,在处理大文件时效率极高,只记录文件开头和结尾,每次循环一次,只读取一行。