python基础
- 190道Python:
- 1..谈谈对 Python 和其他语言的区别
- 2 简述解释型和编译型编程语言
- 3 Python 的解释器种类以及相关特点?
- 4 Python3 和 Python2 之间的区别?
- 5.Python3 和 Python2 中 int 和 long 区别?
- 6.xrange 和 range 的区别?
- 7.什么是 PEP8?
- 8.了解 Python 之禅么?
- 9.了解 docstring 么?
- 10.了解类型注解么?
- 11.例举你知道 Python 对象的命名规范,例如方法或者类等
- 12.Python 中的注释有几种?
- 13.如何优雅的给一个函数加注释?
- 14.如何给变量加注释?
- 15.Python 代码缩进中是否支持 Tab 键和空格混用。
- 16.是否可以在一句 import 中导入多个库?
- 17.在给 Py 文件命名的时候需要注意什么?
- 18.例举几个规范 Python 代码风格的工具
- 19.列举 Python 中的基本数据类型?
- 20.如何区别可变数据类型和不可变数据类型
- 21.将"hello world"转换为首字母大写"Hello World"
- 22.如何检测字符串中只含有数字?
- 23.将字符串"ilovechina"进行反转
- 24.Python 中的字符串格式化方式你知道哪些?
- 25.有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。
- 26.获取字符串”123456“最后的两个字符。
- 27.一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
- 28. (1)s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', 'shandong'\](2) a = "你好 中国 ",去除多余空格只留一个空格。
- 29. (1)怎样将字符串转换为小写 (2)单引号、双引号、三引号的区别?
- 30.已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。
- 31.如何实现 "1,2,3" 变成 ["1","2","3"]
- 32.给定两个 list,A 和 B,找出相同元素和不同元素
- 33.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
- 34.合并列表[1,5,7,9]和[2,2,6,8]
- 35.如何打乱一个列表的元素?
- 36.字典操作中 del 和 pop 有什么区别
- 37.按照字典的内的年龄排序
- 38.请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4}
- 39.如何使用生成式的方式生成一个字典,写一段功能代码。
- 40.如何把元组("a","b")和元组(1,2),变为字典{"a":1,"b":2}
- 41.Python 常用的数据结构的类型及其特性?
- 42.如何交换字典 {"A":1,"B":2}的键和值?
- 43.Python 里面如何实现 tuple 和 list 的转换?
- 44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
- 45.请将[i for i in range(3)]改成生成器
- 46.a="hello"和 b="你好"编码成 bytes 类型
- 47.下面的代码输出结果是什么?
- 48.下面的代码输出的结果是什么?
- 49.Python 交换两个变量的值
- 51.json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?
- 52.json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?
- 53.有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。
- 54.如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。
- 55.写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。
- 56.下面代码会存在什么问题,如何改进?
- 57.一行代码输出 1-100 之间的所有偶数。
- 58.with 语句的作用,写一段代码?
- 59.python 字典和 json 字符串相互转化方法
- 60.请写一个 Python 逻辑,计算一个文件中的大写字母数量
- 61. 请写一段 Python连接 Mongo 数据库,然后的查询代码。
- 62.说一说 Redis 的基本类型。
- 63. 请写一段 Python连接 Redis 数据库的代码。
- 64. 请写一段 Python 连接 MySQL 数据库的代码。
- 65.了解 Redis 的事务么?
- 66.了解数据库的三范式么?
- 67.了解分布式锁么?
- 68.用 Python 实现一个 Reids 的分布式锁的功能。
- 69.写一段 Python 使用 Mongo 数据库创建索引的代码。
- 70.函数装饰器有什么作用?请列举说明?
- 71.Python 垃圾回收机制?
- 72.魔法函数 __call__怎么使用?
- 73.如何判断一个对象是函数还是方法?
- 74.@classmethod 和@staticmethod 用法和区别
- 75.Python 中的接口如何实现?
- 76.Python 中的反射了解么?
- 77.metaclass 作用?以及应用场景?
- 78.hasattr() getattr() setattr()的用法
- 79.请列举你知道的 Python 的魔法方法及用途。
190道Python:
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键展开为为空格,对于普通编辑器来说ÿ