Python基本语法

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]=value
def __delattr__(self, name):
if name in self.__dict__:
raise self.ConstError, "Can't unbind const (%s)" %name
raise NameError, name
import sys
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 in array:
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是一个无序不重复元素集。
      • 功能:
      1. 建立关系
      2. 消除重复元素
  • 字典: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") #要移除的元素存在则移除,不存在也不报错
print x
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'])
wms
23
tianjin

8. 标识符:

  在日常生活中,标示符是用来指定某个东西、人,要用到它,他或她的名字;在数学中解方程时,我们也常常用到这样或那样的变量名或函数名;在编程语言中,标识符是用户编程时使用的名字,对于变量、常量、函数、语句块也有名字;我们统统称之为标识符。
标识符命名规范:
  1.  必须只能是字母或下划线开头,不能是数字或者其他字符开头
  2. 除第一个开头字符外,其他部分可以是字母或者下划线或者数字
  3. 标识符大小写敏感,比如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 模块化(腌制)
import pickle
#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
你说
我是
物理行还是逻辑行?
我是行连接

 



 


 

posted @ 2016-03-30 22:11  请叫我大表哥  阅读(351)  评论(2编辑  收藏  举报