美文网首页python热爱者Python新世界
机缘巧合从华为弄来的40道python面试题,考的竟然都是基础知

机缘巧合从华为弄来的40道python面试题,考的竟然都是基础知

作者: 48e0a32026ae | 来源:发表于2018-12-21 11:08 被阅读0次

    1.Python所遵循的代码规范是什么?

    PEP8规范

    2.将字符串"k:1|k1:2|k2:3|k3:4",处理成Python字典:{‘k’:1, ‘k1’:2, ... }

    a)答案1

    s = "k:1|k1:2|k2:3|k3:4"

    {x[:-1]:int(x[-1]) for x in s.split('|')}

    b)答案2

    s1 = "k:1|k1:2|k2:3|k3:4"

    dict1 = {}

    for items in s1.split('|'):

    k,v = items.split(':')

    dict1[k] = int(v)

    print(dict1)

    3.将列表l1= ['b','c','d','b','c','a','a']进行去重操作,保留元素原来的顺序。

    a)答案1

    l1 = ['b','c','d','b','c','a','a']

    l2 = list(set(l1))

    l2.sort(key=l1.index)

    print(l2)

    b)答案2

    list({j:j for j in l1})

    c)答案3

    l1 = ['b','c','d','b','c','a','a']

    l2 = sorted(set(l1),key=l1.index)

    print(l2)

    d)答案4

    l1 = ['b','c','d','b','c','a','a']

    l2 = []

    for i in l1:

    if not i in l2:

    l2.append(i)

    print(l2)

    4.内存泄露是什么?如何避免?

    指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。导致程序运行速度减慢甚至系统崩溃等严重后果。

    有 __del__() 函数的对象间的循环引用是导致内存泄漏的主凶。

    不使用一个对象时使用:del object 来删除一个对象的引用计数就可以有效防止内存泄漏问题。 通过Python 扩展模块 gc 来查看不能回收的对象的详细信息。

    可以通过 sys.getrefcount(obj) 来获取对象的引用计数,并根据返回值是否为 0 来判断是否内存泄露

    5.谈谈你对面向对象的理解?

    面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。在面向对象语言中有一个有很重要东西,叫做类。

    面向对象有三大特性:封装、继承、多态。

    什么是封装?

    所谓的面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面,这就是封装。封装是我们所说的面相对象编程的特征之一。除此之外还有继承和多态。

    什么是继承?

    继承有点类似与我们生物学上的遗传,就是子类的一些特征是来源于父类的,儿子遗传了父亲或母亲的一些性格,或者相貌,又或者是运动天赋。有点种瓜得瓜种豆得豆的意思。面向对象里的继承也就是父类的相关的属性,可以被子类重复使用,子类不必再在自己的类里面重新定义一回,父类里有点我们只要拿过来用就好了。而对于自己类里面需要用到的新的属性和方法,子类就可以自己来扩展了。

    什么是多态?

    我们在有一些方法在父类已经定义好了,但是子类我们自己再用的时候,发现,其实,我们的虽然都是计算工资的,但是普通员工的工资计算方法跟经理的计算方法是不一样的,所以这个时候,我们就不能直接调用父类的这个计算工资的方法了。这个时候我们就需要用到面向对象的另一个特性,多态。我们要在子类里面把父类里面定义计算工资的方法在子类里面重新实现一遍。多态包含了重载和重写。

    什么是重写?

    重写很简单就是把子类从父亲类里继承下来的方法重新写一遍,这样,父类里相同的方法就被覆盖了,当然啦,你还是可以通过super.CaculSalary方法来调用父类的工资计算方法。

    什么是重载?

    重载就是类里面相同方法名,不同形参的情况,可以是形参类型不同或者形参个数不同,或者形参顺序不同,但是不能使返回值类型不同。

    6.手写匹配邮箱的正则表达式

    ^([0-9a-zA-Z_.-])+@([0-9a-zA-Z_-])+(.([a-zA-Z_-])+)+$

    7.编写一个输出斐波那契数列的函数,输入数字N,打印斐波那契数列的前N项

    n = int(input('打印斐波那契数列的第__项'))

    def fib(n):

    f1=f2=1

    for k in range(n):

    print(f1)

    f1,f2 = f2,f1+f2

    fib(n)

    8. Python2和Python3的区别

    (1)Print

    在 Python 2 中, print 被视为一个语句而不是一个函数,这是一个典型的容易弄混的地方,因为在Python 中的许多操作都需要括号内的参数来执行。如果在 Python 2 中你想要你的控制台输出 ”hellow word”,你应该写下这样的 print 语句:

    print "hellow word"

    在使用 Python 3 时,print()会被显式地视为一个函数,因此要输出上面相同的字符串,你可以使用这种非常简单且易于使用的函数语法

    print("hellow word")

    这种改变使得 Python 的语法更加一致,并且在不同的 print 函数之间进行切换更加容易。就方便性而言,print()语法也与 Python 2.7 向后兼容,因此您的 Python 3 print()函数可以在任一版本中运行。

    (2)整数的除法

    在 Python 2 中,您键入的任何不带小数的数字,将被视为整数的编程类型。虽然乍看起来这似乎是一个简单的处理编程类型的方法,但有时候当你试图除以整数以期望获得一个带小数位的答案(称为浮点数),如:

    5 / 2 = 2.5

    然而,在 Python 2 中,整数是强类型的,并且不会变成带小数位的浮点数,即使这样做具有直观上的意义。

    当除法/符号的任一侧的两个数字是整数时,Python 2进行底除法,使得对于商x,返回的数字是小于或等于x的最大整数。这意味着当你写下 5 / 2 来对这两个数字相除时,Python 2.7 将返回最大的小于或等于2.5 的整数,在这种情形下:

    a = 5 / 2

    print a

    #a=2

    为解决这个问题,你可以在 5.0 / 2.0 中添加小数位,以得到预期的答案 2.5。

    在 Python 3 中,整数除法变得更直观,如

    a = 5 / 2

    print(a)

    #a=2.5

    你也可以使用 5.0 / 2.0 返回 2.5,但是如果你想做底层划分,你应该使用 “//” 这样的 Python 3 语法,像这样:

    b = 5 // 2

    print(b)

    #b=2

    在 Python 3 中的这种修改使得整数除法更为直观,并且它的特点是不能向后兼容 Python 2.7。

    (3)支持 Unicode

    当编程语言处理字符串类型时,也就是一个字符序列,它们可以用几种不同的方式来做,以便计算机将数字转换为字母和其他符号。

    Python 2 默认使用 ASCII 字母表,因此当您输入“Hello word!”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,用ASCII 进行字符编码并不是一种非常灵活的方法,特别是使用非英语字符时。

    要使用更通用和更强大的Unicode字符编码,这种编码支持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输入

    u“Hello,word!” #前缀 u 代表 Unicode。

    Python 3 默认使用 Unicode,这节省了程序员多余的开发时间,并且您可以轻松地在程序中直接键入和显示更多的字符。因为 Unicode 支持更强大的语言字符多样性以及 emoji 的显示,所以将它作为默认字符编码来使用,能确保全球的移动设备在您的开发项目中都能得到支持。

    (4)后续发展

    Python 3 和 Python 2 之间的最大区别不是语法上的,而是事实上 Python 2.7 将在 2020 年失去后续的支持,Python 3 将继续开发更多的功能和修复更多的错误。

    最近的发展包括格式化的字符串,类创建的简单定制,和用一种更干净的句法方式来处理矩阵乘法。

    Python 3 的后续开发意味着,开发人员可以对问题被及时解决抱有信心,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。

    9. 简述read、readline、readlines的区别

    read读取整个文件

    readline读取下一行数据

    readlines读取整个文件到一个供我们遍历的对象中以供使用,比较方便

    10.简述redis数据库的优缺点

    优点:

    读写性能优异;

    支持数据持久化,支持AOF和RDB两种持久化方式;

    支持主从复制,主机会自动将数据同步到从机,可以进行读写分离;

    数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。

    缺点:

    Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复;

    主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性;

    Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦;

    Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

    11. 列出5个python标准库

    os:提供了不少与操作系统相关联的函数

    sys: 通常用于命令行参数

    re: 正则匹配

    math: 数学运算

    datetime:处理日期时间

    time:时间处理

    12. python2和python3区别?列举5个

    1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')

    Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi'

    2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存

    3、python2中使用ascii编码,python中使用utf-8编码

    4、python2中unicode表示字符串序列,str表示字节序列

    python3中str表示字符串序列,bytes表示字节序列

    5、python2中为正常显示中文,引入coding声明,python3中不需要

    6、python2中是raw_input()函数,python3中是input()函数

    13. __new__和__init__的区别

    1.__new__是一个静态方法,而__init__是一个实例方法.

    2.__new__方法会返回一个创建的实例,而__init__什么都不返回.

    3.只有在__new__返回一个cls的实例时后面的__init__才能被调用.

    4.当创建一个新实例时调用__new__,初始化一个实例时用__init__

    14. 字符串格式化时:%和.format的区别

    %s不能传递元祖等类型

    15请手写一个单例模式?

    方式一:

    class Singleton(object):

    __instance = None # 保存实例对象

    def __init__(self,name,age):

    print(name,age)

    def __new__(cls, *args, **kwargs):

    # 如果类属性 __instance 的值为None,那么新建一个对象

    # 如果类属性值不为None 返回 __instance 保存的对象

    if not cls.__instance:

    cls.__instance = super(SingleCase,cls).__new__(cls) # 调用父类__new__方法生成一个实例对象

    return cls.__instance

    else:

    return cls.__instance

    obj1 = Singleton('xiaoming',18)

    obj2 = Singleton('xiaoming',118)

    print(obj1 is obj2)

    方式二:

    def singleton(cls):

    instances = {}

    def wrapper(*args, **kwargs):

    if cls not in instances:

    instances[cls] = cls(*args, **kwargs)

    return instances[cls]

    return wrapper

    @singleton

    class Foo(object):

    pass

    foo1 = Foo()

    foo2 = Foo()

    print(foo1 is foo2)

    方式三:

    class Singleton(type):

    """

    元类继承type

    """

    _instance = {}

    def __call__(cls, *args, **kwargs):

    if cls not in cls._instance:

    cls._instance[cls] = super().__call__(*args, **kwargs)

    return cls._instance

    class Foo(metaclass=Singleton):

    pass

    f1 = Foo()

    f2 = Foo()

    print(id(f1))

    print(id(f2))

    print(f1 is f2)

    16 *args,**kwargs这两个参数是什么意思?我们为什么要使用它?

    答:如果我们不确定往一个函数中传入多少参数,或者我们希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用*args(单星号)。如果我们不知道往函数中传递多少个关键词参数或者想传入字典的值作为关键词参数的时候我们可以使用**kwargs(双星号),args、kwargs两个标识符是约定俗成的用法。

    当函数的参数前面有一个星号*号的时候表示这是一个可变的位置参数,两个星号**表示这个是一个可变的关键词参数。星号*把序列或者集合解包成位置参数,两个星号**把字典解包成关键词参数。

    17 单引号,双引号,三引号,分别阐述3种引号应用的场景和区别?

    1)单引号和双引号主要用来表示字符串

    2).三引号

    三单引号:'''python ''',也可以表示字符串一般用来输入多行文本,或者用于多行注释

    三双引号:"""python""",一般用在类里面,用来注释类,这样省的写文档,直接用类的对象__doc__访问获得文档

    区别:

    若你的字符串里面本身包含单引号,必须用双引号,反之亦然。

    18请简述Python里面re模块match()、search()、findall()方法的区别?

    match: 匹配以xxx开头,如果不是以xxx开头,那么就返回None,匹配成功返回match对象。获取匹配成功的字符串使用group。

    search: 在全文中匹配一次,匹配到就返回

    findall: 全文匹配,匹配所有符合正则表达式的,结果返回一个列表

    19面向对象的三要素是什么?父类的私有属性能否被子类继承?子类继承父类有那几中写法?

    1、三要素:

    封装

    继承

    多态

    2、私有属性不能被继承

    3、写法示例:

    class Bosi(Cat):

    def __init__(self,name):

    # 调用父类的__init__方法1(python2)

    #Cat.__init__(self,name)

    # 调用父类的__init__方法2

    #super(Bosi,self).__init__(name) python2、3都可以用

    # 调用父类的__init__方法3

    super().__init__(name) #只能在python3中可用

    20现在有一个10G的大文件需要处理,在Python中如何读取?

    读取大文件,不能一次将所有内容读取进内存,否则会将内存挤爆。

    使用open函数打开文件之后,不能直接read()读取,需要指定读取多少个字符

    或者使用readline 按行读取。不能使用readlines读取,readlines按行读取返回所有内容的一个列表,同样会占满内存。

    还可以直接使用for i in f的方式,直接使用for循环去迭代文件句柄,这样每循环一次相当于读取一样文件内容。

    f = open('test.txt','r')

    f.read(1024) # 每次读取限定字节

    f.readline() # 按行读取

    for i in f:

    print(i) # 直接用for循环迭代文件句柄,这相当于每次读取一行

    21数据库中索引的作用是什么?它有什么优缺点?

    索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单列或者是多个列。缺点是它减慢了数据写入的速度,同时也占用数据库的部分空间,因为索引是真是存在与数据库中的。

    22请写一个函数接收用户输入一个字符串,判断输入的字符串反转之后是否是一样,如果一样返回True,否则返回False.(比如:上海自来水来自海上,这类型的字符串就返回True)

    user_inp = input("请输入一个字符串:")

    def is_eq(str):

    if str == str[::-1]:

    print("字符串反转后一样")

    return True

    else:

    print("字符串反转后不一样")

    return False

    res = is_eq(user_inp)

    print(res)

    23请简述什么是全局变量与局部变量,在函数内部是否能修改全局变量?

    全局变量:如果一个变量可以在函数内部调用,也可以在函数外部调用,那么这个变量就称为全局变量

    局部变量:在函数内部定义的变量,不同的函数,可以定义相同的名字的局部变量,但是每个函数内部不会产生影响,局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储

    在函数内部修改全局变量分两种情况,

    第一种,全局变量是一个不可变类型(str,int),那么函数内部不能修改这个全局变量

    第二种,全局变量是一个可变类型(如:list,dict),那么函数内部可以修改这个全局变量

    24什么是lambda函数?有什么好处?请写一个lambda函数求两个数的和?

    Lambda是可以接收任意多个参数并且返回单个表达式的值,又称之为匿名函数。

    Lambda函数省略了标准函数def关键字命名函数,Lambda函数很适合用于需要完成一项功能,但是这个功能只在某一处使用。并且lambda函数可以直接当一个参数传递。

    add = lambda x,y:x+y

    print(add(2,2))

    25请判断下面类中哪些是类属性,哪些是实例属性?

    class Car(object):

    addr = "china"

    colour = ”red”

    def __init__(self):

    self.name = '盖伦'

    self.age = 100000

    def get_age(self):

    return self.age

    参考答案:

    class Car(object):

    addr = "china" # 类属性

    colour = ”red” # 类属性

    def __init__(self):

    self.name = '盖伦' # 实例属性

    self.age = 100000 # 实例属性

    def get_age(self): # 实例方法

    return self.age

    26Python中如何捕获异常?

    try:

    可能出现错误的代码块

    except:

    出错之后执行的代码块

    else:

    没有出错的代码块

    finally:

    不管有没有出错都执行的代码块

    27请简述面向对象中什么是类方法,静态方法?如何调用类方法,静态方法?

    类方法: 类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,类方法可以通过类对象,实例对象调用。

    静态方法:类对象所拥有的方法,需要用@staticmethod来表示静态方法,静态方法不需要任何参数,静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用。静态方法可以通过类对象,实例对象调用。

    28Python中的列表推导式的格式?请使用列表推导式写一个只包含偶数的列表?

    格式:

    [表达式 for 变量 in 可迭代对象] 或者 [表达式 for 变量 in 可迭代对象 if 条件]

    a = [i for i in range(1,101) if i%2==0]

    print(a)

    29请查看下表,写出查询每一位同学总分以及平均分sql语句?

    这个表是一个横表,要么转成纵表,要么直接相加。

    SELECT name , (chinese + math + english) AS "总分",(chinese + math + english)/3 as "平均分" FROM score;

    30.Python是如何进行类型转换的?

    Python提供了将变量或值从一种类型转换成另一种类型的内置函数。

    int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息

    float函数将整数和字符串转换成浮点数

    str函数将数字转换成字符

    list函数将其他类型转为列表类型

    tuple函数将其他类型转为元祖类型

    31.Python是如何进行内存管理的

    1).对象的引用计数机制

    Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

    引用计数增加的情况:

    一个对象分配一个新名称

    将其放入一个容器中(如列表、元组或字典)

    引用计数减少的情况:

    使用del语句对对象别名显示的销毁

    引用超出作用域或被重新赋值

    2).垃圾回收

    当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

    3).内存池机制

    Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统:

    Pymalloc机制:为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

    对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

    32.事务的特性?

    1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。

    2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

    3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

    4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

    33.如何对查询命令进行优化?

    a. 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索。

    b. 应尽量避免在 where 子句中对字段进行 null 值判断,避免使用!=或<>操作符,避免使用 or连接条件,或在 where 子句中使用参数、对字段进行表达式或函数操作,否则会导致权标扫描

    c. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    d. 使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为

    条件时才能保证系统使用该索引,否则该索引将不会被使用。

    e. 很多时候可考虑用 exists 代替 in。

    f. 尽量使用数字型字段。

    g. 尽可能的使用 varchar/nvarchar 代替 char/nchar。

    h. 任何地方都不要使用 select from t ,用具体的字段列表代替“”,不要返回用不到的任何字段。

    i. 尽量使用表变量来代替临时表。

    j. 避免频繁创建和删除临时表,以减少系统表资源的消耗。

    k. 尽量避免使用游标,因为游标的效率较差。

    l. 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF。

    m. 尽量避免大事务操作,提高系统并发能力。

    n. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

    34.简述一下mongodb

    MongoDB 是一个面向文档的数据库系统。使用 C++编写,不支持 SQL,但有自己功能强大的查询语法。

    MongoDB 使用 BSON 作为数据存储和传输的格式。BSON 是一种类似 JSON 的二进制序列化文档,支持嵌套对象和数组。MongoDB 很像 MySQL,document 对应 MySQL 的 row,collection 对应 MySQL 的 table

    应用场景:

    a) 网站数据:mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

    b) 缓存:由于性能很高,mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由 mongo 搭建的持久化缓存可以避免下层的数据源过载。

    c) 大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。

    d) 高伸缩性的场景:mongo 非常适合由数十或者数百台服务器组成的数据库。

    e) 用于对象及 JSON 数据的存储:mongo 的 BSON 数据格式非常适合文档格式化的存储及查询。

    f) 重要数据:mysql,一般数据:mongodb,临时数据:memcache

    g) 对于关系数据表而言,mongodb 是提供了一个更快速的视图 view;而对于 PHP 程序而言,mongodb可以作为一个持久化的数组来使用,并且这个持久化的数组还可以支持排序、条件、限制等功能。

    h) 将mongodb代替mysql的部分功能,主要一个思考点就是:把mongodb当作mysql的一个 view(视图),view 是将表数据整合成业务数据的关键。比如说对原始数据进行报表,那么就要先把原始数据统计后生成 view,在对 view 进行查询和报表。

    不适合的场景:

    a) 高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需

    要大量原子性复杂事务的应用程序。

    b) 传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化的查询方式。对于

    此类应用,数据仓库可能是更合适的选择。

    c) 需要 SQL 的问题

    d) 重要数据,关系数据

    优点: 1)弱一致性(最终一致),更能保证用户的访问速度

    2)文档结构的存储方式,能够更便捷的获取数

    3)内置 GridFS,高效存储二进制大对象 (比如照片和视频)

    4)支持复制集、主备、互为主备、自动分片等特性

    5)动态查询

    6)全索引支持,扩展到内部对象和内嵌数组

    缺点: 1)不支持事务

    2)MongoDB 占用空间过大,维护工具不够成熟

    36.Python中的可变对象和不可变对象?

    不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

    可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。

    Python 中,数值类型(int 和 float)、字符串 str、元组 tuple 都是不可变类型。而列表 list、字典dict、集合 set 是可变类型。

    37. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景?

    定义:

    list: 链表, 有序的项目, 通过索引进行查找, 使用方括号"[]";

    tuple: 元组, 元组将多样的对象集合到一起, 不能修改, 通过索引进行查找, 使用括号"()";

    dict: 字典, 字典是一组键(key)和值(value)的组合, 通过键(key)进行查找, 没有顺序, 使用大括号"{}";

    set: 集合,无序, 元素只出现一次, 自动去重, 使用"set([])";

    应用场景:

    list, 简单的数据集合, 可以使用索引;

    tuple, 把一些数据当做一个整体去使用, 不能修改;

    dict, 使用键值和值进行关联的数据;

    set, 数据只出现一次, 只关心数据是否出现, 不关心其位置;

    38. 常用的 Linux 命令?

    ls,help,cd ,more,clear,mkdir,pwd,rm,grep,find,mv,su,date

    39.Python中单下划线和双下划线分别是什么?

    ·__name__:一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突

    ·_name:一种约定,用来指定变量私有

    ·__name:解释器用_classname__name来代替这个名字用以区别和其他类相同的命名

    40.简述正则表达式的贪婪非贪婪模式

    默认贪婪模式,总是尝试匹配尽可能多的字符;非贪婪模式刚好相反,总是尝试匹配尽可能少的字符。

    相关文章

      网友评论

        本文标题:机缘巧合从华为弄来的40道python面试题,考的竟然都是基础知

        本文链接:https://www.haomeiwen.com/subject/fehmkqtx.html