ptyhon :通用、开源、跨平台、多模式的脚本语言
and not (age<4 or age>8):
print("take it")
sys.stdout.write("enter your name:") #将数据输出屏幕
交集t&s
差集t-s
对称差集t^s(项在t或者s中,但不会同时出此案在而这种
t.add() 添加一项
t.update([ , , ,])添加多项
t.remove() 删除一项
b.创建一个空字典的方式
stock={}
stock=dict()
c.使用in运算符可以测试某个内容是不是字典成员
if 'name' in stock:
p=stock['name']
else:
p='aaa'
或p=stock.get(''name','aaa')
d.获取一个字典关键字列表,将字典转换为列表即可
s=list(stock)
字典是python解释器中最完善的数据类型,因此,如果只是要在程序中存储和处理数据,使用字典比
自定义数据结构要好得多
a=range(8,1,-1) #a=8,7,6,5,4,3,2
b.让函数返回多个值,可使用元组,可以很容易地将结果放到单独变量中
a,b=hanshu()
c.在函数中创建变量或给变量赋值是,该变量的作用于是局部的,当函数返回之后会立即销毁该变量
要在函数内部修改某个全局变量的值,可以使用global语句
例:count=0
def foo():
global count
count+=1
使用yield语句,可以让函数生成一个结果序列,调用生成器函数创建一个对象,该对象通过连续调用__next__()方法
生成结果序列
例:
在面向对象的编程中,class语句用于定义新的对象类型
可使用try和except语句捕捉并处理异常
导入:import 模块名(文件名)
使用不同的名称导入模块:import 文件名 as 新模块名
将具体的定义导入到当前命名空间:from 文件名 import 具体定义
把模块的所有内容加载到当前命名空间:from 文件名 import *
列出模块的内容:import 文件名 ;dir(文件名)
IPO模式
“死循环”程序可测试CPU的性能交互模式:输入任意合法的语句或语句序列,可立即查看结果,特殊变量_用于保存最后一次运算结果
- 输入Input
- 处理Pocess
- 输出Output
变量和算数表达式:
- python是一种动态类型的语言,变量名称无类型,赋值运算符的作用是在名称和值之间创建一种关联
- 换行代表一条语句结束,也可以在同一行上使用分号来隔开多条语句
- while语句的循环主体由缩进表示,python不会指定缩进两,只要在一个代码块中保持一致即可
- 字符串格式化运算符%:
- print("%3d,%0.2f"%(a,b))
- print(format(a,"3d"),format(b,"0.2f"))
- print("{0:3d} {1:0.2f}".format(a,b))冒号前的数字代表传递给format()方法的相关参数,冒号后边的则是格式说明符
- 编写复杂的测试用例通常需要编写很长的代码行,可在一行的结尾使用反斜杠(\),然后就可以在下一行继续书写上一条语句的内容,可随意设置后续行的格式
and not (age<4 or age>8):
print("take it")
- 使用or and和no关键字可以建立布尔类型的表达式,此外,python没有专门的switch或case语句用于测试多个值。要处理多个测试用例,可以使用if和elif组合语句
- 使用in运算符用于检查某个值是否包含在另一个对象中,返回bool值。
- python打开文件,描述文件路径:
- 字符串中\是被当做转义字符使用,应注意
- open(‘c:\\a.txt’)转义方式
- open (r'c:\a.txt') 显式声明字符串不用转义
- open('c:/a.txt') 使用Linux的路径/
文件的输入输出
- open()函数:返回一个文件对象,调用该对象上的方法可以执行各种文件操作
- readline()方法:读取一行的内容,包括结尾的换行符在内,读至文件结尾是返回空字符串
- 将程序的输出送到一个文件中:a:print("%3d %0.2f"%(year,sum),file=f) b: f.write("%3d %0.2f"%(year,sum))
- 交互式地读取用户输入
sys.stdout.write("enter your name:") #将数据输出屏幕
name=sys.stdin.readline() #读取用户输入
b:name=input("enter your name:")
字符串
创建一个字符串字面量,可将字符串放在单引号、双引号或三引号中- a:两个三引号之间出现的所有文本都是为字符串的内容
- b:使用单引号和双引号指定的字符串必须在一个逻辑行
- c:索引运算符s[i] 提取一个字符
- d:切片运算符s[i:j] 提取一个子字符串
- e:使用加+运算符连接两个字符串,python不会把字符串的值解释为数值数据
- f:执行数学运算,要使用int()或float()函数将字符串转换为数值
- g:使用str()、repr()或format()函数将非字符串转换为字符串
- str()生成的输出与print语句得到的输出相同
- repr()创建的字符串可表示程序中某个对象的精确值
- format(x,"0.5f")利用特定格式将之转换成字符串
列表name=['','','']
- a.将新项追加到列表末尾,可使用append()方法
- b.将一项插入列表中,可使用insert()方法,insert(2,'')
- c.索引、切片、加法运算符
- d.创建一个空列表的方式
- name=[]
- name=list()
元组person=('','','')或person=‘’,‘’,‘’
- a.可以使用数字索引提取元组中的值,更常见的做法是将元组解包为一组变量
- b.创建元祖后不能修改它的内容,说明元组是一个有多个部分组成的对象
- c.不会占据额外的内存空间
表示数据时通常同时使用元组和列表
#文件中各行的格式为“name,shares,price”
filename="portfolio.csv"
portfolio=[]
for line in open(filename):
fileds=line.split(",")
name=fileds[0]
price=float(fileds[2])
shares=int(fileds[1])
stock=(name,shares,price)
portfolio.append(stock)
split()方法按章指定的分隔符将一个字符串划分为一个字段列表
集合set( , , ,):一组无序的对象,元素不能重复
并集t|s交集t&s
差集t-s
对称差集t^s(项在t或者s中,但不会同时出此案在而这种
t.add() 添加一项
t.update([ , , ,])添加多项
t.remove() 删除一项
字典stock={“name”:"eee","shares":100,"price":203.90}
a.使用关键字索引运算符,如stock['name']='eee'b.创建一个空字典的方式
stock={}
stock=dict()
c.使用in运算符可以测试某个内容是不是字典成员
if 'name' in stock:
p=stock['name']
else:
p='aaa'
或p=stock.get(''name','aaa')
d.获取一个字典关键字列表,将字典转换为列表即可
s=list(stock)
字典是python解释器中最完善的数据类型,因此,如果只是要在程序中存储和处理数据,使用字典比
自定义数据结构要好得多
迭代和循环
最常用的循环结构是用于迭代多个项的for语句。for n in [1,2,3,4,5],每次迭代都会讲列表中的下一个值赋给变量n
range(i,j,[步进值])创建的对象表示值i到j-1的整数,起始值被忽略,则认为是0,第三个参数是可选
例:a=range(5) #a=0,1,2,3,4
a=range(1,8,2) #a=1,3,5,7
a=range(8,1,-1) #a=8,7,6,5,4,3,2
函数
a.使用def语句可以创建函数b.让函数返回多个值,可使用元组,可以很容易地将结果放到单独变量中
a,b=hanshu()
c.在函数中创建变量或给变量赋值是,该变量的作用于是局部的,当函数返回之后会立即销毁该变量
要在函数内部修改某个全局变量的值,可以使用global语句
例:count=0
def foo():
global count
count+=1
生成器:基于处理管道、流或数据流编写程序的一种极其强大的方式
任何使用yield的函数都称为生成器使用yield语句,可以让函数生成一个结果序列,调用生成器函数创建一个对象,该对象通过连续调用__next__()方法
生成结果序列
例:
>>>def countdown(n):
print("counting down")
while n>0:
yield n
n -=1
>>>for i in countdown(5):
print(i)
counting down
5 4 3 2 1
协程:把函数编写为一个任务,从而能处理发送给他的一系列输入,这类函数称为协程
可以使用yield语句并以表达式(yield)的形式创建协程>>> def print_matches(matchtext):
print("Looking for",matchtext)
while True:
line=(yield) #获得一行文本
if matchtext in line:
print(line)
>>> matcher=print_matches("python")
>>> matcher.__next__() #向前执行到第一条(yield)语句,然后使用send()函数给它发送数据
Looking for python
>>> matcher.send("hello world")
>>> matcher.send("hello world python")
hello world python
>>> matcher.close() #匹配器函数调用结束
对象和类
程序中使用的所有值都是对象,对象由内部数据和各种方法组成
dir()函数可以列出对象上的可用方法,是进行交互实验的有用工具
>>> t=[10,20,30]
>>> dir(t)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
在面向对象的编程中,class语句用于定义新的对象类型
>>> class Stack(object): #将Stack声明为一个object,Stack继承自object,object也是所有python类型的根类型
def __init__(self): #每个方法中的第一个参数始终指向对象本身,根据约定,该参数使用名称self
self.stack=[]
def push(self,object):
self.stack.append(object)
def pop(self):
return self.stack.pop()
def length(self):
return len(self.stack)
>>> s=Stack()
>>> s.push("dave")
>>> s.push(42)
>>> s.push([3,4,5])
>>> x=s.pop()
>>> y=s.pop()
>>> x
[3, 4, 5]
>>> y
42
>>> s.push(42)
>>> s.push([3,4,5])
>>> s.length()
3
异常
程序中出现错误,就会引发异常,并显示追踪消息,指出发生错误类型及位置,通常错误会导致程序终止可使用try和except语句捕捉并处理异常
模块
python允许把定义放入一个文件中,然后在其他程序和脚本中将其作为模块导语,文件的后缀必须是.py导入:import 模块名(文件名)
使用不同的名称导入模块:import 文件名 as 新模块名
将具体的定义导入到当前命名空间:from 文件名 import 具体定义
把模块的所有内容加载到当前命名空间:from 文件名 import *
列出模块的内容:import 文件名 ;dir(文件名)