zoukankan      html  css  js  c++  java
  • python面试必备-基础篇

    一.python中and, or, and-or语法

      1.and   有假先出假

      在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。

      在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。

    如果布尔上下文中的某个值为假,则 and 返回第一个假值.

    0, '' , [] , {}都是假

    >>> 'a' and 'b'
    'b'
    >>> '' and 'b'
    ''
    >>> 'a' and 'b' and 'c'
    'c'
    >>> True and False
    False

      2.or   有真先出真

      使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值

      如果所有的值都为假,or 返回最后一个假值

      注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值

      

    >>> 'a' or 'b'
    'a'
    >>> '' or 'b'
    'b'
    >>> '' or [] or {}
    {}
    >>> 0 or 'a' or 'c'
    'a'

      

      3.and-or:

    类似三目运算:"(a<b)?a:b"是一个"条件表达式",它是这样执行的: 如果a<b为真,则表达式取a值,否则取b值.

    这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and 'first' 演算值为 'first',然后 'first' or 'second' 的演算值为 'first'

    0 and 'first' 演算值为 False,然后 0 or 'second' 演算值为 'second'

    and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。

    and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。

    >>> a='first'
    >>> b='second'
    >>> 1 and a or b
    'first'
    >>> (1 and a) or b
    'first'
    >>> 0 and a or b
    'second'
    >>> (0 and a) or b
    'second'
    >>> 

      4.安全使用and-or

    >>> a=""
    >>> b="second"
    >>> (1 and [a] or [b])
    ['']
    >>> (1 and [a] or [b])[0]
    ''
    >>> 

    由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。

    一个负责的程序员应该将 and-or 技巧封装成一个函数:

    def choose(bool,a,b):
        return (bool and [a] or [b])[0]
    
    print  choose(1,'','second')    #''

    二.python中filter()函数

    filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    三.python中的map()函数

    四.python中的sort()函数

    五.什么是lambda函数?它有什么好处?

    lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
    lambda函数:首要用途是指点短小的回调函数
    lambda [arguments]:expression
    >>> a=lambdax,y:x+y
    >>> a(3,11)

    五.Python-copy()与deepcopy()区别

    浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了引用,并没有拷贝内容

     深拷贝是对于一个对象所有层次的拷贝(递归)

    深拷贝和浅拷贝 都会给自己开辟一片空间存储数据

    不同点: 

    浅拷贝---只是开辟了最底层的一片空间 然后拷贝顶层引用

    深拷贝---完全的把数据复制过来 开辟新的空间去存储数据  实现了数据的独立性

    切片拷贝 : 浅拷贝
    字典的拷贝 : 浅拷贝

    不可变类型(元组)----深拷贝浅拷贝都不会开辟空间了

    注意点:
    浅拷贝 不管元组中的数据是什么 都不会开辟空间
    深拷贝 只要数据含有可变的类型 都会开辟空间进行递归拷贝

    可变类型 Vs 不可变类型

    可变类型(mutable):列表,字典

    不可变类型(unmutable):数字,字符串,元组

    这里的可变不可变,是指内存中的那块内容(value)是否可以被改变

    copy.copy对于可变类型,会进行浅拷贝

         对于不可变类型,不会拷贝,仅仅是指向

    03 私有化
    _xxx 防止被导入
    私有属性并非不可被外部访问
    xxx_ 解决关键字重名的问题

    04 import的导入
    import xxx
    import xxx,yyy
    from xxx import *
    from xxx import yyy
    from xxx import yyy,zzz
    import xxx as yyy


    1 a.py


    2 import a as b
    b.xxx
    a = 10

    路径问题 import sys
    sys.path
    sys.path.insert(0,"xxx")

    模块重复导入的问题
    from imp import reload

    多模块开发的时候 导入公共变量
    import

    05 多态的发生条件
    1.发生继承
    2.方法重写
    3.调用被重写的方法
    同一种形式 产生了不同的状态


    01_多继承
    1 父类名字.父类的方法 (需要self)
    2 super().父类的方法 (不需要self)

    1 浪费资源,造成bug
    2 不会重复调用父类 __mro__顺序表

    结论: 使用多继承的时候 使用super()

    02_类中的各种概念
    类对象 存放类相关的数据空间
    实例对象 存放实例相关的数据的空间

    类属性 存放在类空间中的属性
    实例属性 存放在实例空间中属性

    类方法 改变类属性的(默认就是类空间地址)
    实例方法 改变实例属性
    静态方法 谁也改变不了

    实例对象可以调用类方法

    03_property属性
    定义的时候像函数一样 使用的时候像属性一样

    作用: 简化 私有属性的修改 调用 的流程

    其他资料:

    https://www.cnblogs.com/tom-gao/p/6645859.html

  • 相关阅读:
    Redis哨兵(Sentinel)模式
    一个http请求就是一个线程吗,java的服务是每收到一个请求就新开一个线程来处理吗
    Redis 快速入门
    Redis 持久化之RDB和AOF
    Junit 入门使用教程 转自:http://www.cnblogs.com/ysocean/p/6889906.html
    Spring里PropertyPlaceholderConfigurer类的使用 转自:https://www.cnblogs.com/huqianliang/p/5673701.html
    Apache Commons Codec 编码/解码 (Base64/MD5/SHA1/SHA256等算法) 转自https://blog.csdn.net/hbtj_1216/article/details/52813741
    hive中时间日期函数的使用
    关于mat函数
    strip 和split
  • 原文地址:https://www.cnblogs.com/snailon/p/8992803.html
Copyright © 2011-2022 走看看