Python问题汇总

一、Python中的列表和元组有什么区别?
相同点:
1、都是序列
2、都可以存储任何数据类型
3、都可以通过索引去访问
区别:
1、列表是可变的,元组是不可变的
2、列表使用的是【】,元组使用的是()
3、元组是无法复制的
4、元组的内存比列表更小
5、列表是存储同构元素,元组是存储异构元素(异构元素就是不同数据类型的元素)

列表和数组有什么区别?
Python的标准库有一个array(数组)对象,但在这里,特指常用的Numpy数组
1、列表存在于Python的标准库中。数组由Numpy定义。
2、列表可以在每个索引处填充不同类型的数据。数组需要同构元素。
3、列表上的算术运算可以从列表中添加或者删除元素。数组上的算术运算按照线性代数方式工作。
4、列表还使用更少的内存,并显著具有更多的功能。

二、什么是Python模块?Python模块中有哪些常用的内置模块?
Python模块是包含Python代码的.py文件。此代码可以是函数类或变量。一些常用的内置模块包括:sys、math、random、data time、JSON。

三、Python中的全局变量和局部变量是什么?
全局变量:在函数外或全局空间中声明的变量称为全局变量。这些变量可以由程序中的任何函数访问。
局部变量:在函数内声明的任何变量都称为局部变量。此变量存在在局部空间中,而不是在全局空间中。

四、Python中的self?
class是面向对象的设计思想,object(对象,)
在Python中,类是通过关键字class定义的,class后面跟类名,类名一般是大写字母开头,紧跟着是object,表示该类是从哪个类继承下来的,通常,没有合适的类就用object类,这是所有类最终都会继承的类。
在类的函数代码中,需要访问当前实例中的变量和函数,而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self

1、init 方法的第一个参数永远是 self ,表示创建的实例本身,因此,在 init 方法的内部,就可以把各种属性绑定到 self,因为 self 就指向创建的 实例本身

2、使用了 init 方法,在创建实例的时候就不能传入 空的参数了,必须传入与 init 方法匹配的参数,但是 self 不需要传,python解释器会自己把实例变量传进去

class DBUtil(object):
    def __init__(self,host,user,password,database,port=3306,charset='utf8'):
        self.host=host
        self.user=user
        self.password=password
        self.database=database
        self.port=port
        self.charest=charset

五、Python中的@staticmethod和@classmethod?
使用这两个静态方法,就可以不用实例化,直接类名、方法名()来调用
区别:
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

@staticmethod修饰的方法函数与普通的类外函数,为什么不直接使用普通函数?
@staticmethod是把函数嵌入到类中的一种方式,函数就属于类,同时表明函数不需要访问这个类。通过子类的继承覆盖,能更好的组织代码。

这两个方法具体在什么情况下会用到?
如果现在我们想写一些仅仅与类交互而不是和实例交互的方法,使用@classmethod;
当出现全局参数配置时,使用@staticmethod,因为他不需要实例化,也没有self参数,不必顾及类中的具体情况,能直接使用。

六、Python split()方法,sub(),subn()
split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
split()和split(’ ')的区别:
split()的时候,多个空格当成一个空格
split(’ ')的时候,多个空格都要分割,每个空格分割出来空格

sub()查找正则表达式匹配的所有字符串,然后用不同的字符串替换他们
subn()类似于sub(),并且返回新字符串

七、Python里面的yeild
yield看做return,但是return是直接返回,代码就执行完毕。带yield的函数是一个生成器,这个生成器有一个函数next,next就相当于下一步生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的

八、Python里面的smtplib模块
smtp:SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,python实现发邮件也是基于此基础上进行封装的。

1、创建SMTP的操作对象并连接smtp目标服务器,可以是163、QQ等
2、根据自己的账号登录目标服务器(自己的邮箱地址和邮箱授权码)
3、调用对象中的方法,发送邮件到目标地址

九、@allure.severity
用来标记用例等级

十、列出5个标准Python库?
os:提供了不少于与操作系统相关联的函数
sys:通常用于命令行参数
re:正则匹配
math:数学运算
datetime:处理日期时间

十一、字典如何删除键和合并两个字典?
del和update方法

十二、谈下Python的gil
gil是Python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行Python程序的时候会霸占Python解释器(加了一把锁即gil)使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行,如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行,所以在多线程中,线程的运行也是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个Python解释器,所以多进程可以实行多个进程的同时运行,缺点是进程系统资源开销大。

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

十四、Python2和Python3
Python2返回列表,Python3返回迭代器,节约内存

十五、一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言,可以使用装饰器

十六、Python内建数据类型有哪些?
整数 int
布尔值 bool
字符串 str
列表 list
元组 tuple
字典 dict

十七、简述面向对象中_new_和_init_的区别?
_init_是初始化方法,创建对象后,就立刻被默认调用了,可接收参数
__new__至少要有一个参数 cls,代表当前类,此参数在实例化时由 Python 解释器自动识别
__new__必须要有返回值,返回实例化出来的实例,这点在自己实 现__new__时要特别注意,可以 return 父类(通过 super(当前类名, cls)) __new__出来的实例,或者直接是 object 的__new__出来的实例
__init__有一个参数 self,就是这个__new__返回的实例,__init__在 __new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。
如果__new__创建的是当前类的实例,会自动调用__init__函数,通 过 return 语句里面调用的__new__函数的第一个参数是 cls 来保证是当 前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的 实例,其实就不会调用当前类的__init__函数,也不会调用其他类的 __init__函数

十八、谈谈Python的装饰器
装饰器本质上是一个Python函数,它可以让其函数在不作任何变动的情况下增加额外功能,装饰器的返回值也是一个函数对象,它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等。有了装饰器我们就可以抽离出大量的与函数功能无关的雷同代码进行重用。

十九、什么是lambda表达式?它有什么好处?
lambda表达式就是你需要使用一个函数,但是又不行费脑袋去命名一个函数的时候使用,也就是通常所说明的匿名函数。
表达形式:后面紧跟一个或多个参数,紧接着一个冒号:,紧接着一个表达式

在这里插入图片描述

二十、Python中pass语句的作用是什么?
pass语句不会执行任何操作,一般作为占位符或者创建占位程序

二十一、python是如何进行类型转换的?
Python提供了将变量从一种类型转换伟另一种类型的内置方法
在这里插入图片描述

二十二、Python里面如何拷贝一个对象?
Python中对象之间的赋值是按引用传递的,如果要拷贝对象需要使用标准模板中的copy

copy.copy:浅拷贝,只拷贝父对象,不拷贝父对象的子对象。
copy.deepcopy:深拷贝,拷贝父对象和子对象。

二十三、说说Python自省?
自省就是运行时能够获得对象的类型。比如:type()、dir()、getattr()、hasattr()、isinstance()

二十四、Python中单下划线和双下划线的区别?
1、无下划线变量
无下划线变量为公有变量

2、前面单下划线
前置单下划线,又称口头私有变量,私有属性或方法的一种,一般来讲,变量名_xx被看作是私有的,在模块或类外不可以使用,当变量是私有的时候,用_xx来表示变量是很好的习惯。类对象和子类可以访问,这并不能完全做到真正的私有,只是约定俗称的而已,这样写表示不希望这个变量在外部被直接调用。

3、前面双下划线
__xx:前置双下划线,私有化属性或方法,只有内部可以访问,外部不能访问。

4、前后都有双下划线
xx:以双下划綫开头并且以双下划綫结尾的,是特殊变量,特殊变量是可以直接访问的,对于普通的变量应该避免这种命名风格。

5、后置下划线
xx_:后置单下划线,用于避免和Python关键词的冲突

二十五、Python的特点和优点是什么?
Python作为编程的入门语言
1、解释性
2、动态特性
3、面向对象
4、语法简洁
5、开源
6、丰富的社区资源

二十六、位和字节的关系?
位(bit):简单来说就是一个二进制数
字节:简单来说就是8个二进制数,即8个bit就称为一个字节(byte)
bit就是位,也叫比特位,是计算机表示数据最小的单位
byte就是字节
1byte=8bit
1byte就是1B
一个字符=2个字节
1kb=1024b
字节就是byte,也是b
位就是bit也是b
1kb=1024b
1B=8b

二十七、什么是装饰器?
装饰器允许通过将现有函数传递给装饰器,从而向现有函数添加一些额外的功能,该装饰器将执行现有函数的功能和添加的额外功能。

二十八、解释range函数
range函数可以创建一个整数列表,一般用在for循环。它有3种使用方法。
1、range(stop):生成从0到参数‘stop’之间的整数
2、for i in range(10):生成从参数‘start’到‘stop’之间的整数
3、for i in range (2,10):以参数‘step’为步长,生成从‘start’到‘stop’之间的整数

二十九、Python中的实例方法、静态方法和类方法有什么区别?
实例方法:接受self参数,并且与类的特定实例相关。
静态方法:使用装饰器@staticmethod,与特定实例无关,并且是自包含的(不能修改类或者实例的属性)
类方法:接受cls参数,并且可以修改类本身。

三十、Python中函数返回值为func和func()的区别
1、使用return func时返回的是func这个函数
2、使用return func()时返回的是func()执行后的返回值,如果func()函数没有返回值则返回None,而且此时func函数如果有其他打印语句之类的也会一起执行。

三十一、你喜欢Python的什么?
Python的可读性很强,并且一种Python方式可以处理几乎所有事情,有一种简洁明了的首选方法。

三十二、你最喜欢Python的哪个库?
在处理大量数据时,没有什么比pandas(熊猫)更有帮助了,因为pandas让操作和可视化数据变得轻而易举。

三十三、举出几个可变和不可变对象的例子?
可变意味着可以在创建后修改状态。例如列表(list),字典(dict),和集合(set)。
不可变意味着创建后不能修改状态。例如:int、float、bool、string和tuple

三十四、如何将一个数字四舍五入到小数点后三位?
使用round(value, decimal_places)函数
a=5.12345
round(a,3)

三十五、什么是pickling?
pickling是Python中序列化和反序列化对象的常用方法

三十六、字典和json有什么区别?
1、dict是Python的一种数据类型,是经过索引但无序的键和值的集合
2、json只是一个遵循指定格式的字符串,用于传输数据

三十七、你在Python中使用了哪些orm?
orm(对象关系映射)将数据模型(通常在应用程序中)映射到数据库表,并简化了数据库事务。
SQLAlchemy通常用于Flask的上下文中,而Django拥有自己的ORM。

三十八、字典和列表的查找速度哪个更快?
在列表中查找一个值需要遍历整个列表
在字典中查找一个只需要o(1)时间,因为它是一个哈希表

三十九、模块(module)和包(package)有什么区别?
模块是可以一起导入的文件
包是模块的目录

四十、
Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python是一种解释型语言、是一种交互式语言、是面向对象的语言、是初学者的语言
Python的特点:易于学习、易于阅读、易于维护、一个广泛的标准库、互动模式、可移植、可扩展、数据库、GUI编程、可嵌入。
优酷、豆瓣、知乎、果壳都是用Python写的。

Python中数字有四种类型:
1、int(整数)如1
2、bool(布尔)如true
3、float(浮点数)如1.23
4、complex(复数)如1 +2j

Python项目代码使用过程中,可能会遇到各种各样的问题。为了更好地记录和解决这些问题,我们可以建立一个Python问题汇总索引目录,以便随时查阅和解决。 1. 数据类型问题:比如在处理数据时,遇到了不同数据类型的转换问题,如将字符串转为数字或者将数字转为字符串等。 2. 模块导入问题:在使用第三方模块时,可能会遇到无法导入模块的问题,需要查找原因并解决。 3. 语法错误:在编写代码时,可能会出现各种语法错误,如拼写错误、缩进错误等,需要及时修改以保证代码的正确运行。 4. 性能优化问题:在项目运行过程中,可能会遇到性能瓶颈,需要进行代码优化以提高项目的运行效率。 5. 异常处理问题:在项目运行过程中,可能会遇到各种异常情况,需要进行异常处理以保证程序的稳定性。 6. 接口调用问题:在项目中调用外部接口时,可能会遇到接口参数传递或者返回结果处理的问题,需要及时解决。 7. 单元测试问题:在编写项目代码时,可能会遇到单元测试用例编写或者执行结果验证的问题,需要及时进行检查和修复。 8. 版本兼容性问题:在使用第三方库或者Python版本升级时,可能会出现版本兼容性问题,需要及时调整或者更新相关的代码。 总之,建立Python问题汇总索引目录可以帮助我们更好地管理和解决在项目代码使用过程中遇到的各种问题,提高项目的开发和运行效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龚的测试之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值