美文网首页
Python学习笔记

Python学习笔记

作者: JUNjianshuZHU | 来源:发表于2018-01-18 23:05 被阅读0次
    1
    2
    print(r'hello,\n')
    ->hello,\n
    
    print('hello,\n')
    ->hello,
    

    3
    5/3
    Out: 1.6666666666666667
    
    5.0/3
    Out: 1.6666666666666667
    
    5.0//3
    Out: 1.0
    
    5.0%3
    Out: 2.0
    

    4.break的用法
    5.continue的用法
    6.函数的局部变量
    7.为定义在函数外的变量赋值的
    8.为函数设置默认参数值
    8.注意格式
    9.使用关键参数
    10.return的用法
    10.未指定返回值能返回空置
    #如果有多个返回值,将会以元组形式返回
    def hello():
        return 'asdasdasd',1235,True,'dSA;LFKASPDFIKL'
    
    hello() --->('asdasdasd', 1235, True, 'dSA;LFKASPDFIKL')
    

    11.文档字符串DocStrings
    11.用法
    12.
    # file_name:mymodule.py (主程序)
    
    def sayhi():
        print('hi,you are success!!!')
        
    version = '0.1'
    
    if __name__ == '__main__':
        print('load in the program')
    else:
        print('load out of the program')    
    
    # end of mymodule.py
    # file saved in C:\Users\ye\Anaconda3
    
    # filename:myothermodule.py(调用主程序)
    
    import mymodule
    
    mymodule.sayhi()
    
    print('Version is ',mymodule.version)
    
    # end of myothermodule.py
    # file saved in C:\Users\ye\Anaconda3
    
    12.结果
    13.元组
    13.单元素元组
    14.字典循环
    15.列表切片
    shoplist = ['apple', 'mango', 'carrot', 'banana']
    # Slicing on a list
    print('Item 1 to 3 is', shoplist[1:3])  --->  Item 1 to 3 is ['mango', 'carrot']
    print('Item 2 to end is', shoplist[2:])  --->  Item 2 to end is ['carrot', 'banana']
    print('Item 1 to -1 is', shoplist[1:-1])  --->  Item 1 to -1 is ['mango', 'carrot']
    print('Item start to end is', shoplist[:])  --->  Item start to end is ['apple', 'mango', 'carrot', 'banana']
    

    16.字符串切片
    # Slicing on a string
    name = 'swaroop'
    print('characters 1 to 3 is', name[1:3])  --->  characters 1 to 3 is wa
    print('characters 2 to end is', name[2:])  --->  characters 2 to end is aroop
    print('characters 1 to -1 is', name[1:-1])  --->  characters 1 to -1 is waroo
    print('characters start to end is', name[:])  --->  characters start to end is swaroop
    

    17.对象和参考
    shoplist = ['apple', 'mango', 'carrot', 'banana']      #创建了列表shoplist
    mylist = shoplist      # 仅传递了指针
    del shoplist[0]
    print('shoplist is', shoplist)  --->  shoplist is ['mango', 'carrot', 'banana']      #apple同时在shoplist和mylist消失
    print('mylist is', mylist)  --->  mylist is ['mango', 'carrot', 'banana']
    
    mylist = shoplist[:]      #!传递了值
    del shoplist[0]
    print('shoplist is', shoplist)  --->  shoplist is ['carrot', 'banana']
    print('mylist is', mylist)  --->  mylist is ['mango', 'carrot', 'banana']
    

    18.字符串方法
    20.继承1
    class SchoolMember:   #父类
        '''Represents 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):
            #子类继承,注意使用super().
            super().__init__(name, age)   
            self.salary = salary
            print ('(Initialized Teacher: %s)' % self.name)
        def tell(self):
            super().tell()
            print ('Salary: "%d"' % self.salary)
    
    class Student(SchoolMember):
        '''Represents a student.'''
        def __init__(self, name, age, marks):
            super().__init__(name, age)
            self.marks = marks
            print ('(Initialized Student: %s)' % self.name)
        def tell(self):
            super().tell()
            print ('Marks: "%d"' % self.marks)
    
    t = Teacher('Mrs. Shrividya', 40, 30000)
    s = Student('Swaroop', 22, 75)
    
    members = [t, s]
    
    for member in members:
        member.tell()                    # works for both Teachers and Students
    
    --->
    (Initialized SchoolMember: Mrs. Shrividya)
    (Initialized Teacher: Mrs. Shrividya)
    (Initialized SchoolMember: Swaroop)
    (Initialized Student: Swaroop)
    
    Name:"Mrs. Shrividya" Age:"40"
    Salary: "30000"
    Name:"Swaroop" Age:"22"
    Marks: "75"
    
    21.多态
    
    class Person:
        '''Represents a person.'''
        population = 0      #计数器,累计调用的次数,但不受新的调用对象而初始化
        def __init__(self, name):
            '''Initializes the person's data.'''
            self.name = name
            print ('(Initializing %s)' %self.name)
            # When this person is created, he/she adds to the population
            Person.population += 1      #计数器,累计调用的次数,但不受新的调用对象而初始化
            
        def sayHi(self):
            print ('Hi, my name is %s.' %self.name)
            
        def howMany(self):
            '''Prints the current population.'''
            if Person.population == 1:
                print ('I am the only person here.')
            else:
                print ('We have %d persons here.' %Person.population)
    
    swaroop = Person('Swaroop')
    swaroop.sayHi()
    swaroop.howMany()
    
    print('-'*50)
    
    kalam = Person('Abdul Kalam')
    kalam.sayHi()
    kalam.howMany()
    
    print('-'*50)
    
    swaroop.sayHi()
    swaroop.howMany()
    
    --->
    (Initializing Swaroop)
    Hi, my name is Swaroop.
    I am the only person here.      #计数器的结果
    --------------------------------------------------
    (Initializing Abdul Kalam)
    Hi, my name is Abdul Kalam.
    We have 2 persons here.      #计数器的结果
    --------------------------------------------------
    Hi, my name is Swaroop.
    We have 2 persons here.      #计数器的结果
    

    21.type 和 isinstance
    
    type('520')      #判断输入的类型
    Out[1]: str
    
    type(5.2)
    Out[2]: float
    
    type(True)
    Out[3]: bool
    
    type(5e10)
    Out[4]: float
    
    isinstance('520',str)      #判断是否一致 
    Out[5]: True
    
    isinstance('520',int)
    Out[6]: False
    
    isinstance(2.2,int)
    Out[7]: False
    
    isinstance(2,int)
    Out[8]: True
    
    isinstance(5.2,float)
    Out[9]: True
    

    22. 在列表中加入元素的3种方法
    
    list = ['a','b','c']      # 创建一个列表list
    print(f'before:{list}')  --->  before:['a', 'b', 'c']
    
    list.append('d')      #在list后面加上‘d’
    print(f'after append:{list}')  --->  after append:['a', 'b', 'c', 'd']
    
    add = ['e','f']
    list.extend(add)       #在list后面加上‘e’‘f’
    print(f'after extend:{list}')  --->  after extend:['a', 'b', 'c', 'd', 'e', 'f']
    
    list.insert(0,'0')      #在list的指导位置加上‘0’
    print(f'after insert:{list}')  --->  after insert:['0', 'a', 'b', 'c', 'd', 'e', 'f']
    

    23. 在列表中删除元素的3种方法
    
    list = ['a','b','c','e','f']      # 创建一个列表list
    print(f'before:{list}')  --->  before:['a', 'b', 'c', 'e', 'f']
    
    pop1 = list.pop()      #pop()默认删除末尾元素并返回删除的元素
    print(pop1)  --->  f
    print(f'after pop1:{list}')  --->  after pop1:['a', 'b', 'c', 'e']
    
    pop2 = list.pop(0)      #pop(0)可以删除指定位置的元素
    print(pop2)  --->  a
    print(f'after pop2:{list}')  --->  after pop2:['b', 'c', 'e']
    
    remove = list.remove('b')       #remove需要输入删除元素的值
    print(remove)  --->  None
    print(f'after remove:{list}')  --->  after remove:['c', 'e']
    
    del list[0]      #del需要输入删除元素的位置
    print(f'after del:{list}')  --->  after del:['e']
    
    del list      #del还可以直接删除整个列表
    print(f'after del:{list}')  --->  after del:<class 'list'>
    

    24.列表的数数、查找位置、排序
    
    list = ['a','b','b','c','e','f']       # 创建一个列表list
    
    list.count('b')       # 在list数数‘b'的个数
    Out[30]: 2
    
    list.index('b')      # 在list查找‘b'的位置
    Out[31]: 1
    
    list.index('b',2,)      # 在list查找‘b'的位置,可以指定查找的开始和结束位置
    Out[32]: 2
    
    list2 = [1,5,3,8,4,6,0]
    
    list2.reverse()      # 逆序排列list2
    Out[37]: [0, 6, 4, 8, 3, 5, 1]
    
    list2.sort()       # 对list2进行排序
    Out[39]: [0, 1, 3, 4, 5, 6, 8]
    
    list2.sort(reverse=True)      # 对list2进行逆序的排序
    Out[41]: [8, 6, 5, 4, 3, 1, 0]
    

    25.元组
    
    tuple1 =(1)      # 元组的要素是逗号
    Out[47]: int
    
    tuple1 =2,3,4
    Out[49]: tuple
    
    tuple1 =()
    Out[51]: tuple
    
    tuple1 =(1,)
    Out[53]: tuple
    
    tuple1 =1,
    Out[56]: tuple
    
    tuple2 = ('a','b','d','e')
    tuple2 = tuple2[:2] + ('c',) + tuple2[2:]      # 在元组中增加元素的方法
    Out[59]: ('a', 'b', 'c', 'd', 'e')
    

    27. for的其他写法
    
    list1 = list(range(10))
    list2 = [i*2 for i in list1 if i > 5]
    print(list2)
    
    --->
    [12, 14, 16, 18]
    

    28. 在函数中接收元组和列表
    
    def powersum(power, *args):      
    #在 args 变量前有 * 前缀,所有多余的函数参数都会作为一个元组存储在 args 中。如果使用的是 ** 前缀,多余的参数则会被认为是一个字典的键/值对
        total = 0
        print(f'args:{args}')
        for i in args:
            total += pow(i, power)
        print(total)
        
    powersum(2,3,4)      #调用函数
    
    --->
    args:(3, 4)
    25
    

    29. 字符串函数partition和split的区别
    
    str1 = 'learn python the hard way'
    
    str1.partition()      # partition必须提供参数,否则报错
    TypeError: partition() takes exactly one argument (0 given)
    
    str1.partition('th')      # partition将字符串切割成元组
    Out[3]: ('learn py', 'th', 'on the hard way')
    
    str1.split()      # split默认按照空格将字符串切割成列表
    Out[4]: ['learn', 'python', 'the', 'hard', 'way']
    
    str1.split('th')      # split也可提供切割参数
    Out[5]: ['learn py', 'on ', 'e hard way']
    

    30. enumerate和zip
    
    a = (1,2,3,4,5)
    b = [6,7,8,9,10]
    
    enumerate(b)
    Out[22]: <enumerate at 0x1c9e74107e0>
    
    tuple(enumerate(b))      # 将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
    Out[23]: ((0, 6), (1, 7), (2, 8), (3, 9), (4, 10))
    
    zip(a,b)
    Out[24]: <zip at 0x1c9e73f3048>
    
    tuple(zip(a,b))      #将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
    Out[25]: ((1, 6), (2, 7), (3, 8), (4, 9), (5, 10))
    

    31.format的注意事项
    
    print('{0} is {1} {2} day!'.format('today','a','sunny'))
    --->today is a sunny day!
    
    print('{a} is {b} {c} day!'.format('today','a','sunny'))
    --->报错
    
    print('{a} is {b} {c} day!'.format(a='today',b='a',c='sunny'))
    --->today is a sunny day!      #需要说明a,b,c各代表什么
    
    '{0:.1f}{1}'.format(27.658,'gb')
    Out[144]: '27.7gb'
    

    32.收集参数
    
    def test(*params):
        print('参数的长度是:',len(params))
        print('第二个参数是:',params[1])
        
    test(1,'工作簿',3.14,50,88,60)      #所有参数全部传递给形参params
    
    --->
    参数的长度是: 6
    第二个参数是: 工作簿
    
    def test(*params,exp):
        print('参数的长度是:',len(params))
        print('第二个参数是:',params[1])
        
    test(1,'工作簿',3.14,50,88,60)      #没有参数传递给exp,因此报错
    
    --->
    TypeError: test() missing 1 required keyword-only argument: 'exp'
    
    def test(*params,exp):
        print('参数的长度是:',len(params))
        print('第二个参数是:',params[1])
    
    test(1,'工作簿',3.14,50,88,exp=60)      #指定把参数60传递给exp
    
    --->
    参数的长度是: 5      #注意第一个参数长度变为5!
    第二个参数是: 工作簿
    

    33.函数嵌套
    
    def fun1():      #第一层函数
        print('fun1 is working...')
        def fun2():      #第二层函数
            print('fun2 is working......')
        fun2()      #调用fun2
            
    fun1()
    
    --->
    fun1 is working...
    fun2 is working......
    

    34.闭包和函数调用
    def funx(x):
        def funy(y):
            return x*y
        return funy      #注意带参数函数的返回格式
    
    i = funx(5)(8)
    print(i)      ---> 40
    
    def funout():
        def funin():
            print('bingo!')
        return funin()      #!注意返回值
    
    funout() --->bingo!
    
    def funout():
        def funin():
            print('bingo!')
        return funin      #!注意返回值,同上区别
    
    funout()() --->bingo!       #!注意调用区别
    
    def Fun1():
        x = 5
        def Fun2():
            nonlocal x
            x *= 5
            return x
        return Fun2
    
    a = Fun1()
    
    print(a()) --->25
    print(a()) --->125      #再次调用时并没有初始化a
    print(a()) --->625
    

    35.非局部变量声明
    
    def fun1():
        x = 5
        def fun2():
            nonlocal x      #在嵌套函数中引用,必须声明为非局部变量
            x *= x
            return x
        return fun2()
    
    fun1()   --->  25  
    

    36.lambda函数
    
    def ds(x):
        return 3*x+10
    ds(10)     --->  40
    
    a = lambda x : 3*x+10
    a(10)   --->  40
    

    37.过滤器filter()
    
    list(filter(None,[0,1,2,True,False]))
    ---> [1, 2, True]      #过滤掉0和False
    
    应用:筛选奇数
    def odd(x):
        return x % 2
    
    temp = range(10)
    show = filter(odd,temp)
    list(show)      --->[1, 3, 5, 7, 9]
    

    38.迭代器map()
    
    def square(x):
        return x ** 2
    
    temp = range(10)
    show = map(square,temp)
    list(show)    --->[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    39.创建字典的方法
    
    dict1 = {'李宁':'一切皆有可能','耐克':'just do it','阿迪达斯':'impossible is nothing'}      #方法1
    ---> {'李宁': '一切皆有可能', '耐克': 'just do it', '阿迪达斯': 'impossible is nothing'}
    
    dict2 = dict((('f',70),('i',105),('s',115),('h',104),('c',67)))      #方法2:利用元组来创建字典
    ---> {'c': 67, 'f': 70, 'h': 104, 'i': 105, 's': 115}
    
    dict3 = dict(one='1',two='2',three='3')      #方法3:赋值创建
    ---> {'one': '1', 'three': '3', 'two': '2'}
    
    dict.fromkeys((1,2,3),'good')      #方法4:fromkeys()
    ---> {1: 'good', 2: 'good', 3: 'good'}
    
    补充
    40.dict内建的函数
    
    dict3 = dict(one='1',two='2',three='3')
    
    dict3.keys()      #返回键
    ---> dict_keys(['one', 'two', 'three'])  
    
    dict3.values()      #返回值
    ---> dict_values(['1', '2', '3'])
    
    dict3.items()      #返回键值对
    --->  dict_items([('one', '1'), ('two', '2'), ('three', '3')])
    
    dict3.get('one','no')      #查找键对应的值,如果没有返回'no'      
    --->   '1'
    
    'one' in dict3      #也可以用in 或 not in
    --->  True
    
    '1' in dict3
    --->  False
    
    1 in dict3
    --->  False
    
    dict4 = dict3.copy()      #字典拷贝,改变dict3的值不影响dict4
    --->  {'one': '1', 'three': '3', 'two': '2'}
    
    dict3.clear()      #清空字典
    --->  {}
    
    dict3.setdefault('four','4')      #查找键,如果没有则设为默认值
    --->  '4'
    
    dict3
    --->  {'four': '4', 'one': '1', 'three': '3', 'two': '2'}
    
    dict1
    --->  {'耐克': 'just do it'}
    
    dict3.update(dict1)      #将dict1的键值插入到dict3
    --->  {'four': '4', 'one': '1', 'three': '3', 'two': '2', '耐克': 'just do it'}
    
    '''对字典的值进行排序'''
    >>> xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
    
    >>> sorted(xs.items(), key=lambda x: x[1])      #xs.items()返回元组(键,值)
    [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
    

    41.集合
    a = {1,2,3}
    type(a)  --->  set      #a是一个集合
    
    b = set([1,2,3])  --->  {1, 2, 3}      #set函数可以把列表、元组、字符串变成集合
    
    c = (set[1,2,3,4,5,4,3,2,1])  --->  {1, 2, 3, 4, 5}      #转成集合的可以去重复数据
    
    集合相关函数
    e = {1, 2, 3, 4, 5}
    
    e.add(6)  --->  {1, 2, 3, 4, 5, 6}      #增加数据
    
    e.remove(6)  --->  {1, 2, 3, 4, 5}      #删除数据
    
    f = frozenset(e)      #冻结集合     
    f.add(6)      #冻结的集合不能做更改,否则会报错
    

    操作文件,具体使用看例题3
    42.文件写入知识点:
    write()和writelines()的区别:
    1、write() 需要传入一个字符串做为参数,否则会报错
    2、writelines()  参数必须是list/string/dict/tuple 等可迭代序列对象,且里面内容须是字符,那么使用writelines()的时候,它会自动迭代里面的内容并写入文件,但是要注意的是,它只是单纯的按顺序把内容写入,不会在每个被迭代元素后面加任何东西。
    
    l = [1, 3, 5]     writelines(l)     显示:TypeError: writelines() argument must be a sequence of strings
    l1 = ['1', '3', '5']     writelines(l1)       往文件存入135
    l2 = '246'       writelines(l2)      往文件存入246
    
    write()  参数只能是string,同时只是单纯的加入内容,不会在内容后面添加任何东西。
    s = '345'   write(s)      往文件存入345
    

    44.pickle模块
    作用:将代码需要用到的字典、列表等数据封装成二进制文件存储,减少代码体积
    
    import pickle      #导入模块
    
    first_list = [1,2,'a','b',['一','二']]  
    
    f = open('my_list.pkl','wb')      #!以‘wb’方式创建一个.pkl的文件
    pickle.dump(first_list,f)      #将列表“倒入”上述文件
    f.close()
    
    j = open('my_list.pkl','rb')      #!以‘rb’方式读取上述文件
    second_list = pickle.load(j)      #将文件内容“装载”到列表
    print(second_list)      #查看结果
    
    ---> [1,2,'a','b',['一','二']]  
    

    45.异常处理
    
    a = dict(a=1,b=2,c=3)      #设置一个字典
    
    try:            #放入可能会造成异常的代码
        print(a['a'])
    except KeyError as reason:  #!出现指定异常类型需要执行的代码,reason用于传递异常说明
        print(': %s' %reason)
    except OSError:  #可以指定多个异常类型
        print('操作系统错误')
    else:      #如果没有异常则执行else
        print('else')
    finally:  #无论如何都会执行的代码
        print('end')
    
    --->1
         else
         end
    

    46.子类调用父类函数的方法1:
    class Person():      #父类
        def __init__(self,x):
            self.x = x        
        def printx(self):
            print('father\'x is: ',self.x)        
            
    class Child(Person):      #子类
        def __init__(self,y):
            super().__init__(y)      #!由于子类的__init__覆盖了父类的,因此需要声明,并且可以传参数进去
            self.y = y        
        def printy(self):
            print('child\'y is: ',self.y)
    
    方法2:
    class Person():
        def __init__(self,x):
            self.x = x        
        def printx(self):
            print('father\'x is: ',self.x)
             
    class Child():
        def __init__(self,x,y):
            self.x = Person(x).printx()      #!与上面的区别
            self.y = y
        def printy(self):
            print(f'y is {self.y}')
    
    a1 = Child(10,5)      --->  father'x is:  10
    a1.printy()      --->  y is 5
    
    47.(1)关于类的其他需要注意内容:
    class Person():
        def __init__(self):      #!如果__init__里面没有参数的话,实例过程中不需要传递参数
            print('__init__')      
            #return self      #! __init__不能有返回对象,不然程序报错
        def printx(self,x):      #!self不可以省略
            print('father\'x is: ',x)
            
    p1 = Person()  --->__init__      #实例初始化自动调用 __init__  函数
    p1.printx(5)  --->father'x is:  5      #!这里传递了2个参数:self,5
    
    (2)删除类:
    class CC():
        def setXY(self,x,y):
            self.x = x
            self.y = y
            print(self.x,self.y)
    
    c1 = CC()      #实例化c1
    c1.setXY(11,99)  --->11 99
    
    del CC      #删除类CC
    c1.setXY(11,99)  --->11 99      #删除类后原实例没有删,即图纸烧了,房子还在
    c2 = CC      #报错,删除后不能再实例化
    

    更多关于类的内容看这里:一篇文章搞懂Python中的面向对象编程


    48、必选参数、默认参数、可变参数、关键字参数
    def f1(a,b,c=0,*args,**kw):  
        print(a,b,c,args,kw)  
      
    #调用情况:  
    f1(1,2)  --->1 2 0 () {}  
    f1(1,2,c=4)  --->1 2 4 () {}
    f1(1,3,6,'aw','wad',x=123,y='1232')  --->1 3 6 ('aw', 'wad') {'x': 123, 'y': '1232'}
    
    
    a,b 为必选参数
    c=0 为默认参数
    *args 为可变参数,可变参数允许你传入 0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
    **kw 为关键字参数,关键字参数允许你传入 0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict  
    

    相关文章

      网友评论

          本文标题:Python学习笔记

          本文链接:https://www.haomeiwen.com/subject/wpugoxtx.html