zoukankan      html  css  js  c++  java
  • python基础

    注释快捷键

      ctrl +   (注释与取消注释)

    转义

      使用 r " " 代表 " " 中的不转义,

    print('\	\byy')
    print(r'\	\byy')

    >>> yy
    >>>\ \byy

      对于参数为路径的,为什么要带r‘’, 因为,路径中有“",  ""为转义符,带上r”“,代表不转义,否则会报错

    path3 = os.path.dirname(r'C:Usersviruser.v-desktopPycharmProjectshexinpracticepickle.txt')

    sep

    end

      print()的参数,sep:值与值得分隔符,默认为空格;  end:以什么结尾

      print()默认在字符串末尾增加换行符结尾,对于输出后不想换行时,可增加:end = “”

    字符串

      编码

        ascii  : 一个字节

        unicode: 通常为2个字节,

        utf - 8 :可变长编码,字母等为一个字节,汉字通常为三个字节,生僻字等为四-六个字节

       在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

      s.encode:  编码

    print(b'xe4xb8xadxff'.decode('utf-8', errors='ignore'))   # 忽略编码中无法被编码部分

      s.decode:解码

      len(s) : 字符串长度

     内置数据类型

      list 、  tuper、  dict 、  set

      list: 有序可变列表,可随时添加和删除元素  

        创建list: L1 = [1, 2, 3]

        使用索引访问list,当索引超出范围时,提示indexError

      tuper:有序列表,初始化后不可变

        创建tuper: t1 = (1,2,3), 定义tuper只有一个元素时,必须加一个逗号,t = (1,) (用以和数学中t =(1)区分,数学中该括号为小括号,不为元组)

      dict:使用键-值存储(键不重复),具有极快的查找速度(也成为map),可添加和删除键值

        当字典中key不存在时,报错提示 “key error”

        判断key是否存在方法:

         “key” in dict

         dict.get(‘key’)

      dict中的key为不可变对象(需要通过key计算位置(哈希算法));

      不可变对象:字符串、整数等均可作为key,list为可变对象不能作为key

    dict  = {"yuyu":12, "hahau":13}
    dict['bubu'] = 34
    print(dict)
    print('yuyu' in dict)    # 使用in判断key是否存在,结果为true/false
    print(dict.get("bubu"))   # 使用get判断key是否存在,不存在时返回None
    key = [1,2,3]
    dict[key]  = 'lala'   #  使用列表作为可以,报错提示typeError
    print(dict)
    
    
    >>>
    {'yuyu': 12, 'hahau': 13, 'bubu': 34}
    True
    34
    Traceback (most recent call last):
      File "C:/Users/viruser.v-desktop/PycharmProjects/hexin/practice/practice.py", line 115, in <module>
        dict[key]  = 'lala'
    TypeError: unhashable type: 'list'

     set : 集合,无重复元素

        创建set: s = set([1,2,3])

        重复元素在set中会自动被过滤

    s1 = set([1,2,3])
    s2 = set([1,4,5,6,2])
    s1.add(2)  #  在集合中增加重复元素会被自动过滤掉
    print(s1)
    print(s1 & s2)  # 交集
    print(s1 | s2)  # 并集
    
    >>>
    set([1, 2, 3])
    set([1, 2])
    set([1, 2, 3, 4, 5, 6])

      内置数据类型小结:

      tuple:不可变列表,代码更安全,需要对列表防止修改时,可使用tuple代替list

      list:随着元素增加查找和插入的时间增加;占用空间小

      dict:查找和插入速度极快,不会随着key是增加而变慢; 但需要占用大量内存

        set :与dict的唯一区别为没有存储对应的value,与dict一样不可放入可变元素(无法判断两个元素是否相等)

      可变对象与不可变对象:

      可变对象:list,dict,set等,对该变量操作后,对象值发生变化

      不可变对象:str,对str变量操作后,实际是创建了新的变量,原变量内容不变

      

    L1 = [1,2,3]
    L1.append(4)
    a = 'abc'
    b = a.replace('a', 'A')  # replace替换a字符串中值,a指向的对象不变,使b指向创建的新对象'Abc'
    print("L1的值为:{0}
    a的值为:{1}
    b的值为:{2}".format(L1, a, b))  
    
    >>>
    L1的值为:[1, 2, 3, 4]
    a的值为:abc
    b的值为:Abc

    函数

      内置函数:

        http://docs.python.org/3/library/functions.html   (可查看内置函数有哪些,及内置函数的用途)

        调用函数时,参数数量错误/参数类型错误均会报错:typeError,(具体错误原因查看错误信息)

    print(hex(25print(hex(255))  #将255转换为16进制5))  
    
    >>> oxff

        

        参数类型检查  :使用内置函数:isinstance()

    def my_abs(x): 
        if x >= 0:
            return x
        else:
            return -x
    
    print(my_abs('a'))
    
    >>> a
    
    #  上述my_abs 的定义未对参数类型进行检查,应添加定义只允许整数和浮点数类型的参数
    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type for my_abs():{0}'.format(type(x)))
        if x >= 0:
            return x
        else:
            return -x
    
    print(my_abs('a'))
    
    >>>
    Traceback (most recent call last):
      File "C:/Users/viruser.v-desktop/PycharmProjects/hexin/practice/practice.py", line 129, in <module>
        print(my_abs('a'))
      File "C:/Users/viruser.v-desktop/PycharmProjects/hexin/practice/practice.py", line 123, in my_abs
        raise TypeError('bad operand type for my_abs():{0}'.format(type(x)))
    TypeError: bad operand type for my_abs():<type 'str'>

      函数参数

        位置参数:调用函数,按位置输入参数,例power(x),x就为位置参数

    def power(x):   #  计算x2
        return x * x

        

        默认参数: (默认参数降低调用函数的难度,对于有多个参数,其中几个参数基本不变时可采用默认参数)

    def power(x,n=2):  # 默认求x2,求xn时,需输入n对应的值
        s = 1
        while n>0:
            n = n -1
            s = s*x
        return s

          默认参数必须指向不可变对象

    def add_end(L=[]):   # 可修改 L = None
        L.append('end')
        return L
    
    print(add_end([1,2,3]))
    print(add_end(['x','y']))
    print(add_end())
    print(add_end())  # 当默认参数为可变时,定义是,L=[],首次调用时 L=['end']即L的值被改变,,即每次调用时,默认参数的值会被改变,不再是[]
    >>> [1, 2, 3, 'end'] ['x', 'y', 'end'] ['end'] ['end', 'end']

        可变参数:可变参数允许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

             当参数已经是一个list或者tuple时,可将该list/tuper直接作为可变参数传入

    def calc(*numbers):  # 求 a2 + b2 + c2.....
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    
    
    print(calc())
    print(calc(5, 6, 7))
    num = [1, 2, 3, 5, 7, 8, 9]
    print(calc(*num))  # 将该list/tuper直接作为可变参数传入

        

        关键字参数:允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

    def person(name, age, **kw):
        print('name:{0};age:{1};other:{2}' .format(name, age, kw))
    
    person("雨雨", 23, city = 'bj',score = '100')
    
    #  在python2以ascii编码,因此不能直接print(name,age),print(name,age)返回为一个元组,而name为汉字,age为数字,,统一使用ascii编码时汉字会乱码。

          命名关键字参数  :限制关键字参数的名字

    def person(name, age, *, city, job):
        print(name, age, city, job)
    
    >>> person('Jack', 24, city='Beijing', job='Engineer')
    
    Jack 24 Beijing Engineer

    >>>kw = {'city':'bj', 'score':'100'}  
    person("雨雨", 23, **kw)

      递归函数

    # coding=utf-8
    """
      删除列表中相邻重复元素,例,当abbac,删除重复元素bb后,为aac,继续删除aa
    """
    def transfer (s):
        m = len(s)
        for i in range(1, m):
            if s[i] == s[i-1]:
                s.remove(s[i])
                s.remove(s[i-1])
                return transfer(s)   # 此处必须使用return 代表外层函数的结束,若无return代表调用函数执行完继续执行外层函数
        print(s)
    
    s = ['a','b','b','a','c','a']
    transfer(s)

    python 特性

      切片:切片可应用于list、tuper、字符串    

    l = [1,2,3,4]
    print(l[x:y:z])   #x默认为0,y默认为最后一个,z默认为1  

      迭代:迭代可应用于list、tuper、字典、字符串等可迭代对象上

      判断对象是否可迭代 ?

    list = [1,2,3,4,5]
    dict = {'a':1, 'b':2, 'c':3}
    char = ('ABC')
    
    for L in list:
        print(L)
    for i, L in enumerate(list):  # 同时迭代list中的索引和值
        print(i, L)
    
    for key in dict:   # 迭代字典中的key
        print(key)
    for value in dict.values():  # 迭代字典中的value
        print(value)
    for key, value in dict.items():  # 同时迭代字典中的key和value
        print(key,value)
    
    for ch in char:
        print(ch)

      列表生成式 :创建list的生成式

    # 生成list:1,2,3,4,5,6....
    L1 = list(range(1,22))
    
    #  生成[1*1,2*2,3*3...]
    L2 = [x * x for x in range(1,11)]
    
    # 生成[2*2, 4*4, 6*6..]等偶数的平方
    L3 = [x * x for x in range(1,11) if x % 2 == 0]
    
    # 列出当前目录下多有文件和目录名
    import os
    L4 = [d for d in os.listdir('.')]
    
    # 使用两个变量生成列表
    d = {'x': 'A', 'y': 'B', 'z': 'C' }
    L5 = [m + '=' + n for m, n in d.items()]
    
    # 把list中所有字符串变成小写
    L = ['Hello', 'World', 'IBM', 'Apple']
    L6 = [s.lower() for s in L]
    
    # 将列表中所有大写字母变为小写,其余不变
    Ln = ['Hello', 'World', 18, 'Apple', None]
    L7 = [s.lower() if isinstance(s,str) else s for s in Ln ]

      

      生成器:当列表元素可通过某种算法推算出来时,可在循环过程中不断推算出后续的元素

    定义生成器的两种方法:

    第一种:将列表生成式中的【】变为()

    g = (x * x for x in range(10))  # 将列表生成式中的[]变成()该g为一个生成器
    
    # print(g.next())  # 需要获取列表的下一个数据时,不断获取g.next()
    
    ''' for n in g:    # 可通过循环输出所有列表元素
            print(n)
    '''
    for n in range(0,5):   #也可设定输出区间内的列表元素
        print(g.next())

    第二种:yield  :遇到yield时返回,下次执行从上次返回的yield语句出继续执行

    # 斐波拉契数列
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
    '''
     m = fib(10)   # 创建一个generator的对象,然后不断调用next获取下一个返回值
     print(next(m))
    '''
    for n in fib(10): # 使用循环不断调用yield
        print(n)

    例:杨辉三角

    '''杨辉三角'''
    def triangles():
        L = [1]
        while True:
            yield(L)
            L.append(0)
            L = [L[i]+L[i-1] for i in range(len(L))]
            
    m = triangles()
    for t in range(10):
        print(m.next())

      迭代器:可以被next()函数调用并不断返回下一个值得对象成为迭代器 :  Iterator

      凡是可以作用于for的为可迭代对象:Iterable,如list、dict、str; 但可以通过iter()函数获得一个Iterrator对象

    m = [1,2,3] # Iterable
    L = [x for x in range(10)]  # Iterator
    
    M = iter(m)  
    print(M.next())
  • 相关阅读:
    Why Choose Jetty?
    Jetty 的工作原理以及与 Tomcat 的比较
    Tomcat设计模式
    Servlet 工作原理解析
    Tomcat 系统架构
    spring boot 打包方式 spring boot 整合mybaits REST services
    wireshark udp 序列号 User Datagram Protocol UDP
    Maven 的聚合(多模块)和 Parent 继承
    缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis
    Mybatis解决sql中like通配符模糊匹配 构造方法覆盖 mybits 增删改
  • 原文地址:https://www.cnblogs.com/byy521/p/14900618.html
Copyright © 2011-2022 走看看