1.Python语句中一些基本的规则和特殊字符
2.变量
变量无需事先声明,变量一旦被赋值就可以使用它;变量无需指定类型,对象的类型和内存占用都是运行时确定的,变量都是动态类型,无需指定变量的类型。
var = 1
print var
var = "hello"
print var
注意:程序员不用关心内存的管理,Python解释器承担内存管理的复杂任务,变量名会被回收。
del语句能够直接释放资源
3.导入模块
sys.stdout.write(‘hello world!\n‘)
print sys.platform
print sys.version
import PersonClass
s = PersonClass.Student("zhangzhe",25,60,2)
s.speak()
import PersonClass as Test
s = Test.Student("zhanghze",23,32,2)
s.speak()
from PersonClass import Student
s = Student("zhangzhe",25,60,2)
s.speak()
4.Pyhon新增的内建函数
ls1 = range(2,10,2)
print ls1 #[2, 4, 6, 8]
5.注释
#这是一段注释
#也可以在模块、类或者函数的起始添加一个字符串,起到在线文档的功能,这是Java程序员非常熟悉的一个特性。
"This is a doc string."
print "foo funtion called."
return True
6.数字
7.字符串
先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行 如: s1
= "hello,world"
如果要写成多行,那么就要使用\ (“连行符”)吧,如:
s2 = "hello,\
world"
s2与s1是一样的。如果你用3个双引号的话,就可以直接写了,如下:
s3 = """hello,
world,
hahaha.""",那么s3实际上就是"hello,\nworld,\nhahaha.", 注意“\n”,
所以, 如果你的字符串里\n很多,你又不想在字符串中用\n的话,那么就可以使用3个双
引号。而且使用3个双引号还可以在字符串中增加注释,如下:
s3 = """hello, #hoho, this is hello, 在3个双引号的字符串内可以有注释哦
world, #hoho, this is world
hahaha."”"
这就是3个双引号和1个双引号表示字符串的区别了,3个双引号与1个单引号的区别也是和这个一样的,实际上python支持
单引号是有原因的,下面我来比较1个单引号和 1个双引号的区别。 当我用单引号来表示一个字符串时,如果要表示 Let‘s go 这个字符串,必须这样: s4 = ‘Let\‘s go‘,注意没有,字符串中有一个‘,而字符串又是用‘来表示,所以 这个时候就要使用转义符 \ (\,转义符应该知道吧), 如果你的字符串中有一大堆 的转义符,看起来肯定不舒服,python也很好的解决了这个问题,如下: s5 = "Let‘s go" 这时,我们看,python知道你是用 " 来表示字符串,所以python就把字符串中的那 个单引号
‘ , 当成普通的字符处理了,是不是很简单。 对于双引号,也是一样的,下面举个例子 s6 = ‘I realy like "python"!’
8.操作符
算术操作符
+、-、*、/、//、%、**
/ 进行地板除法:传统除法是指两个操作数都是整型的话,他讲执行地板除法如果两个(取比商小的最大的整数)
// 浮点数除法:不管操作数是什么类型,浮点数除法总是执行真正的除法。
** 乘方操作符
比较操作符
逻辑操作符
9.元组和列表
列表用[]来表示 元组用()表示 元组可以看作是只读的列表。
10.字典
字典是Python中的映射数据。用{}来表示
键:可以是Python中的任意类型的对象 一般是数字和字符串
值:可以是任意类型的 Python对象
m = {‘a‘:1,‘b‘:2,‘c‘:3}
print (m)
print(m[‘a‘])
print(m.get(‘b‘))
m2= m.copy()
print (m2)
m2[‘a‘]=100
print (m2)
print (m)
print (m.keys())
print (m.values())
print (m.items())
m.pop(‘a‘)
print (m)
11.代码块及缩进对齐
代码块通过缩进对齐表达式逻辑,而不是使用大括号。因为没有额外的字符,程序的可读性更高。
12.if语句
x = -2
if x < .0: #如果表达式的值非零或者布尔值为True 则执行if_suit(代码组)
print "x<0"
elif x ==0:
print "x==0"
else:
print "x>0"
13.for循环和range()内建函数
for item in [‘hello‘,‘world‘,‘China‘]:
print item, #加逗号可以在同一行输出
x = ‘helo world‘
for index,ch in enumerate(x):
class Test(object):
for c in x:
print c,
x = ‘foo‘
for i in range(len(x)):
print x[i],‘(%d)‘ %i
print ch,‘(%d)‘ %(index)
14.列表解析
可以在一行中使用for循环将所有值放到一个列表当中。
square=[x*2 for x in range(4)]
print square
square=[x**2 for x in range(4)]
print square
square=[x*2 for x in range(4) if x%2==0 ]
print square
15.文件和内建函数open()和file()
import pickle
import struct
d = {‘a‘:1,‘b‘:2}
f = open(‘datafile.txt‘,‘wb‘)
pickle.dump(d,f)
f.close()
f = open(‘datafile.txt‘,‘rb‘)
e = pickle.load(f)
print e
f = open(‘data.bin‘,‘wb‘)
data = struct.pack(‘hhl‘,1,2,3)
f.write(data)
f.close()
f = open(‘data.bin‘,‘rb‘)
data = f.read()
values = struct.unpack(‘hhl‘,data)
print values
16.错误和异常
try:
list[2]/0
except IndexError:
print("indexError")
except ZeroDivisionError:
print("zeroDivisionError")
else:
print "no error"
finally:
print("finally")
#define custom exception
class LengthRequiredException(Exception):
def __init__(self,length,minLength):
Exception.__init__(self)
self.length = length
self.minLength=minLength
l = [1,2,3,4,5,6]
minLength = 6
try:
raise LengthRequiredException(len(l),minLength)
except IndexError:
print("index out of bounds")
except LengthRequiredException:
print("Length not fit:length is %d required %d")
else:
print("no exception was raised.")
finally:
print("finally will be execute”)
def __enter__(self):
print ("enter....")
return 1
def __exit__(self, exc_type, exc_val, exc_tb):
print("exit.....")
return True
with Test() as t:
print("t is not the result of test(), it is __enter__ returned")
print("t is 1, yes, it is {0}".format(t))
raise NameError("Hi there")
print("Never here")
17.函数
def AddMe2Me(x=20):
return (x + x)
print AddMe2Me()
x = 10
print AddMe2Me(x)
print AddMe2Me(‘Python‘)
AddMe2Me([1,‘abc‘])
18.类
类的私有属性:__private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问,在类内部的方法中使用时 self.__private_attrs
类的方法,在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
私有的类方法,__private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用,在类的内部调用slef.__private_methods
类的专有方法:
__init__ 构造函数,在生成对象时调用
__del__ 析构函数,释放对象时使用
__repr__ 打印,转换
__setitem__按照索引赋值
__getitem__按照索引获取值
__len__获得长度
__cmp__比较运算
__call__函数调用
__add__加运算
__sub__减运算
__mul__乘运算
__div__除运算
__mod__求余运算
__pow__称方
class People:
"People class doc."
#attribute
name = ‘‘
age = 0
__weight = 0
#method
def __init__(self,aName,aAge,aWeight):
self.name = aName
self.age = aAge
self.__weight = aWeight
def speak(self):
print("%s is speaking:I am %d years old." %(self.name,self.age))
单重继承
class Student(People):
#attribute
grade = 10
#method
def __init__(self,aName,aAge,aWeight,aGrade):
People.__init__(self,aName,aAge,aWeight)
self.grade = aGrade
def speak(self):
print("%s is speaking:I am %d years old. I am in grade %d." %(self.name,self.age,self.grade))
多重继承:需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。
class Speaker():
topic = ‘ ‘
name = ‘ ‘
def __init__(self,aTopic,aName):
self.name = aName
self.topic = aTopic
def speak(self):
print("I m %s,I am a speaker!My topic is %s." %(self.name,self.topic))
class Sample(Speaker,Student):
a = ‘‘
def __init__(self,aTopic,aName,aAge,aWeight,aGrade):
Speaker.__init__(self,aTopic,aName)
Student.__init__(self,aName,aAge,aWeight,aGrade)