zoukankan      html  css  js  c++  java
  • python培训拾遗

    20140421

    1. 三大利器:

    dir----列出所有内部方法

    a=1

    dir(a) 可以列出所有内部方法,就是带两个下划线的;带一个下划线的是普通方法

    help---查看帮助

    help(a.bit_length)

    type---查看数据类型

    type(a)

    2. str类型的神奇用法

    结果 解释说明
    "hello"+"world" "helloworld" 连接
    ’hello‘*3 "hellohellohello" 重复
    “hello”[0] "h"        第一个位置
    "hello"[-1] "o" 最后一个位置
    "hello"[::-1] "olleh" 反转
    "hello"[1:4] "ell" 取片段,右边界不包含
    len("hello") 5 求长度
    "hello"<"jello" 1 字符串比较
    "e" in "hello" 1  
    "escapes: etc,33 etc, if etc"    
    'single quotes' '''triple quotes''' r''raw strings''   r''表示不会转义,正则表达式中多用
    "The %s is %d" %('abc',12)    

    3. 容器

    • list ,包括:元素可变---[],元素异构---a=[33,"hiboy",["i', 'am"]]

    常用list操作方法

     
    操作 结果 解释说明
    a = range(5) 5 #[0,1,2,3,4]
    a.pop() None #[0,1,2,3,4]
    a.reverse() None #[4,3,2,1,0]
    a.sort() None #[0,1,2,3,4]
    a.insert(0,42) None #[42,0,1,2,3,4]在第一个位置插入42
    a.append(['another','list']) None #[0,1,2,3,4,['another','list']]
    a.extend(['another','list']) None #[0,1,2,3,4,'another','list']
    a=[0]*3   #[0,0,0]
    • tuple,元组 包括:元素不可变;元素异构:记住c(0,)逗号必须有,不然就认成别的了
    • dict---key不可变,value可变 a={key:value};元素异构;
     
    描述 解释说明
    a={} 空字典
    b={'x':3,'y':4}  
    c={' uid':105,'login':' beazley',' name':' David Beazley'}  
       
    u=c[' uid'] 获取一个元素值
    c[' shell']="/bin/sh" 赋值
    c['login']=23  
    b.get('Perl','unknown') 结果是:unknown
    b.keys() 结果是:[x,y]
    b.values() [3,4]
    b.items() [('y',4),('x',3)]
    d=b.copy():del b['x']

    b:{'y':4},d:{'x':3,'y':4}

    b[2]=3:b.update(d)

    b:{'y':4,2:3},d:{'x':3,'y':4,'2':3}

    dict常用于:遍历

    items() keys() values()

    iteritems() iterkeys() itervalues() --- 元素超过1w时建议使用,效率高;除此之外下面3个和上面的功能没有区别

    4. 控制

    • if 不多说了
    • for有个神奇的地方:

    mylist = "for statement"

    for word in mylist:

      print word

    else:#最终执行

      print "End list"

    • while不多说

    break --终止当前循环

    continue--终止本次循环

    pass:什么事都不做

    • 由于python不支持switch,故可以使用dict模拟switch:

    def f1(a):

      print 1,a

    def f2(b):

      print 2,b

    def default(d):

      print 'default',4

    sw={

      'f1':f1,

      'f2':f2,

      'default':default,

    }

    sw['f1'](4) #1 4

    sw['f2'](5) #2 5

    sw['default'](8) #default 4

    5. 变量,无须声明,初始化等,id(变量名)能够识别是哪个变量的引用 a=1b=1

    6. 灵活无比的函数

    deffuncname(arg1,arg2=0,*arg3,**arg4): #分别声明普通参数,元组参数,dict字典参数。一个函数中只可以有一个元组和一个字典

      """doc文档描述放这里"""

      statments

      return xx

    例如:def gcd(a,b):

      "this is self definition"

      while a!=0:

        a,b=b%a,a

      return b

    >>>gcd.__doc__

    "this is self definition"

    >>>gcd(12,20)

    4

    又如:

    def h(*t):print t

    >>>h(1)

    (1,)

    >>>h(1,2,3,5,6,7)

    (1,2,3,5,6,7)

    def k(**d):print d

    >>>k(m=1,n=2)

    {'m':1,'n':2}

    • 函数作用域规则:Local(局部) -> Global(全局) ->Built-in(内置)->NameError异常
    • Python没有函数重载,因为函数是没类型的
    • python函数可以返回多个值么?可以的 tuple
    • 下面函数有什么问题?
    • def func(in,out):print in.out out=2;有问题,关键字不可以用,会覆盖原有意义

    核心库:

    os sys string getopt StringIO struct pickle...

    正则库

    re module

    网络库

    socket httplib htmllib ftplib smtplib lxml...

    在线参考

    标准库:http://docs.python.org/library/index.html

     ppt中的作业,实现如下:遇到的问题是,&&要用and代替;range(m,n)是指从m开始到n-1;raw_input()返回的类型默认是string的,用在这里还需要用isdigit()转换一下,因此改用input();print(),打印后不换行,但有一个空格,还没找到好的去除方法

    import sys
    n = input("Pls input your number:")
    for i in range(1,n+1):
    for j in range(1,i+1):
    # if (j%2==0) and (i%2==0):
    #sys.stdout.write("*")
    # print "*",
    if (j==(i/2+1)) and (i%2==1):
    print "!",
    else:
    print "*",
    print " "

    下面程序的输出是a,c. for each in alist:each相当于有一个指针。each指向第一个元素的时候,打印a;同时remove掉a;这时alist长度变化了,原先第一个元素变成了b;each指针向下走,变成了a;a被打印出来了。因此,这个程序的教训是:不要随意改变列表长度。

    alist = ['a','b','c','d']

    for each in alist:

      print each  

      alist.remove(each)

    模块查找路径依次是:sys.path -- PYTHONPATH -- site-packages

    接下来的程序是很常见的用于自测自定义程序是否work的:

    #!/usr/bin/python

    if __name__=='__main__':

      print 'This program is being run by itself'

    else:

      print 'I am bneing imported from another module'

    包:包是一个目录树,每个目录下都有一个__init__.py文件

    包工具:目前主要是pip;安装包:pip install/uninstall simplejson

    类定义中的:

    类方法classmethod:整个类只有这么一个方法,

    statcitmethod

    例子:实现一个堆栈

    class Stack(object):

    "A well-known data structure..."

    def __init__(self): #构造函数

      self.items = []

    def push(self,x):

      self.items.append(x) 

    def pop(self):

      x=self.items[-1]

      del self.items[-1]

      return x

    def empty(self):

      return len(self.items)==0

    x=Stack()

    x.empty()  # True

    x.push(1)  # [1]

    x.empty()  # False

    x.push("hello")  # [1,"hello"]

    x.pop()  #hello

    x.items  #[1]

    类 - 继承

    class SchoolMember(object):

    '''Rmpresents any school member.'''

    def __init__(self,name,age):

      self.name = name

      self.age - age

      print '(Initialized SchoolMember:%s)' % self.name

    def tell(self):

    '''Tell my details.'''

      print 'Name:"%s" Age:"%s"' %(self.name,self.age),

    class Teacher(SchoolMember):

    '''Represents a teacher.'''

    def __init__(self,name,age,salary):

      SchoolMember.__init__(self,name,age)

      self.salary = salary

      print '(Initialized Teacher:%s)' % self.name

    def tell(self):

      SchoolMember.tell(self)

      print 'Salary:"%d"' % self.salary

    class Student(SchoolMember):

    def __init__(self,name,age,score):

    SchoolMember.__init__(self,name,age)

    self.score = score

    t=Teacher('Mrs.Shrividya',40,30000) #实例化

    s = Student('Swaroop',22,75)

    t.tell()

    s.tell()

  • 相关阅读:
    idea新建web项目
    wampserver的MySQL和本机MySQL冲突导致空密码登录报错
    while-else if
    格式化输出
    Zookeeper
    仿真手写Spring核心原理v1.0
    各设计模式总结与对比
    装饰者模式和观察者模式
    模板模式和适配器模式
    委派模式和策略模式
  • 原文地址:https://www.cnblogs.com/ianthe/p/3679578.html
Copyright © 2011-2022 走看看