Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python基础常见问题总结(一)

Python基础常见问题总结(一)

作者头像
py3study
发布于 2020-01-14 12:31:02
发布于 2020-01-14 12:31:02
1.2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

1.__ foo 、foo_ 和 __foo__ 三者之间的区别是什么? __foo表示私有属性、_foo表示受保护的属性、__foo__表示Python自带的属性

2.请您简述Python编译的工作原理,PyCodeObject 和 PyFrameObject 对象的作用。 Python编译的工作原理:Python语言写的程序不需要编译成二进制代码,它可以直 接从源代码运行程序。当我们运行Python文件程序的时候, Python解释器把源代码转换成中间形式:字节码,然后再由Python虚 拟机来执行这些字节码。 PyCodeObject对象:pyc 字节码在Python虚拟机中对应的是PyCodeObject对象,虚拟机将字节封装成一个PyCodeObject对象再一条条执行字节码指令。 PyFrameObject对象:当发生函数调用时,创建新的帧,对应Python的实现就是PyFrameObject对象。

3.如何理解self、cls、和super?

self是实例方法定义中的第一个参数,代表该方法的实例对象 cls是类方法中的第一个参数,代表当前类 super是指在Python面向对象的继承特征下中,若子类调用父类方法则需要super()实现。

4.如何区分@classmethod和@staticmethod?

@classmethod是类装饰器,使用装饰器方法定义类方法告知Python的解释器该方法为类方法,装饰器优化该方法的执行效率。 @staticmethod是静态方法装饰器,使用装饰器方法定义静态方法告知Python的解释器该方法为静态方法,装饰器优化该方法的执行效率。

5.如何理解闭包Closure(作用)?其语法规范要求?(可编写片段代码实现闭包规范) 闭包:在一个外函数内定义了一个内函数 ,内函数运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就形成了闭包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
闭包函数实例:

outer为外函数、inner为内函数,a和b都是外函数的临时变量
def outer(a):
    b=10
    def inner():
        print(a+b)
    return inner
if __name__=="__main__":
    demo=outer(5)
        #在这里我们调用外函数传入参数5,此时外函数两个临时变量a=5,b=10并创建了内函数,然后把内函数的引用返回存给了demo,外函数结束时发现内函数将会用到自己的临时变量,这两个变量就不会释放,会绑定给内函数。
    demo()

6.什么是迭代器Iterator ? 编写片段代码说明应用方式.

迭代器就是用于迭代操作(for循环)的对象,它像列表一样,可以迭代获取其中的每一个元素,任何实现了next()方法的对象都可以被称为迭代器。 对于可迭代对象(序列、range函数返回值、zip函数返回值、enumerate函数返回值等等)调用iter()函数就会返回一个迭代器,对于迭代器用iter方法就会返回迭代器自身。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
迭代器代码实例说明:

it =iter([1,2,3,4,5])
while True:
    try:
        x=next(it)
    except StopIteration:
        break
#迭代器通过不断调用next方法会依次前进到序列中的下一个元素,并将其返回最后到达一系列结果的末尾时,会引发StopIteration异常               

7.说明list、tuple和dictionary之间的异同点。

列表list支持的特性:索引、切片、连接、重复、成员操作符 元组tuple支持的特性:索引、切片、连接、重复、成员操作符 字典dictionary不支持这些特性 列表list属于可变数据类型,是有序的、可迭代的(支持for循环遍历) 元组tuple属于不可变数据类型,是有序的、可迭代的(支持for循环遍历) 字典dictionary属于可变数据类型,是无序的、可迭代的(支持for循环遍历)

8.如何理解生成器Generator? 在Python中有几种实现方式(可编写片段代码说明)?

生成器本质上是一个高级迭代器,使得所需要返回的一系列元素所需的代码更加简单和高效。 生成器有两种实现方式: (1).生成器函数 生成器函数:常规函数定义中使用return返回结果,在生成器函数中使用yield关键字代替return,yield语句一次返回一个结果,在每个结果中间挂起函数的状态,以便下一次从它离开的地方执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码说明:
def gensquares(Num):
    for i in range(Num):
        yield i**2
for item in gensquares(5):
     print(item)

(2).生成器表达式 生成器表达式:和列表生成式相似,不过将“[]”改为“()”,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码说明:
squares=(i2 for i in range(2,5))
print(type(squares))
#使用next()方法每次返回一个结果
next(squares)

9.Python中的异常是什么?分为几种?多except捕获异常的规范要求都有哪些?

异常是一个事件,该事件会在程序执行过程中发生,影响程序正常执行,在Python中程序无法正常处理时,就会抛出异常。在Python中常见的异常处理为单异常和多异常处理,在Python3中长使用try ... except ... finally处理,常见的有try ... except ...、try ... except ... except ... except ...(多except捕获)、try ... except ... else/finally.对于try ... except ... else/finally来说,else中的语句是当try语句块出现异常时不执行,当try语句块无异常时执行,如果替换为finally则是不论try语句块是否出现异常finally都会执行。 多except捕获异常:一个try语句块可能包含多个except字句,分别用来处理不同的特定的异常,在多异常捕获时,我们常将小异常放在前面,大异常在后面,用于避免程序在处理时,异常不能分别处理,从而将所有异常归为一个异常进行处理。

10.如何理解“鸭子模型”,其主要作用是什么?

Python不支持多态,并且也用不到多态,多态是应用于Java和c#这一类强类型语言中,而Python推崇“鸭子类型”。 “鸭子类型”是动态类型的一种风格,在这种风格中,一个对象有效的语义不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。

11.装饰器decorator的作用,编写片段代码说明。

装饰器就是用来装饰函数的,想要增强原有函数的功能,但不希望改变现函数的定义,是一种在代码运行期间动态增加功能的方式。定义的装饰器实际上是返回函数的高阶函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码说明:
#装饰器(无参数)
import time
def Timelt(ProMain):
    def program_times():
        startTime = time.time()
        ProMain()
        endTime = time.time()
        msecsTime = (endTime - startTime) * 1000
        print("程序%s运行时间:%s 毫秒" % (main.__name__,msecsTime))
    return program_times
@Timelt #python提供的语法糖,@deco 和 main = deco(main) 是完全等价的,本质是一样的
def main():
    print("程序运行开始...")
    time.sleep(0.5)
    print("程序运行结束...")
if __name__=="__main__": #脚本程序入口
    main()
补充:语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

12.*args和**kwargs的异同点

这两个参数为函数定义中参数列表中排名最后的参数 *args代表该参数位置可以任意个参数,最后都会转为元组数据类型在函数体内处理 **kwargs代表该参数位置可以放key-value格式的数据,最终都会转化为字段形式数据在函数体内处理。

13.@property装饰器的作用,请举例说明。

@property装饰器将方法定义为属性,后续可以使用对象.属性名的方式输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
举例说明:
class person():
    def __init__(self,name):
        self.__name=name
        pass
    @property #使用@property将私有实例变量变为一个属性,从而可以使用对象.属性的名称的方式进行输出。
    def name(self):
        return self.__name
if __name__=="__main__":
    obj=person("Lee")
    print('name属性:{0}'.format(obj.name))

14.请您简述Python如何理解对象序列化和反序列化操作?

所谓序列化是将编程语言中的各种对象转化为字节流的过程,同时也可以逆向操作将字节流还原成一个对象,这个过程称为发序列化。

15.Python连接数据库实现读写操作的标准流程描述。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#导入模块
import pymysql
db=pymysql.connect("localhost","root","root","mysql")
#创建游标对象
cursor=db.cursor()
#使用execute()方法执行SQL语句
cursor.execute("select * from mysql")
#使用fechone()方法获取单条数据
data=cursor.fetchone()
#关闭数据库
db.close()

16.python异常的关键字有哪些?每个代码块执行的规则是什么?

python异常的关键字有:try,except,else,finally try语块执行方式: (1)首先执行try字句. (2)如果没有异常发生,忽略except子句,try子句执行后结束 (3)如果执行try子句过程中发生异常,那么try子句余下的部分将被忽略,如果异常与except关键字后的名称相同,那么对应的except子句被执行,最后执行try语句之后的代码 (4)如果一个异常没有与任何except匹配,那么这个异常会传递给上层的try中,对于可选子句else子句,如果使用这个子句,那么必须放在所有的except子句后,这个子句在try子句没有发生任何异常的时候执行,对于finally来说,不管前面子句是否执行,finally中的语句都会执行。

17.pickle模块中的dumps()/loads()和dump()/load()的区别。

pickle模块支持讲一个Python对象转化为字节流,同时还能对相应的字节流逆操作得到原来的对象 pickle模块的常用函数: pickle.dump(obj.file [,protocol])对象序列化操作函数 pickle.load(file)将file中的对象序列化读取 pickle.dumps(obj,[,protocol]) 将对象转化为string字符串类型 pickle.loads(string)从string中读取并反序列化还原之前的obj对象。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 三程三器的那些事
    1.定义:把一个函数名当做实参传给另一个函数     2.返回值中包含函数名     3.下面使用高阶函数虽然可以实现装饰器的一些功能,但是违反了装饰器不能改变调用方式的原则,      以前使用bar()现在将调用方式改编成了test1(bar)就是将bar的函数名当做变量传给了test1()
IT茂茂
2020/03/19
9630
剖析 Python 面试知识点(一): 魔法方法、闭包/自省、装饰器/生成器
在Python中用双下划线__包裹起来的方法被成为魔法方法,可以用来给类提供算术、逻辑运算等功能,让这些类能够像原生的对象一样用更标准、简洁的方式进行这些操作。 下面介绍常常被问到的几个魔法方法。
天澄技术杂谈
2019/04/05
7170
python基础知识
我们之所以能通过 for 方法如此轻松的打印这些内容,从本质上说是因为列表元组等这些东西是一个可迭代对象。而 for 方法则可以调用迭代器对象的方法来实现对整个迭代对象的遍历。for 驱动可迭代对象调用 iter()返回了一个有next()方法的迭代器对象(可以通过 next()访问),该方法可以逐一访问对象中的所有元素。
爱编程的小明
2022/09/05
6310
python基础知识
python 面试题--3(15题)
答案:生成器是一种特殊的函数,使用yield语句来生成一个值,并且可以暂停和恢复执行。生成器可以按需逐个生成值,而不是一次性生成所有值,从而节省内存。
zhangjiqun
2024/12/14
1090
python 面试题--3(15题)
【Python基础编程】迭代器、生成器、装饰器与闭包全攻略
上篇文章将了python多态,类属性等知识,这篇文章了解一下python的三器一包:迭代器、生成器、装饰器和闭包
易辰君
2024/11/07
4230
❤️用一万字给小白全面讲解python编程基础问答❤️《记得收藏不然看着看着就不见了》
将较为高级的计算机语言L1转化为较为低级的计算机语言L0(计算机实际执行的语言),这一转化过程称为程序翻译,翻译的工具称为编译器。然后交给计算机执行。L1这种就叫编译型(翻译型)编程语言,有C/C++、Object-C、Golang等
苏州程序大白
2021/08/13
9660
❤️用一万字给小白全面讲解python编程基础问答❤️《记得收藏不然看着看着就不见了》
一份Python面试宝典
上面代码中a is b的结果是True但c is d的结果是False,这一点的确让人费解。CPython解释器出于性能优化的考虑,把频繁使用的整数对象用一个叫small_ints的对象池缓存起来造成的。small_ints缓存的整数值被设定为[-5, 256]这个区间,也就是说,在任何引用这些整数的地方,都不需要重新创建int对象,而是直接引用缓存池中的对象。如果整数不在该范围内,那么即便两个整数的值相同,它们也是不同的对象。
润森
2022/09/22
1.3K0
python基础题目大全,测试你的水平,巩固知识(含答案)
(1)、python代码,简介,明确,优雅,简单易懂 (2)、开发效率高 (3)、可扩展性强
一墨编程学习
2018/12/26
9530
Python知识点总结篇(4)
递归 特性 必须有明确的结束条件; 每进入深一层递归,问题规模比上层应有所减少; 递归效率不高,层次更多会导致栈溢出; def calc(n): print(n) if n // 2 > 0: return calc(n // 2) calc(10) 函数式编程 计算机:在计算机层面,CPU执行的是加减乘除以及各种判断和跳转指令代码,因而汇编是最贴近计算机的语言,越接近计算机底层的语言执行效率越高; 计算:指数学意义上的计算,越抽象的计算,离计算机硬件越远,效率越低; 定义:一种抽象程度
村雨遥
2022/06/15
2490
Python知识点总结篇(4)
关于Python语言规范你需要知道的一些小tips
之前写代码感觉一直缺乏一定的规范,所以整理了一些Python的语言规范方面的东东,这个来自google发布的开源项目风格指南-Python语言规范。 1、对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺
石晓文
2018/04/11
1.8K0
Python面试题【BAT版】(02)
今天给大家分享2018年BAT面试过程中的python的相关问题。所有的面试题和答案均来源于网络,如有侵权请及时联系,答案如有不正确还请各位及时指正。为面试而生希望各位都能化身offer收割机。
PM小王
2019/07/02
6690
《Python 源码剖析》一些理解以及勘误笔记(1)
以下是本人阅读此书时理解的一些笔记,包含一些影响文义的笔误修正,当然不一定正确,贴出来一起讨论。 注:此书剖析的源码是2.5版本,在python.org 可以找到源码。纸质书阅读,pdf 贴图。 文章
s1mba
2017/12/26
1K0
《Python 源码剖析》一些理解以及勘误笔记(1)
Python基础—让你规范Python语言的使用
群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 Lint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少. 优点: 可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等. 缺点: pylint不完美. 要利用其优势, 我们有时侯
企鹅号小编
2018/01/12
1.6K0
Python基础—让你规范Python语言的使用
Python基础常见面试题总结[通俗易懂]
以下是总结的一些常见的Python基础面试题,帮助大家回顾基础知识,了解面试套路。会一直保持更新状态。 PS:加粗为需要注意的点。
全栈程序员站长
2022/11/19
2.4K0
Python基础常见面试题总结[通俗易懂]
python基本常识
tuple,str都可以看做是一种list,都可以进行切片操作。 利用切片操作,去掉一个字符串的前后空格。要注意是是前后空格是不止一个的,可能有很多个。
西红柿炒鸡蛋
2018/09/11
1.1K0
python基本常识
Python 3 入门 ,看这篇就够了 。
Python 是一种高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 由 Guido van Rossum 于 1989 年底在荷兰国家数学和计算机科学研究所发明,第一个公开发行版发行于 1991 年。
小小詹同学
2018/08/17
1.2K0
Python 3 入门 ,看这篇就够了 。
Python常见编程基础问题总结
在编写程序的时候,如果想要**改变(重新赋值)**函数外部的变量,并且这个变量会作用于许多函数中,就需要告诉 Python 程序这个变量的作用域是全局变量,global 语句可以实现定义全局变量的作用。
润森
2022/09/22
1.1K0
Google Python 编程风格指南
Python 是 Google主要的脚本语言。这本风格指南主要包含的是针对python的编程准则。
开发者技术前线
2020/11/23
7630
Google Python 编程风格指南
Python 【基础面试题】
面试题仅做学习参考,学习者阅后也要用心钻研其中的原理,重要知识需要系统学习、透彻学习,形成自己的知识链。以下五点建议希望对您有帮助,早日拿到一份心仪的offer。
IT茂茂
2020/04/10
1.3K0
Python 【基础面试题】
关于Python的20个面试题
Python 是一个高级、解释型、交互式和面向对象的脚本语言. Python 语言设计具有高度可读性的, 使用一些常见的英语词组和其他语言常用的标点符号组成的语法结构, 相对于其他语言它具有更少的语法结构.
用户1416054
2018/08/02
4900
相关推荐
Python 三程三器的那些事
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档