zoukankan      html  css  js  c++  java
  • python之路-基础篇-第二周

    一、Python解释器:

    • cpython为默认解释器,由C语言开发,目前使用最为广泛。
    • jpython 运行在Java平台上的python解释器,可以直接把Python代码编译成Java字节码执行;与之类似的还有IronPython(.net)
    • PyPy解释器,采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。

    二、推荐一本书:

    python源码剖析


    三、字符编码:

    • 起初,ASCII码,使用一个字节,8位,表示所有内容:256种字符。
      表示数字1:00000001
    • 后来,万国码,unicode,至少2个字节(16位):65536
      表示数字1:0000000000000001
    • 再后来,utf-8,对万国码进行按类压缩,优化存放空间
      数字1:00000001,8位
      汉字:3个字节
      • 在python2.x中存在转换的问题
        unicode -> utf8: encode
        utf8 -> unicode: decode
      • python3.x中不需要考虑此问题

    四、执行脚本传入参数

    使用sys.argv传入参数。

    import sys
    print(sys.argv)
    

    执行结果:

    #比如在脚本中传入三个参数,可是同时传入多个参数:
    
    bogon:day02 felo$ python3 ex.py  argv1 argv2 argv3
    
    ['ex.py', 'argv1', 'argv2', 'argv3']
    
    

    五、缓存

    • 数字:-5到257
    
    >>> a = 1
    
    >>> b = 1
    
    >>> id(a), id(b)        #id一致,在缓冲池中
    
    (4297537952, 4297537952)
    
    >>> a = 10000
    
    >>> b = 10000
    
    >>> id(a),id(b)        #id不一致,不在缓冲池中
    
    (4316106256, 4316105936)
    
    >>> 
    
    
    • 字符串:按某种权重计算,具体的待查。。。
    
    #
    
    >>> a = 'hello'
    
    >>> b = 'hello'
    
    >>> id(a),id(b)
    
    (4367149744, 4367149744)
    
    

    六、字符串相加与格式化

    • 每次字符串相加,都会在内存中开辟新的空间,尽量不用
    >>> print("hello	" + "world.")
    hello	 world.
    
    
    • 使用字符串格式化比较好,可能只创建两次,相对来说更优化一些,建议尽量使用此方法

      • %s:格式化字符串
      • %d:格式化数字
      • %f:格式化浮点数
    >>> name = 'felo'
    >>> print('my name is %s.' % name)
    my name is felo.
    >>> 
    >>> age = 18
    >>> print('my name is %s.
    my age is %d' % (name,age))
    my name is felo.
    my age is 18
    >>> 
    

    七、循环

    • for while (foreach)

    • break;continue;pass;return;exit

      • break:退出整个循环
      • continue: 退出本次循环
      • pass :占位
      • return:函数中使用
      • exit:程序退出,可以添加退出返回值

    八、python中一切都是对象

    对象是基于类创建的,所有的功能都是到类中找的。

    老师的博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html

    使用type(a)能够找到类型,或类型所在的位置


    九、数据类型介绍

    1)数字

    int的一些内置方法: *long,float也类似

    • __abs__方法:求绝对值

    • __add__方法:相加

    • __divmod__方法:元组方式返回除法结果取整和余数

    • __eq__方法:判断是否相等,返回布尔值

    • __float__方法:转化为浮点数

    • __floatdiv__方法:地板除,与5//6等价

    • __init__方法:类的构造方法,在创建对象的时候调用

    • __pow__方法:幂

    举例:

    
    a = 100
    print('divmod 方法:a/7')
    print(a.__divmod__(7))
    
    print('
    abs方法:a的绝对值')
    print(abs(a))
    print(a.__abs__())
    
    print('
    add方法:a+7')
    print(a.__add__(7))
    print(a+7)
    

    结果:

    
    divmod 方法:a/7
    
    (14, 2)
    
    
    
    abs方法:a的绝对值
    
    100
    
    100
    
    
    
    add方法:a+7
    
    107
    
    107
    
    

    2)字符串

    查看类型以及类中成员:

    type():返回类名

    dir():返回类成员

    #例子:
    name = 'felo'
    print(type(name))
    print(dir(name))
    

    执行结果:

    
    <class 'str'>         #str类型
    
    #str的类成员
    
    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
    
    

    几个字符串常见方法:

    name = str('eric')
    result = name.__contains__('er')                #此方法与in等价
    print(result)
    print('er' in name)            #in和__contains__一致
    #
    # ###python2.x中方法,3.x中不存在
    # name = 'eric{0}'
    # name.__format__('alex')
    # print(name)
    
    
    name = 'eric'
    result = name.capitalize()    #首字母大写
    print(result)
    
    result = name.casefold()        #所有字符小写
    print(result)
    
    result = name.center(20, '*')   #居中显示,其余用*号填充
    print(result)
    
    result = name.endswith('x', 0, 3)   #切片判断以‘x’结尾
    print(result)
    
    result = name.startswith('e', 1, 3)     #切片判断以‘e’开头
    print(result)
    
    name = '理解'
    result = name.encode('gbk')         #编码为gbk格式,默认是utf-8
    print(result)
    

    执行结果:

    
    True
    
    True
    
    Eric
    
    eric
    
    ********eric********
    
    False
    
    False
    
    b'xc0xedxbdxe2'
    
    

    另外一些方法:

    name = 'a	lex'
    result = name.expandtabs()      #将TAB转换成空格,默认8个
    print(result)
    #可以将脚本转化,这样就不会因为空格或者TAB的原因导致脚本不能执行
    执行结果:(只有7个空格,不知道为啥?)
    a       lex
    
    name = 'alex'
    result = name.find('ex')     #返回找到的位置,没找到就返回-1
    result2 = name.find('b')
    print(result,result2)
    执行结果:
    2 -1
    
    name = 'alex'
    result = name.index('ex')   #返回找到的位置,没找到返回错误
    print(result)
    result2 = name.index('b')
    print(result2)
    执行结果:
    Traceback (most recent call last)
    File "C:/Users/yangfl/PycharmProjects/test/h.py", line 6, in <module>
     result2 = name.index('b')
    ValueError: substring not found
    2
    
    name = 'alex {0} as {1}'
    result = name.format('sb', 'eric')      #字符串拼接
    print(result)
    执行结果:
    alex sb as eric
    
    name = 'alex {name} as {id}'
    result = name.format(name='sb', id='eric')      #字符串拼接
    print(result)
    执行结果:
    alex sb as eric
    
    li = ['s', 'b', 'a', 'l', 'e', 'x']
    result = '_'.join(li)       #将序列连接起来,使用'_'
    print(result)
    执行结果:
    s_b_a_l_e_x
    
    name = 'alex'
    result = name.ljust(10, '_')    #居左,其余均以"_"填充
    result2 = name.rjust(10, '_')   #居右,其余均以"_"填充
    print(result)
    print(result2)
    
    执行结果:
    alex______
    ______alex
    
    name = '   alex   '
    result = name.rstrip()      #删除右边空格
    result2 = name.lstrip()     #删除左边空格
    result3 = name.strip()      #删除两边空格
    print(result)
    print(result2)
    print(result3)
    
    执行结果:
       alex
    alex   
    alex
    
    
    # name.lstrip()       #删除左空格
    # name.rstrip()
    # name.maketrans()    #有空试下
    
    name = 'alexissb'
    result = name.partition('is')       #字符串分成三个部分
    print(result)
    
    result = name.replace('a', 'o', 1)     #替换,第三个参数为替换的个数
    print(result)
    
    # name.rfind()
    # name.rindex()
    # name.rpartition()
    
    result = name.rsplit('i')        #这两个没什么区别,不用在意
    print(result)
    result = name.split('i')
    print(result)
    

    3)列表

    列表是python中最为灵活的有序集合类型:

    • 任意对象的有序集合
      • 可以收集其他任意对象,而且按照由左至右的顺序排列
    • 通过偏移读取整
      • 与字符串类似
    • 可变长度,异构以及任意嵌套
      • 长度可变
    • 能够包含数字,字符串等
      • 属于可变序列的分类
      • 可在原序列操作删除、索引赋值等
    • 对象引用数组
      • 在标准的python解释器中,列表就是C数组而不是链接结构。

    列表中常用方法:(列表类中的常用成员)

    • 切片操作:
    
    li1 = [1, 2, 3, 4]
    print(li1[1:2])	 #大于等于1,小于2号索引
    print(li1[:2])	 #小于2号索引
    print(li1[1:])	 #大于1号索引
    print(li1[0:3:2])	 #大于等于0,小于3,相隔2
    print(li1[:-1])	 #-1之前
    
    执行结果:
    [2]
    [1, 2]
    [2, 3, 4]
    [1, 3]
    [1, 2, 3]
    
    
    
    li1 =[11, 11, 22, 33]
    li1.append(44)
    print(li1)
    
    li1.clear()
    print(li1)
    
    
    li1 = [11, 11, 22, 33]
    result = li1.pop(3)      #按下标删除
    print(result)
    
    li1 = [11,11,22,33]
    li1.remove(11)    #按值删除,默认删除第一个
    print(li1)
    
    li1 = [11,11,22,33]
    li1.reverse()       #翻转
    print(li1)
    
    

    执行结果:

    
    [11, 11, 22, 33, 44]
    
    []
    
    33
    
    [11, 22, 33]
    
    [33, 22, 11, 11]
    
    

    4)元组

    
    tu = (11, 22, 34,)
    li = list(tu)
    print(tu)
    print(li)
    
    #元组中就两个成员需要注意
    # tu.count()
    
    # tu.index()
    
    

    5)字典

    #dic = {'k1':'v1','k2':'v2'}
    dic = dict(k1='v1', k2='v2')
    
    new_dic = dic.fromkeys(['k1', 'k2'], 'v1000')
    print(new_dic)
    
    print(dic['k1'])
    print(dic['k2'])
    #print(dic['k3'])       #报错
    print(dic.get('k3'))
    print(dic.get('k3', 'alex'))        #'k3'不存在的时候使用'alex'
    
    dic = dict(k1='v1', k2='v2')
    dic.pop('k1')           #指定key
    print(dic)
    
    dic = dict(k1='v1', k2='v2')
    dic.popitem()       #无序的
    print(dic)
    
    dic['k3'] = 123
    dic.setdefault('k4')        #默认值None
    print(dic)
    
    dic = dict(k1='v1', k2='v2')
    dic.update({'k3':123})
    print(dic)
    
    执行结果:
    {'k1': 'v1000', 'k2': 'v1000'}
    v1
    v2
    None
    alex
    {'k2': 'v2'}
    {'k1': 'v1'}
    {'k4': None, 'k3': 123, 'k1': 'v1'}
    {'k2': 'v2', 'k3': 123, 'k1': 'v1'}
    

    举个小例子,将列表中小于66的数字和大于等于66的数字分成两部分,并将他们存放到字典中。
    这几个数是:11, 22, 33, 44, 55, 66, 77, 88, 99, 90

    li1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90, ]
    dic = {}
    
    for i in li1:
        if i > 66:
            if 'k1' in dic.keys():
                dic['k1'].append(i)    #dic中key存在,value列表后追加i
            else:
                dic['k1'] = [i, ]    #dic中key不存在,新建一个,并将i做成列表赋值给这个key
        else:
            if 'k2' in dic.keys():
                dic['k2'].append(i)
            else:
                dic['k2'] = [i, ]
    
    print(dic)
    
    
    
  • 相关阅读:
    14、java中的equals()和toString()方法
    13、java中的多态
    1、editplus中将选取向前移动
    《Java4Android视频教程》学习笔记(一)
    android 构建数据库SQLite
    SWOT自我分析
    函数传递是如何让HTTP服务器工作的
    Node.js模块
    Viewcontrol的生命周期
    iOS开发-用宏定义求2个数中的最大值
  • 原文地址:https://www.cnblogs.com/felo/p/5131657.html
Copyright © 2011-2022 走看看