• 素数、杨辉三角、封装结构和集合操作(15)——IPython使用和封装解构


    IPython使用

    帮助

    ?  ##Ipython的概述和简介

    help(name)  ##查询指定名称和帮助

    obj?  ##列出obj对象的详细信息

    obj??  ##列出更详细的信息

    特殊变量

    _表示前一次输出

    __表示前二次输出

    ___表示前三次输出

    _oh 输出历史

    _oh
    {4: 100, 5: 100, 6: 100, 10: [1, 2, 3, 4]}
    
    c=_
    c
    [1, 2, 3, 4]

    pwd 当前目录

    _dh 目录历史

    pwd
    'C:\Users\Administrator'
    
    cd c:
    c:
    
    _dh
    ['C:\Users\Administrator', 'c:\']

    shell命令

    !command调用shell命令

    !ls
    'ls' is not recognized as an internal or external command,
    operable program or batch file.
    
    !dir
     Volume in drive C has no label.
     Volume Serial Number is A494-4369
    
     Directory of c:
    
    2019/10/12  17:34    <DIR>          FusionCloud6.1
    2019/10/15  16:33    <DIR>          installtool
    2019/10/28  15:16    <DIR>          Program Files
    2019/10/31  18:02    <DIR>          Program Files (x86)
    2019/08/12  14:45    <DIR>          Users
    2019/10/31  17:55    <DIR>          vms
    2019/11/01  09:25    <DIR>          Windows
                   0 File(s)              0 bytes
                   8 Dir(s)  29,517,729,792 bytes free

    魔术方法

    IPython的内部实现,和操作系统无关

    使用%百分号开头,IPython内置的特殊方法

    %magic格式

      %开头是line magic

      %%开头是cell magic

    %timeit statement

    def primenumber():
        n=9
        row=[1]*n  ##一次性开辟全部空间
        for i in range(n):
            old=1
            for j in range(i//2):
                va=old+row[j+1]
                old=row[j+1]  ##row[j+1]将被覆盖,通过变量old先将row[j+1]保留
                row[j+1]=va
                if i !=2*(j+1):
                    row[i-(j+1)]=row[j+1]
                else:
                    pass 
        #           print('***')
        #    print(row[:i+1])  ##切片打印列表
    
    %timeit primenumber()
    16.7 µs ± 348 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

    %%timeit setup_code

    %%timeit
    n=9
    row=[1]*n  ##一次性开辟全部空间
    for i in range(n):
        old=1
        for j in range(i//2):
            va=old+row[j+1]
            old=row[j+1]  ##row[j+1]将被覆盖,通过变量old先将row[j+1]保留
            row[j+1]=va
            if i !=2*(j+1):
                row[i-(j+1)]=row[j+1]
            else:
                pass 
    #           print('***')
    #    print(row[:i+1])  ##切片打印列表
    17.4 µs ± 1.69 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    def prime1(limit):
        primenumbers=[2]
        for x in range(3,limit,2):
            for i in range(3,int(x**0.5)+1,2):
                if x%i==0:
                    break
            else:
                primenumbers.append(x)
        return primenumbers
    
    %timeit prime1(100)
    75.1 µs ± 1.14 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
    def prime2(limit):
        primenumbers=[3,5]
        x=7
        step=4
        while x<limit:
            if x%5!=0:
                for i in range(3,int(x**0.5)+1,2):
                    if x%i==0:
                        break
                else:
                    primenumbers.append(x)
            x+=step
            step=4 if step==2 else 2
        return primenumbers
    
    %timeit prime2(100)
    51.1 µs ± 1.45 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

     %%js、%%javascript在cell中运行js脚本

    %%js
    console.log('a'+20)
    
    %%js
    alert('a'+20)

    封装和解构

    封装

    将多个值使用逗号分割,组合在一起

    本质上,返回一个元组,只是省掉了小括号

    t3=1,2    ##将1和2封装成元组
    t3
    (1, 2)
    
    type(t3)
    tuple

    交换

    a=1
    b=2
    
    temp=a
    a=b
    b=temp
    
    等价于
    
    a,b=b,a    ##等号右边使用封装,等号左边使用解构

    解构

    把线性结构的元素拆开,并顺序的赋给其它变量

    左边接纳的变量数要和右边解开的元素个数一致

    a,b=1,2
    a,b
    (1, 2)
    
    a,b=(1,2)
    a,b
    (1, 2)
    
    a,b=[1,2]
    a,b
    (1, 2)
    
    a,b={1,2}
    a,b
    (1, 2)
    
    a,b={'a':10,'b':20}    ##非线性结构也可以解构
    a,b
    ('a', 'b')
    
    a,b={1,2,3}    ##左右两边数量必须一致
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-79-14e2385ba548> in <module>
    ----> 1 a,b={1,2,3}
    
    ValueError: too many values to unpack (expected 2)

    使用 *变量名 接受,但不能单独使用

    被 *变量名 收集后一定组成一个列表

    a,*b={1,2,3}
    a,b
    (1, [2, 3])
    
    [a,b]=1,2
    a,b
    (1, 2)
    
    [a,b]=(1,2)
    a,b
    (1, 2)
    
    a,b={1,2}
    a,b
    (1, 2)
    
    lst=list(range(1,21,2))
    lst
    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    
    a,*b,c=lst
    a,b,c
    (1, [3, 5, 7, 9, 11, 13, 15, 17], 19)
    
    *b=lst
      File "<ipython-input-87-67fc0332f20f>", line 4
    SyntaxError: starred assignment target must be in a list or tuple
    
    *b,c=lst
    b,c
    ([1, 3, 5, 7, 9, 11, 13, 15, 17], 19)
    
    a,*b,*c,d=lst
      File "<ipython-input-89-6b365811e22f>", line 4
    SyntaxError: two starred expressions in assignment
    
    a,*b,c='abcdefghijklmn'
    a,b,c
    ('a', ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'], 'n')
    
    a,b,c,*d=1,2,3
    a,b,c,d
    (1, 2, 3, [])
    
    type(d)
    list

    解构嵌套元素

    a,b,c=[1,[2,3],4]
    a,b,c
    (1, [2, 3], 4)
    
    a,b,c,d=[1,[2,3],4]
    a,b,c,d
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-95-b018a82d86b2> in <module>
    ----> 1 a,b,c,d=[1,[2,3],4]
          2 a,b,c,d
    
    ValueError: not enough values to unpack (expected 4, got 3)
    
    a,(b,c),d=[1,[2,3],4]
    a,b,c,d
    (1, 2, 3, 4)

    丢弃变量

    如果不关心一个变量,就可以定义变量的名字为_

    _是一个合法的标识符,也可以作为一个有效的变量使用,但是_这个变量本身无任何语义,没有任何可读性,定义成下划线就是希望不要被使用

    Python中很多库,都使用这个变量,使用十分广泛,请不要在不明确变量作用域的情况下,使用_导致和库中_冲突

    lst=1,2,3,4
    a,*_,c=lst
    a,c,_
    (1, 4, [2, 3])
    
    lst=list(range(10))##取出第二个,第四个,倒数第二个元素
    _,a,_,b,*_,c,_=lst
    a,b,c
    (1, 3, 8)

    练习

    1.从lst=[1,(2,3,4),5]中,提取4出来

    lst=[1,(2,3,4),5]
    _,(*_,a),_=lst
    a
    4

    2.环境变量JAVA_HOME=/usr/bin(字符串),返回环境变量名和路径

    vir='JAVA_HOME=/usr/bin'
    a,b=vir.split('=')
    print('a={}'.format(a))
    print('b={}'.format(b))
    a=JAVA_HOME
    b=/usr/bin
  • 相关阅读:
    js数组求交集
    php安装oci8和pdo_oci扩展实现连接oracle数据库
    nginx配置静态资源压缩
    SHELL递归遍历文件夹下所有文件
    PHP函数获取临时文件目录
    php去除文件bom头
    tcpdump抓取udp报文
    linux获取当前运行级别
    当安装软件后提示依赖没有安装时
    Ubuntu卸载通过apt-get命令安装的软件
  • 原文地址:https://www.cnblogs.com/omgasw/p/11776066.html
Copyright © 2020-2023  润新知