python基础语法快速浏览

1、预览
1 import sys #导出sys模块
2 
3 def test(): 
4     a,b,c=1,2,3 #一次给多个变量赋值
5     print(type(a),help(a),help(sys),sys.__file__) 
6     if b>1:
7         print("hello world!")
8 print(u"这句不是函数test的了")

python的代码很简洁,这里不再看到;和{},变量不需要声明类型,代码块是用缩进的方式实现,如上行5和def对齐,该行不属于函数test。

语句和控制流:

  • if、else、elif
  • for:历遍迭代器,如for x in [1,2,3] ,注意不支持for( i=0;i<10;i++)
  • while
  • continute\break
  • def:定义函数
  • class:定义类
  • pass:表示此行为空,不执行如何操作
  • yield:在迭代器函数内使用,用于返回一个元素
  • with:在一个场景中运行语句块

帮助:
可以用help()查看帮助,__file__查看出处,type()获取类型,dir()列出模块中定义的标识符(函数、类、变量)

数据类型转换:

int(x [,base ])         将x转换为一个整数
long(x [,base ])        将x转换为一个长整数
float(x )               将x转换到一个浮点数
complex(real [,imag ])  创建一个复数
str(x )                 将对象 x 转换为字符串
repr(x )                将对象 x 转换为表达式字符串
eval(str )              用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s )               将序列 s 转换为一个元组
list(s )                将序列 s 转换为一个列表
chr(x )                 将一个整数转换为一个字符
unichr(x )              将一个整数转换为Unicode字符
ord(x )                 将一个字符转换为它的整数值
hex(x )                 将一个整数转换为一个十六进制字符串
oct(x )                 将一个整数转换为一个八进制字符串

字符串:
字符串可用单引号、双引号、三引号表示,其中三引号可表示多行,转义符用\,字符串格式化用%

str="hello world"
str='hello world'
str="""hello
world""" #多行
str=r"hello \n world" #\n本来表示换行但字符串前面加r保留原始字符,等于“hello \n world”
"hello %5s %5f"%("zeng",1.2)  #在总长度为5,正数右对齐,负数左对齐,数字也有效 
"hello %.3s %08.3f"%("zeng",1.2345)  #限制总长度为3,超过部分将被切断,数字总长8,不够前面补0,3位小数点

注释:
代码行用#注释,
函数和类的注释

def test():
    """在这里写函数的注释"""
    pass

test.__doc__ #查看函数的注释

 

2、序列

元组:a=(1,2,3)

a,b,c=(1,2,3)         #a=1
a=(1,2,3)    #arr[1]=1 失败 不能修改
a=tuple("abc")   #=("a","b","c"),可将列表、字典
a=(1,)   #只有一个元素的元组要加逗号

列表:a=[1,2,3]
列表提供的操作函数比较多,可以新增、修改、删除、排序、合并等。

字典:a={"id":1,"name":"zyy"}

age="age"
user={"id":1,"name":"zyy",age:12,1:2} #键值对的集合构成字典
user=dict([("id",1),("name","zengyy")] #将键值列表转成字典
id=user["id"];user["id"]=2 #读写

集合:
集合的元素是唯一的,可用set()将元组、列表、字典转成集合

切割:
arr[开始:结束:步长]  #输出不包含结束的索引,步长表示间隔,负数则反方向取
arr=[1,2,3,4,5,6]
arr[1:3]  #输出[2,3]
arr[1:]  #输出[2,3,4,5,6]
arr[:3]  #输出[1,2,3]
arr[:-2]  #输出[1,2,3,4]
arr[1:5:2] #输出[2,4] 

 

3、表达式

历遍序列的表达式

([x for x in [1,2,3,4,5] if x not in [1,3]]) #输出[2,4,5]
({x*x:x*2 for x in [1,2,3,4] if x not in [1,2]}) #输出{16: 8, 9: 6}

lambda表达式:

f=lambda a,b:a*b
f(2,3) #输出6

 

 4、函数

def plus(a,b=1,*c,**d): #c,d都是可变参数,d为命名可变参数
    sumc=0;sumd=0
    print(c)
    for x in c:  #列举参数列表(1,2)
        sumc+=x 
    print(d,type(d))
    for x in d.keys(): #列举命名参数列表(a,b)
        sumd+=d[x]
    return (sumc,sumd)

sum=plus(1,2,1,2,3,x=1,y=2) #参数c=(1,2,3),d={"x":1,"y":2}

 

5、类 

class person():
    def __init__(self):
        pass

class user(person):   #继承person 
    __id=1     #私有变量或函数已__开头非__结束
    def __init__(self):
        print(type(self))
        person.__init__(self)

    @property           #读取属性的函数 u=user();u.id
    def id(self):
        return self.__id 

    @id.setter         #给属性复制的函数 u=user();u.id=123
    def id(self,v):
        self.__id=v

    @id.deleter         #删除属性时调用 del u.id
    def id(self):
        del self.__id

    def __getattr__(self,name):  #调用类中没有定义的属性时触发 如u.name,同样的函数有__setattr__,__delattr__
        if(name=="name"):
            return "zeng"
        else:
            return ""
    #id = property(getid, setid, delid, "属性id的注释") # 这句和上边的效果一样,getid,setid,delid分别调用3个函数 

    @classmethod         #类方法
    def add(self): 
        print("add",type(self))
        pass
    @staticmethod        #静态方法
    def update():
        pass

def save(self):
    print("this is f")
user.save=save #类成员函数可以这样添加

u=user()
u.age=30      #age没有在前面定义,但这样是合法的
View Code

 

  • 继承 ,class user(person):  user 继承person类
  • 私有成员,以__开头非__结束
  • 属性,注意上边属性的2中定义方法
  • 类方法和静态方法,类方法第一个参数是self,该参数不是实例,而是类
  • 类内置函数,参考文章http://www.cnblogs.com/simayixin/archive/2011/05/04/2036295.html
  • 类方法和属性是可以动态添加上去的

6、模块

模块可以是py文件或包含__init__.py的文件夹

import common              #导入模块common,调用时为common.add(),即加上 模块名.
import common as c         #导入common,调用时为c.add()
from common import add,plus   #导入模块的部分类、函数等 可以直接利用该函数
from common import *    #导入所有的类、函数等 可以直接利用该函数



if
__name__=="__main__": #通过__name__获取模块名 pass

当导入文件夹模块时目录下的__init__.py将被执行

相对路径:from ..a import b  #..表示上级目录,a表示当前目录的上级目录的a文件夹

__all__:可以在模块中定义__all__=["b"],当通过“from a import *”方式导入时 只导入__all__定义的对象

 

7、迭代器和生成器

#迭代器
class myiter:
    def __init__(self):
        self.a=0        
    def next(self):                     #循环调用该函数     
        self.a+=1
        if self.a>5: raise StopIteration   #触发这个异常是停止迭代
        return self.a     
    def __iter__(self):                     #说明可迭代
        return self 

for x in myiter():      #调用next直到StopIteration异常
    print(x)                

#生成器
def g():                                    #该函数返回生成器,调用g()该函数并没有执行,只有历遍时才执行 
    arr=[1,2,3]
    for x in arr: 
        yield x

for x in g():
    print(x)            #输出1,2,3
View Code

 

 

posted @ 2013-10-05 09:37  zengyy  阅读(579)  评论(1编辑  收藏  举报