1. 定义常量:
因为Python的常量相对其他语言,可能略显麻烦。不仅仅只是单靠const就可以完成常量定义的。在Python中定义常量需要用对象的方法来创建。
我们需要在Lib的目录下创建一个const.py的文件,lib目录下主要是放一些模块的东西。
class_const(object):class ConstError(TypeError):pass
def __setattr__(self, name, value):if self.__dict__.has_key(name):raise self.ConstError, "Can't rebind const (%s)" %name
self.__dict__[name]=valuedef __delattr__(self, name):if name in self.__dict__:raise self.ConstError, "Can't unbind const (%s)" %nameraiseNameError, nameimportsys
sys.modules[__name__] = _const()
这就是一个定义常量对象的方法,Python定义常量首先需要有对象的概念,所以上面我们已经简单了解了对象的定义了。至于上面这个const类呢,大家略看一下就可以了,这种东西百度搜索Python定义常量一大堆。我们只需要在lib文件夹下面建立一个const.py的文件,将上述代码拷贝到const.py文件里。这样使用常量就很方便了。
#encoding=utf-8
import const #导入常量文件
const.value=3 #声明常量
print(const.value)
const.avc=4
print(const.avc)
const.avc=5 #试图改变常量的值,报错
2. 数的类型:
整数型(int) 例:0、6、-2、2015、-203
长整型(long) 例:56990l、-12694l、938476l
浮点型(float) 例:7.5325、9.434、6.66
布尔型(bool) 例:True、False
复数型(complex) 例:6+4j、-5+12j、98+9j
complex()函数可以使用参数real(实部) + imag(虚部)*j方式创建一个复数。也可以转换一个字符串的数字为复数;或者转换一个数字为复数。如果第一个参数是字符串,第二个参数不用填写,会解释这个字符串且返回复数;不过,第二个参数不能输入字符串方式,否则会出错。real和imag参数可以输入数字,如果imag参数没有输入,默认它就是零值,这 个函数就相当于int()或float()的功能。如果real和imag参数都输入零,这个函数就返回0j。有了这个函数,就可以很方便地把一个列表转 换为复数的形式。
注意:当想从一个字符串的复数形式转换复数时,需要注意的是在字符串中间不能出现空格,比如写成complex(‘1+2j’),而不是写成complex(‘1 +2j’), 否则会返回ValueError异常。
#encoding=utf-8
print(complex(1)) #第二个参数不填,默认为0j
print(complex("2")) #第一个参数为字符串,第二个参数不用填写,填写报错
print(complex('2'))print(complex('''2'''))print(complex("""2"""))print(complex("2+3j")) #“ 2+3j ”中加号的两边不能有空格否则报错,错误写法"2+ 3j","2 + 3j","2 +3j"
print(complex(3,4))
array= [1,3,5,7]for i inarray:print(complex(i,i+1))
结果:
(1+0j)
(2+0j)
(2+0j)
(2+0j)
(2+0j)
(2+3j)
(3+4j)
(1+2j)
(3+4j)
(5+6j)
(7+8j)
3. 字符串类型:
单引号字符串:'hello'
双引号字符串:"hello"
三引号字符串:"""hello"""或'''hello'''
注:三引号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号("""...""")中可以包含单引号, 三引号('''...''')可以包含双引号,而不需要转义。
#encoding=utf-8
str0='str0 "str0" """str0"""' #单引号中使用双引号会被保留下来,不需要转义,但是不能使用单引号
print("str0 {0}".format(str0))
str1="str1 'str1' '''str1'''" #同理双引号中使用单引号也会被保留下来,但是不能使用双引号
print("str1 {0}".format(str1))
str2="""str2 "str2" 'str2'
str2
str2""" #使用三引号可以保留下格式来 但是要保证前后对称
print("str2 {0}".format(str2))
str3="""str3
str3
str3""" #使用三引号可以保留下格式来
print("str3 {0}".format(str3))
结果:
str0 str0 "str0" """str0"""str1 str1'str1' '''str1'''str2 str2"str2" 'str2'str2
str2
str3 str3
str3
str3
4. 转义符和换行符:
#encoding=utf-8
str='I\'m wms' #转义字符和别的语言差不多,都是用 \
print(str)
str="下面换行\n真换了" #换行符使用 \n
print(str)
结果:
I'm wms
下面换行
真换了
5. 自然字符串和字符串重复:
自然字符串字面意思理解就是将字符串保留本身的格式,而不受转义的影响。
字符串重复字面意思理解就是将字符串重复输出。
#encoding=utf-8
str=r'I\'m wms' #自然字符串输出,字符串前加上 r
print(str)
str="下面换行\n真换了" #非自然字符串输出就会解释转义字符
print(str)
str="重复输出,"*3 #重复输出3次
print(str)
结果:
下面换行
真换了
重复输出,重复输出,重复输出,
6. 子字符串:
索引运算符从0开始索引
切片运算符[x:y]是指从第x下标开始到第y-1下标
#encoding=utf-8
str='test index's1=str[0] #获取索引为0的子字符串
print("s1: {0}".format(s1))
s2=str[8] #如果索引超过字符串长度,则报错
print("s2: {0}".format(s2))
s3=str[:3] #冒号前的参数不填,表示索引从0开始到冒号后的x-1位
print("s3: {0}".format(s3))
s4=str[3:6] #索引从冒号前一位到后一位减一的子字符串
print("s4: {0}".format(s4))
结果:
s1: t
s2: e
s3: tes
s4: t i
7. 数据类型:
基本数据类型:基本数据类型就是之前我们讲到的数和字符串,这里就不介绍了。
列表:python里没有数组的概念,列表和数组的概念很接近。列表是用来存储一连串元素的容器,用[]表示。
元组:同样元组合数组的概念也很接近,用()表示。另外元组只能读取不能修改。
集合:
格式:set(元素),python的set是一个无序不重复元素集。
功能:
建立关系
消除重复元素
字典:Python中的字典也叫关联数组,用{}表示。例: dictionary={'name':'toutou',"age":"26","sex":"male"} ps:是不是觉得有点儿像json?
#encoding=utf-8#列表
person=["张三","王五","李四"] #大小在声明的时候就确定了
person[2]="lisi" #能改变已有索引处的值#person[3]="赵六" #该索引超出列表范围,报错
print(person[2])#元组
names=("张三","王五","李四")#names[2]="lisi" #元组不允许修改
print(names[0])#集合
x=set('12333的') #此处的字符串并不代表将字符串整个存入,而是将其全部拆分成一个一个的字符,并去除重复项,汉子按照编码拆分
x.add("456")
x.add("de")
x.add("的")#x.remove('44') #要移除的不存在,则报错
x.remove('de')
x.discard("dfd") #要移除的元素存在则移除,不存在也不报错
printx
y=set("3456")print "x:{0}".format(x)print "y:{0}".format(y)#交集
print "交集: {0}".format(x&y) #x&y = x.intersection(y) #两个集合中都存在的元素#并集
print "并集:{0}".format(x|y) #x|y = x.union(y) #将两个集合中的元素合并,去除重复项#差集
print "差集(x-y):{0}".format(x-y) #x-y = x.difference(y) #以"-"右边的集合为主,去除两个集合交集中的元素
print "差集(y-x):{0}".format(y-x)
x.pop()#随机删除一个元素
x.clear() #清空set集合#字典
dictionary = {"name":"wms",'age':23,'sex':"男"}print dictionary["name"]
dictionary["school"]='tianjin' #向字典中添加项目
print dictionary["age"]print dictionary["school"]
结果:
lisi
张三
set(['\x84', '\xe7', '\xe7\x9a\x84', '456', '1', '3', '2', '\x9a'])
x:set(['\x84', '\xe7', '\xe7\x9a\x84', '456', '1', '3', '2', '\x9a'])
y:set(['3', '5', '4', '6'])
交集: set(['3'])
并集:set(['\x84', '\xe7', '\xe7\x9a\x84', '456', '1', '3', '2', '5', '4', '6', '\x9a'])
差集(x-y):set(['\x84', '\xe7', '\xe7\x9a\x84', '456', '1', '2', '\x9a'])
差集(y-x):set(['5', '4', '6'])
wms23tianjin
8. 标识符:
在日常生活中,标示符是用来指定某个东西、人,要用到它,他或她的名字;在数学中解方程时,我们也常常用到这样或那样的变量名或函数名;在编程语言中,标识符是用户编程时使用的名字,对于变量、常量、函数、语句块也有名字;我们统统称之为标识符。
标识符命名规范:
必须只能是字母或下划线开头,不能是数字或者其他字符开头
除第一个开头字符外,其他部分可以是字母或者下划线或者数字
标识符大小写敏感,比如name和Name是不一样的标识符
特殊标识符:python中的关键字是指系统中自带的具备特定含义的标识符。常用的python关键字主要 有:and,elif,global,or,else,pass,break,continue,import,class,return,for,while... 常用的python关键字很多与其他语言类似的,我们在命名时应尽量避免与关键字重复。大家也不用担心怕不好区分,其实也很好区分,一般的IDE中关键字 是会显示出特定颜色的。
9. 对象:
Python对象类型:Pyhon的内置对象:数字、字符串、列表、元组、字典、集合等等,在Python中,一切都可以看做是对象。
Pickle模块:在Python中有时有一些对象需要持久性存储,并且不丢失这个对象的类型与数据,就需要将这些对象进行序列化,序列化之后需要使用时,再恢复为原来的数据。这种序列化的过程,就叫pickle(腌制)。
#encoding=utf-8#pickle 模块化(腌制)
importpickle#dumps(object) 序列化对象
x=["one","two","three"]
y=pickle.dumps(x)print "dumps(x) 序列化为:{0}".format(y)#loads(object) 反序列化
z=pickle.loads(y)print "loads(y) 反序列化为:{0}".format(z)#pickle.dump(object,file,True) 将对象序列化写入文件#此处的文件名字没有特殊要求,文件时存放在项目的根目录下的
wirteFile = file("test01.txt","wb") #这里的"wb","rb"也可以使用"w","r","wb"表示写二进制文件,"w"表示写文本
pickle.dump(x,wirteFile,True)
wirteFile.close()#关闭文件流#pickle.loads(object,file) 将dump存储在文件中的对象反序列化
readFile = file("test.txt","rb")
temp=pickle.load(readFile)print "从文件中读取的反序列化对象:{0}".format(temp)
readFile.close()
10. 行与缩进:
物理行与逻辑行:
物理行:实际中看到的行。python中一个物理行一般可以包含多个逻辑行,在一个物理行中编写多个逻辑行的时候,用分号隔开。一个逻辑行后面必 须有一个分号,注意,在实际程序中,如果一个逻辑行占了一个物理行的最后,这个逻辑行也可以省略分号。(省略规则:每个物理行默认自带一个分号,so,每 个物理行的最后一个逻辑行可以省略分号,故:当一个逻辑行占了一个物理行的时候即可省略分号。)
逻辑行:一段代码意义上的行数
行连接:行连接相关讲解参见代码讲解图。
缩进:在上面, 有朋友提到python语言是"靠缩进控制代码的语言"。的确如此,在python中,逻辑行的起始位置的空白是有语法规定的,如果空白不对,程序就会执 行出错。(这一点是和其他语言很大的一个不同点。)一般情况下(if/while..等等后面的逻辑行除外),单独的逻辑行起始位置不应该有空白。缩进的 方法有两种,可以按空格,也可以按tab键。(一般IDE会自动缩进。)关于缩进可能刚入门起来有点不适应或者不习惯,多试试就好了。
#encoding=utf-8#物理行与逻辑行#以下是2个物理行
print "物理行1" #每个物理行结尾默认带上一个分号";"
print "物理行2"
#以下是1个物理行,2个逻辑行
print "逻辑行1";print "逻辑行2" #此处连着写两个物理行,中间不加分号就报错#以下是1个逻辑航,2个物理行
print '''你说
我是
物理行还是逻辑行?''' #物理行使用三个引号,换行时不需要使用行连接符"\"#行连接
print "我是行连"\"接"
结果:
物理行1
物理行2
逻辑行1
逻辑行2
你说
我是
物理行还是逻辑行?
我是行连接