python基础-----列表、元组、字典、迭代器、生成器、字符串、条件判断、异常、文件输入输出、创建函数

  • 列表-----序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - (它的位置),或索引,第一个索引是0,第二个索引是1,以此类推。

创建列表方式

  1. name1=[]
  2. name2=list()

 python列表各种操作方式

#创建带元素的列表
names=["Dave","Mark","Ann","Phil"]
print ("names=%s"% names)   #打印列表所有成员

a=names[2]
print ("a=%s"%a)    #打印下标为2的元素(下标从0开始)

names[0]="Jeff"     #替换下标为0的位置的元素内容
print ("names[0]=%s" % names[0])

names.append("paula")   #追加到末尾
print ("names=%s" % names)

#插入到指定位置
names.insert(2,"Thomas")
print ("names=%s" % names)

#只打印前两个值 取值范围为0<=i<2  包含左不包含右
b=names[0:2]
print ("b=%s" % b)

c=names[2:] #打印从下标2开始到最后一个元素
print ("c=%s" % c)
替换从0开始到2的元素,不包括2位置,,元素多的也会顺便插入再当前位置,
即0和1是Dave Mark,则2为Jeff,之前2位置往后的元素顺延至下一位
names[:2]=["Dave","Mark","Jeff"]
print ("--------names=%s" % names)

代码执行截图

 列表高级的操作

#列表连接
d=[1,2,3]+[4,5]
print ("d=%s" % d)

#列表可以包含任意的Python对象
f=[1,"Dave",3.14,["Mark",7,9,[100,101]],10]
#这种打印可以根据括号找对应的对象,一个括号对应列表的最外围的括号,两个就向内扩展一个依次。
print ("f[1] =%s"% f[1])

print ("f[3][2] =%d"% f[3][2])

print ("f[3][3][1] =%d" %f[3][3][1])

#列表高级属性
import sys
if len(sys.argv) !=2:
   print ("please supply a filname")
   raise SystemExit(1)
f =open(sys.argv[1])
lines=f.readlines()
f.close()

fvalues=[float(line)for line in lines]
print ("The minimum value is ", min(fvalues))
print ("The maximum value value is ",max(fvalues))

 

  • 元组----Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可
#coding=utf-8

stock=("Good",100,49.10)
address=('www.python.org',80)
#person=(first_name,last_name,phone)

#没有圆括号python也能是元组
stock="Good",100,49.10
address='www.python.org',80
#person=first_name,last_name,phone

#也可以使用数字下表来提取元组的内容
#元组和列表操作基本相同,但是元组一旦创建里面的元素内容就不能被改变了

#案例将元组作为对象存放近列表
filename="foo.txt"
portfolio=[]#创建一个列表
for line in open(filename):
    fileds=line.split(",")
    name =fileds[0]
    print (" %s %s %s"% (fileds[0],fileds[1],fileds[2]))
    shares=int(fileds[1])
    price=float(fileds[2])
    stock=(name,shares,price) #创建一个元组
    portfolio.append(stock)   #添加元素到列表
print (portfolio)


  • 集合、字典

字典是另一种可变容器模型,且可存储任意类型对象字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中

#coding=utf-8

#创建集合使用set()函数 集合支持标准操作,并集、交集、差集、对称差集
s=set([3,5,9,10])
t=set("Hello")
#注:集合元素是无顺序的、切不能重复,不能通过数字索引找到
print ("t=%s"% t)  #打印纸会打印出一个 l 因为不会打印出重复的值

a= t | s   #t和s并集
b= t & s   #交集
c= t - s   #差集
d= t ^ s   #对称差集

print ("a=%s b=%s c=%s d=%s"%(a,b,c,d))

# add() update() remove() 

t.add('x')
print ('t=%s'%t)
s.update([10,37,42])
print ('s=%s'% s)
t.remove('H')
print ('t=%s'%t)

 

################################
#字典 Dictionary
#字典是一个关联数组或散列表,通过关键字索引对象

stock={ "name"   : "GooG",
	"shares" : 100,
        "price"  : 490.10
      }

print (stock)

#插入 修改
stock["shares"]=75
stock["date"] ="June 7,2007"

print (stock)

#创建一个空字典
prices={}
prices=dict()


##字典快速查找
prices ={ 
	"GOOG" : 490.10,
	"AAPL" : 123.50,
	"IBM"  : 91.50,
	"MSFT" : 52.13
	}

print (prices)

#使用in运算符测试某个内容是不是字典成员

if 'SCOX' in prices:
   p=prices['SCOX']
else:
   p=0.0

print (p)

#下面也是检测SCOX在不在字典里面的方式。不在就给p赋值 0.0
p=prices.get('SCOX',0.0)

print (p)

#获得字典的关键字列表,将字典转为列表即可
syms=list(prices)
print (syms)  #输出的是字典的关键字即 : 前面的值

#del删除字典元素
del prices['MSFT']
print (prices)

  • 迭代器----迭代和循环是Python中很重要的
#coding=utf-8

#迭代和循环是Python中很重要的 
for n in [1,2,3,4,5,6]:
    print ("2 to the %d power is %d" % (n,2**n))

print (n)

for n in range(1,10):
    print ("2 to the %d power is %d" % (n,2**n))

#range(i,j,k) 表示创建的从i到j-1的以k值递进的整数值

a=range(0,10,2) 
print (a)

b=range(0,10)
print (b)

c=range(10)
print (c)

d=range(10,1,-1)
print (d)

#处理字符串

e='hello world'
for f in a:
    print (f)

h=["Dave","Mark","Ann","Phil"]
for name in h:
    print (name)


i={'GOOG':490.10,'IBM': 91.50,'AAPl':123.15}
for key in i:
   print (key,i[key])

f=open('foo.txt')
for line in f:
   print (line)


  • 生成器---在Python中,一边循环一边计算的机制,称为生成器
#coding=utf-8

#使用yield 可以使函数生成一个结果序列
def countdown(n):
    print ("Counting down")
    while n>0:
        yield n
        n-=1

c=countdown(5)
for n in range(0,5):
   print ("c.next()=%d"% next(c)) #3.x后生成器的下一个需要next(C) 2.X版本是 C.next()


#一般调用Yield生成器生成的函数会使用循环
for i in countdown(5):
	print (i)

#生成器是基于处理管道、数据流的一种更强大的编码方式
#1.监控日志文件的 UNIX tail -f命令
import time
def tail(f):
	f.seek(0,2)
	while True:
		line=f.readline()
		if not line:
			time.sleep(0,1)
			continue
		yield line


#2.使用生成器在多行中查找特定字符处啊
def grep(lines,searchtext):
	for line in lines:
		if searchtext in line:
			yield line


#合并1、2创建一个简单的管道
#UNIX "tail -f | grep python python " 命令的python实现
#wwlog=tail(open("access-log"))
#pylines=grep(wwwlog,"python")
#for line in pylines:
#	print line

#协程
#####函数在使用时要输入一组参数,可以将函数编写为一个任务,从而能处理发送给他的一系列输入,该类函数称为协程使用Yield语句可以创建协程
def print_maches(matchtext):
	print ("Looking for",matchtext)
	while True:
		line=(yield)  #获得一行文本
		if matchtext in line:
			print (line)

matcher=print_maches("python")
next(matcher) #向前执行第一条(Yield)语句

matcher.send("Hello World")
matcher.send("python is cool")

matcher.close()  #匹配器函数调用结束


#基于生产者-消费者模型编写并发程序,协程很有用。 共同使用生成器和协程的例子如下
#一组匹配器协程
matchers=[print_maches("python"),print_maches("guido"),print_maches("jython")]
#通过调用next()准备所有的匹配器
for m in matchers:
    next(m)
#为所有匹配器提供一个活动日志文件,必须有一台活动的web服务器将数据写入
wwwlog=tail(open("access-log"))
for line in wwwlog:
	for m in matchers:
		m.send(line)   #将数据发送到每个匹配器协程中

  • 字符串
#coding=utf-8
a= 'hello world'
b="Python is groovy"
c=""" Computer says No """
print (''' Content-type: text/html

<h1> Hello <h1>
Click <A href="http://www.python.org">here</a>
''')

#切片运算符 s[i:j] 提取字符串中索引 K 处的字符 i<=k<j
#省略i 则从字符串起始位置s[:j]   0 <= k<j
d=a[:5]
e=a[:6]
f=a[3:8]

print ("d=%s e=%s f=%s" % (d ,e ,f))

# +连接两个字符串
d= d+e
print ("d=%s" % d)

#执行数学运算 只能转数字字符串
z=int("23")+int("23")
print ("z=%d"% z)

  • 条件判断
    #coding=utf-8
    a=1;b=2;
    if a<b:
       print ("computer say yes")
    else:
       print ("computer say no")
    
    
    product ="game"; type="pirate memory"; age =5;
    
    if product == "game" and type == "pirate memory" \
    			and not (age < 4 or age >8):
        print ("I'll take it")
    
    
    #python not have switch case 
    suffix= ".jpg"
    
    if suffix == ".htm":
       content="text/html"
    elif suffix == ".jpg":
       content="image/jpeg"
    elif suffix == ".png":
       content="image/png"
    else:
       raise RuntimeReeor("Unknown content type")
    
    print ("content =%s" % content)
    
    #if 条件语句如果要表示为空的话可以使用pass语句
    
    if a:
    	pass
    else:
    	pass
    
  • 异常
    #coding=utf-8
    
    #使用def 创建函数
    
    def remainder(a,b):
       q=a//b   #截断除法运算符
       r=a-q*b
       return r
    #调用函数只需result=remainder(31,15)
    
    #要让函数返回多个值,可以使用元组(...)
    def divide(a,b):
       q=a//b
       print ("q=%d"% q)
       r=a-q*b
       print ("r=%d"% r)
       return (q,r)
    #使用元组返回多个值时,可以容易的江边来那个放到单独的变量中
    quot,remd=divide(1456,33)
    
    print (quot,remd)
    
    #给函数参数提供一个默认值 调用时可以省略该参数
    #def connect(hostnaem,port,timeout=300):
        #函数体
    #  connect("www.python.org",80)
    
    #也可以使用函数参数名称去任意顺序填写参数,前提得知道函数的参数名称
    #  connect(port=80,hostname="www.python.org",timeout=30)
    
    #在函数内部修改某个全局变量的名称使用global
    
    count=0
    def foo():
       global count
       count  += 1
       print ("count=%d"%count)
    
    foo()
    print ("count=%d"%count)
  • 异常
    #coding=utf-8
    
    #如果程序中出现异常,就会引发一系列的错误 使用try catch语句可以追踪并处理异常
    
    try:
    	f=open("file.txt","r")
    except IOError as e:
    	print (e)
    
    #上述中如果出现异常会将错误信息放置在对象e中然后将控制权传递给except代码块
    
    #python中的模块
    
    #在python中 随着代码的越来越多,为了便于维护需要分为多个文件 然后在其他文件或者脚本中导入使用
    #在其他文件中使用某个模块可以这样  import filename 例:
    
    # 模块文件div.py
    def divide(a,b):
    	q=a/b
    	r=a-q*b
    	return (q,r)
    
    #在另一个文件中使用
    import div
    a,b=div.divide(2,3)
    
    #使用不同的名称导入到当前文件 可以使用as限定符
    import div as foo
    a,b=foo.divide(2,3)
    
    #要将具体的定义导入到当前的命名空间中可以使用from 如果要将divide函数导入另一个文件
    from div import divide
    a,b=divide(2,3)
    
    #导入所有的模块到另一个文件中
    from div import *
    
  • 文件输入输出
    # -*- coding: UTF-8 -*-  
    f=open("foo.txt")
    
    line=f.readline()
    while line:
          print line,
          line=f.readline()
    f.close()
    
    for line in open("foo.txt"):
        print line,
    #重定向输出打印到out文件中,类似于打印log
    #redirect print to a out file,likes print log to fle
    year =1; principal=1;numyears=5;rate=0.2
    f=open("out","w")
    while year <= numyears:
        principal = principal *(1+rate)
        print >> f,"%3d %0.2f " % (year,principal)    #python 2
        f.write("%3d %0.2f \n" % (year,principal))    #也是将内容写入文件
        #print("%3d %0.2f" % (year,principal),file=f) #python 3
        year+=1
    f.close()
    
    
    #标准文件输入输出
    import sys
    sys.stdout.write("Enter your name:")
    name=sys.stdin.readline()
    #在python 2 中上述输入等价于--->name1=raw_input("Enter your name:")
    #在python 3 中上述输入等价于--->name2=input("Enter your name:")
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章