190道Python3基础题以及解答

python基础

190道Python:

https://mp.weixin.qq.com/s?__biz=MzIyMjYyMzg3MA==&mid=2247490226&idx=1&sn=8803cbd62b95f0d4001fa2aac881f152&chksm=e82bfba3df5c72b588ee7eacc685335543e5f56051dab784a8883832aaf4dfc0ec3f6bb39f77&scene=0&xtrack=1#rd

1…谈谈对 Python 和其他语言的区别

# Python是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库的一门
# 弱类型的可移植,可扩展,可嵌入的解释型编程语言
# Python和Java相比:

# Python比Java要简单.Python是函数为一等公民的语言,而Java是类为一等公民的语言.Python是弱类型语言,而Java是强类型语言.

# Python和C相比

# 对于使用:
# Python的类库齐全并且使用简洁,很少代码实现的功能用C可能要很复杂
# 对于速度:
# Python的运行速度相较于C,绝对是很慢了.Python和CPython解释器都是C语言编写的

2 简述解释型和编译型编程语言

# 解释型就是边解释边执行
# 编译型就是编译后执行

3 Python 的解释器种类以及相关特点?

# CPython
# c语言开发的 使用最广的解释器
# IPython
# 基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
# PyPy
# 目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
# JPython
# 运行在Java上的解释器 直接把python代码编译成Java字节码执行
# IronPython
# 运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码

4 Python3 和 Python2 之间的区别?

首先两者是不兼容的。3没有兼容2,其次两者的最关键的是类库和模块不一样。

5.Python3 和 Python2 中 int 和 long 区别?

python2中有long类型
python3中没有long类型,只有int类型

6.xrange 和 range 的区别?

range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。
比如:

>>>  range(5) 
[0, 1, 2, 3, 4] 
>>> range(1,5) 
[1, 2, 3, 4] 
>>> range(0,6,2)
[0, 2, 4]

xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。

>>> xrange(5)
xrange(5)
>>> list(xrange(5))
[0, 1, 2, 3, 4]
>>> xrange(1,5)
xrange(1, 5)
>>> list(xrange(1,5))
[1, 2, 3, 4]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0,6,2))
[0, 2, 4]

示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
xrange 和 range 这两个基本上都是在循环的时候用。

for i in range(0, 100):
    print i

for i in xrange(0, 100):
    print i

这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:

a = range(0,100)
print type(a)
print a
print a[0], a[1]

输出结果:

<type 'list'>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
0 1

而xrange则不会直接生成一个list,而是每次调用返回其中的一个值:

a = xrange(0,100)
print type(a)
print a
print a[0], a[1]
输出结果:

<type 'xrange'>
xrange(100)
0 1

所以xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表。

7.什么是 PEP8?

1 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
4 模块导入的顺序:按标准、三方和自己编写顺序依次导入,之间空一行。
5 不要在一句import中多个库,比如import os, sys不推荐
6 避免不必要的空格
7 注释必须要有
8 函数命名要遵循规范
10 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
11 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
12 异常中try的代码尽可能少。

作者:python之禅 链接:https://www.jianshu.com/p/155910fa30b1 来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

8.了解 Python 之禅么?

	>>> import this
	Beautiful is better than ugly.
# 优美胜于丑陋(Python以编写优美的代码为目标)
Explicit is better than implicit.
# 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似) 
Simple is better than complex.
# 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现) 
Complex is better than complicated.
# 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
Flat is better than nested.
# 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) 
Sparse is better than dense.
# 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) 
Readability counts.
# 可读性很重要(优美的代码是可读的) 
Special cases aren't special enough to break the rules.
Although practicality beats purity.
# 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上) 
Errors should never pass silently.
Unless explicitly silenced.
# 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码) 
In the face of ambiguity, refuse the temptation to guess.
# 当存在多种可能,不要尝试去猜测 
There should be one-- and preferably only one --obvious way to do it.
# 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) 
Although that way may not be obvious at first unless you're Dutch.
# 虽然这并不容易,因为你不是 Python 之父(这里的Dutch是指Guido)
Now is better than never.
Although never is often better than *right* now.
# 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
# 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) 
Namespaces are one honking great idea -- let's do more of those!
# 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

9.了解 docstring 么?

	在软件工程中,其实编码所占的部分是非常小的,大多是其它的事情,比如写文档。文档是沟通的工具。 
在python中,比较推崇在代码中写文档,代码即文档,比较方便,容易维护,直观,一致。 
代码写完,文档也出来了。其实Markdown也差不多这种思想,文本写完,排版也完成了。 
看看PEP 0257中对docstring的定义:

A docstring is a string literal that occurs as the first statement in 
a module, function, class, or method definition. Such a docstring 
becomes the __doc__ special attribute of that object.

简单来说,就是出现在模块、函数、类、方法里第一个语句的,就是docstring。会自动变成属性__doc__。

def foo():
    """ This is function foo"""
1
2
可通过foo.__doc__访问得到’ This is function foo’.
--------------------- 

版权声明:本文为CSDN博主「mattkang」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/handsomekang/article/details/46830083

10.了解类型注解么?

	先看代码
def add(x: int, y: int) -> int:
    return x + y

没用过类型注解(Type Annotations)的同学可能咋一看有点迷糊,其实上面这段代码和下面这个代码是一样的。
def add(x, y):
    return x + y

类型注解介绍
我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。
Python解释器会在运行的时候动态判断变量和参数的类型,这样的好处是编写代码速度很快,很灵活,但是坏处也很明显,不好维护,可能代码写过一段时间重新看就很难理解了,因为那些变量、参数、函数返回值的类型,全都给忘记了。
而且当你在读别人的代码的时候,也无法一眼看出变量或者参数的类型,经常要自己推敲,这样给学习带来了很大的障碍。
所以Python3里有了这个新特性,可以给参数、函数返回值和变量的类型加上注解,不过这个仅仅是注释而已,对代码的运行来说没有任何影响,变量的真正类型还是会有Python解释器来确定,你所做的只是在提高代码的可读性,仅此而已。

看代码
def add(x: int, y: int) -> int:
    return x + y


def area_calculation(radius: float) -> float:
    # 变量类型注解需要 py3.6 以上版本
    # Var Type Annotations need python 3.6 and later
    pi: float = 3.1415926
    return radius * radius * pi


if __name__ == '__main__':
    print(add(1, 2))
    print(add.__annotations__)
    print(area_calculation(2))
    print(area_calculation.__annotations__)

运行结果:
3
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
12.5663704
{'radius': <class 'float'>, 'return': <class 'float'>}

这里调用了函数的__annotations__属性,通过这个属性可以看到参数和返回值类型的注解。
测试注解的正确性
前面说了,这个注解仅仅起到了注释的作用,不会影响代码的执行,所以即使你类型注解写错了,程序运行的时候还是会按照正确的类型去运行。
然后,Python提供了一个工具方便我们测试代码里的类型注解正确性,mypy
首先安装:
pip install mypy

使用测试:
mypy filename.py

如果没有错误则没有输出,如果有错误则会有相应输出,如
$ mypy demo.py
demo.py:14: error: Incompatible return value type (got “float”, expected “int”)

作者:画星星高手 链接:https://www.jianshu.com/p/72bfd33e41af 来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

11.例举你知道 Python 对象的命名规范,例如方法或者类等

Google Python命名规范

module_name,  模块

package_name,  包

ClassName,  类

method_name,  方法

ExceptionName,   异常

function_name,  函数

GLOBAL_VAR_NAME, 全局变量

instance_var_name,  实例

function_parameter_name,   参数

local_var_name.  本变量

12.Python 中的注释有几种?

1.python单行注释符号(#)
2.批量、多行注释符号。多行注释是用三引号'''   '''包含的
3.python中文注释方法,开头声明保存编码的格式:
	#coding=utf-8
	或者:
	#coding=gbk

13.如何优雅的给一个函数加注释?

**为函数添加文档注释**

注释尽管在程序中不是必须的,但却是必要的。如果没有注释,那么程序就很难被别人读懂,甚至果断时间,自己都看不明白自己写的程序。Python语言支持单行注释和多行注释,前者使用井号(#)表示,后者使用三个单引号或双引号将多行注释内容括起来。对于函数来说,还可以使用另外一种注释:文档注释。

不管单行注释还是多行注释,在程序编译后,这些注释都会被编译器去掉,也就是说,无法再程序中通过代码来动态获取单行注释和多行注释的内容。而文档注释作为程序的一部分一起存储,通过代码可以动态获取这些注释。文档注释有一个重要的作用,就是让函数、类等Python元素具有描述功能。通过一些工具,可以为所有添加了文档注释的函数和类生成文档。很多编程语言的API帮助信息就是这么做的。

为函数添加文档注释,需要在函数头(包含def关键字的那一行)的下一行用一对单引号或双引号将注释括起来。

def add (x,y):
    "计算两个数的和"
    return x + y

在上面的代码中,“计算两个数的和”就是add自定义函数的文档注释。可以使用"doc"函数属性获取add函数的文档注释。要注意,"doc"中’doc’的两侧分别是两个下划线(_)。

def add (x,y):
    "计算两个数的和"
    return x + y

print(add.__doc__)
#输出结果:计算两个数的和

#也可以直接使用help函数获取函数的文档注释
help(add)

    输出结果:
    
    计算两个数的和
    Help on function add in module __main__:
    add(x, y)
        计算两个数的和
    --------------------- 

版权声明:本文为CSDN博主「python进阶之路」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45086637/article/details/90759102

14.如何给变量加注释?

变量的声明同一行加上#的注释

15.Python 代码缩进中是否支持 Tab 键和空格混用。

混用Tab和空格是指相邻的两句的缩进需要统一使用tab或统一使用空格,不能混用

python中不提倡使用tab缩进
不同编辑器对于TAB的解释是不同的,有的编辑器tab是4个字符宽,有的8个字符宽。
如果有的地方用TAB,有的地方用空格,在不同的地方,原本对齐的代码就可能会不对齐。

空格永远都是一样的。
对于一些细致排版缩进来说(比如说想把每一行的注释都对齐),用空格也更加精确。

有时候IDE会自动帮你将Tab键展开为为空格,对于普通编辑器来说ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值