zoukankan      html  css  js  c++  java
  • python面试问题

    python2  V.S. python3

    1)默认编码方式

    python2默认ascii编码,python3默认使用unicode(utf-8).

    涉及中文,python2需在文件头出添加# -*- coding: utf-8 -*-  或在python的Libsite-packages文件夹下新建一个sitecustomize.py,内容为:

    1. # encoding=utf8  
    2. import sys  
    3. reload(sys)  
    4. sys.setdefaultencoding('utf8')  

    或在涉及到的每一个位置,s.decode(sys.getdefaltencoding()).encode('utf-8')

    2)print:python3需要加括号。

    3)整除:python2和python3都认为//是整除,不同的是 / ,3/2  python2是1,python3是1.5。    3./2  python2才是1.5.

    4)迭代器

    python2   xrange  ; python3  range

    字典dict.keys() dict.values() dict.items()  python2返回列表,python3返回view对象,类似迭代器。

    map filter 从函数变成了类,其返回结果从列表变成了可迭代对象

    5)不等于运算符:python2 不等号可以是<>或!=;python3只有!=

    6)数据类型:————

    7)True和False:python2中True和Flase是两个全局变量,可被重新赋值;python3将其变为两个关键字,补个被赋值。

    8)nonlocal:global可用于函数内部修改全局变量的值,而在嵌套函数中想要声明一个全局变量是没办法实现的,python3新增nonlocal关键字,实现了该功能。

    9)解析用户输入python2 input()只接受数字,raw_input()接受字符串,python3中只有input() ,接收字符串。

    单下划线和双下划线的区别

    __foo__: 定义的是特殊方法,一般是系统定义名字,防止与用户定义的变量名冲突 ,类似 __init__() 之类的。
    _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
    __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。如果子类想要访问父类中的私有变量或方法,可以使用 实例._父类名__foo
    foo:就是public方法

    设计模式有什么用

    是前人对于代码的经验和思想的总结,包括代码的可重用性、可靠性,是否容易理解和扩展,是否容易维护。

    重写和重载的区别

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 
    重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载
    的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

     python中有垃圾回收机制,在以下情况下仍然会有内存泄漏的问题:

    • 对象一直被全局变量所引用, 全局变量生命周期长.
    • 垃圾回收机被禁用或者设置成debug状态, 垃圾回收的内存不会被释放.
    • 循环引用过多, gc 无法及时释放

    为什么python中的list不能当做dict的key

    dict必须要保证当同样的内容进来的时候,能够找到该内容对应的值,也就是如果内容相同

    对应的哈希值应当相同。

    而对于list的hash函数,可能存在两种实现方式:

    1)基于id。基于id实现hash可以保证,两个对象的hash值不同,他们的id不同,但是,

    当两个对象的内容相同时,他们的id也可能不同,创建以个一模一样的list用字典查找永远

    会得到一个KeyError.

    2)基于内容。tuple就是这样做的,tuple不可修改,基于内容方法对于同一个tuple来说其hash值不会改变,而对于同一个list而言,list的内容改变了,其hash值就改变了,因此,对于某一个list来说,基于内容的方法不可能生成一个固定的哈希值。

    python中已经有了list,为什么还要使用tuple?

    1)tuple可以作为dict的key

    2)如果我们想要把一个list传给一个函数,但又不想让该函数改变list的值,就可以把该list转化成tuple,通过类型的限制让函数不能更改。

    3)由于tuple不可改变,因此在声明的时候,只需要分配恰好的内存即可,更节省空间,而list由于需要改变,声明时会分配更多的内存。

  • 相关阅读:
    BestCoder17 1001.Chessboard(hdu 5100) 解题报告
    codeforces 485A.Factory 解题报告
    codeforces 485B Valuable Resources 解题报告
    BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
    codeforces 374A Inna and Pink Pony 解题报告
    codeforces 483B Friends and Presents 解题报告
    BestCoder15 1002.Instruction(hdu 5083) 解题报告
    codeforces 483C.Diverse Permutation 解题报告
    codeforces 483A. Counterexample 解题报告
    NSArray中地内存管理 理解
  • 原文地址:https://www.cnblogs.com/yvlian/p/13201487.html
Copyright © 2011-2022 走看看