• 小知识点


    1、逻辑运算符的优先级

    ()>not>and>or

    两边都是数字:

    x or y,if x is True,return x(and 与之相反)

    example:

    1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 #True
    not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6   #False

     2、split(小bug)

    name=' alex taibai linhaifeng'
    print(name.split())      #['alex', 'taibai', 'linhaifeng']
    print(name.split(' '))      #['', 'alex', 'taibai', 'linhaifeng']

     3、切片修改列表

    li=[1,2,3,4,5]
    li[0:3]='abcde'
    print(li)

    4、input 后都带上strip

    content=input(">>>:").strip()
    

    5、可变不可变:可哈希的就是不可变的

     lst='aaaggfwr24224234'
    print(hash(lst))

    6、字典的键值对交换

    dic={'a':1,"b":2}
    dic2={v:k  for k,v in dic.items()}
    print(dic2)

    7、函数闭包

    闭包必须满足一下条件:
    1)必须嵌套函数 2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
    def count():
        fs = []
        for i in range(1, 4):
            def f():
                return i * i
            fs.append(f)
        return fs
    f1, f2, f3 = count()
    print(f1(),f2(),f3())   # 9 9 9 
    #列表里存的是f这个函数,当f1,f2,f3执行时,i已经变成了3
    def foo():
        fs=[]
        for i in range(1,4):
            def f(i):
                def g():
                    return i*i
                return g
            fs.append(f(i))
        return fs
    print (foo())
    print (foo()[0]())

    8 默认参数为可变类型

    def extend_list(val, list=[]):
        list.append(val)
        return list
    
    list1 = extend_list(10)
    list2 = extend_list(123, [])
    list3 = extend_list('a')
    print(list1) 
    print(list2)
    print(list3)
    [10, 'a']
    [123]
    [10, 'a']

    9.send

    #1.能达到__next__的功能,可以取下个值
    #2.参数是作为上一个yield的返回值。
    #坑:1.send不能正常放在最前面,若有放最前面,参数必须为None
    #2.最后一个yield也不能接受到send的值

     10、计算一个列表中出现频率最高的元素

    ls = [1,2,3,1,2,3,2,2,1,2,3,2,1,1,2,3]
    print(max(set(ls), key=ls.count))

    11、转置二维数组如:[['a','b'],['c','d'],['e','f']] --->[['a', 'c', 'e'], ['b', 'd', 'f']]

    ls = [['a','b'],['c','d'],['e','f']]
    print(list(map(list,(zip(*ls)))))

     12、链式函数的使用

    def my_add(x,y):
        return x+y
    def my_mtl(x,y):
        return x*y
    flag=True
    print((my_add if flag else my_mtl)(1,2) )

     13、列表推导式和生成器函数的比较

    v = [lambda :x for x in range(10)]
    print(v[0]())
    #输出为9
    
    v = (lambda :x for x in range(10))
    print(next(v)()) 
    #输出为0

    14、类初始化过程

    1、开辟一个内存空间用于存储对象属性
    2、利用类对象指针找到类执行init方法
    3、给对象封装属性
    4、自动返回封装后的对象

    15、经典类和新式类的区别

    1、新式类继承Object
    2、新式类有mro
    3.super查找顺序是按mro
    4、新式类广度优先,经典类深度优先

     16、多态和多态性

    多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)
    
    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,
    不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,
    即执行不同的函数。17、

     17、super 

    class A:
        def func(self):
            print('A')
    
    class B(A):
        def func(self):
            super().func()
            print('B')
    
    class C(A):
        def func(self):
            super().func()
            print('C')
    
    class D(B,C):
        def func(self):
            super().func()
            print('D')
    print(D.mro())
    D().func()

    输入如下:

     18、fromkeys

    d = dict.fromkeys([1,2,3],[])
    d[1].append('666')
    print(d)

     19、yield和yield from 的区别

    def fun():
        for i in 'abc':
            yield i
    g  = fun ()
    print(list(g))

    上面等价于:

    def fun():
        yield from 'abc'
    g  = fun ()
    print(list(g))

     20、进制之间的转换

    v = 0b1111011
    print(int(v))
    # 十进制转二进制
    v = 123
    print(bin(v))
    #八进制转十进制
    v = 0o12
    print(int(v))
    #十进制转八进制
    print(oct(10))
    #同上,十六进制 hex
  • 相关阅读:
    不同浏览器对于js中for循环的判断
    png格式图片背景不透明问题解决
    qq登陆错误提示
    T职场人生系列之二十四:程序员如何增加收入
    if [ $# eq 0 ]该语句是什么含义?
    动态IP修改注册表降低PING值教程(XP系统)
    c# List列表数据转换成树形结构
    net core EF 链接mysql 数据库
    net core 部署到windows 服务
    IdentityServer4 密码模式认证
  • 原文地址:https://www.cnblogs.com/linshuhui/p/9428440.html
Copyright © 2020-2023  润新知