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())
  • 相关阅读:
    蘑菇街2016校园招聘第一个编程题
    杭州天丽笔试题
    2016校园招聘 cvte一面被问到的面试题目
    C#中ArrayList,List,数组的区别
    大白话讲解.NET中挂起线程的Thread.Sleep()方法
    OutLook邮箱获取授权码
    EPIC全速下载游戏加速教程
    远程服务器提示:身份验证错误 要求的函数不受支持解决办法汇总-- Windows远程桌面连接
    华硕主板重装系统以后BIOS设置的启动项就没有了,开机就进BIOS,不进系统
    Windows10访问共享文件夹:此用户无法登录,因为该账户当前已被禁用此用户无法登录,因为该账户当前已被禁用或者直接找不到相应的计算机解决办法
  • 原文地址:https://www.cnblogs.com/byy521/p/14900618.html
Copyright © 2011-2022 走看看