Q1 Python常见的解释器有哪些?CPython,最常见的一种。用C语言开发,故取名CPython。在命令提示符中运行 python,即可启动CPython解释器,开始编程。IPython,第二常见。基于CPython开发出来的一个交互式解释器。该解释器突出的是交互性能。
PyPy:基于CPython开发,采用JIT技术,对代码进行动态编译,目标是提高Python的执行速度。
Jython:运行在JAVA平台,是Python在JAVA中的完全实现。可以直接把Python代码编译成JAVA字节码后直接执行。
Q2 Python常见的开发环境有哪些?Python默认自带的IDLE(集成开发环境),比较原始,比较高效。用来学习Python的基础知识是绰绰有余的,也是一些培训课程所推崇的。运行界面有点像上面的CMD,不过是可以新建脚本(代码文件.py),然后运行,再在交互窗口查看结果。也可以直接在交互窗口输入代码,直接得到结果。Spyder: 专为数据分析而打造(本人最常用),可以设置为类似RStudio的界面。可以通过Python综合数据分析环境Anaconda安装。
Jupyter Notebook: 名字起源于Julia、Python和R,在教学和展示中非常流行。交互界面非常友好,常用于代码的逐行分析和运行结果展示。
PyCharm:专用于Python的全功能开发,在码农界最受推崇,综合性能突出,方便进行解释器和包的管理。
Vistal Studio Code,微软的综合开源开发平台,近几年慢慢流行开来。
其他,如Eclipse + PyDev,Sublime Text,Atom,GNU Emacs,VI/VIM ,Thonny。
Q3 Python自学或平时使用如何获取帮助?help() 函数:可以直接输入help();也可以help函数名称,或者help某个模块。
help()
Welcome to Python 3.8's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.8/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
help> #按提示直接输入下一步的命令
You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)". Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
help(print) #怎么看都没有R的帮助文件那么友好,更别提Stata了
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
import math
help(math)
Help on built-in module math:
NAME
math
DESCRIPTION
This module provides access to the mathematical functions
defined by the C standard.
FUNCTIONS
acos(x, /)
Return the arc cosine (measured in radians) of x.
## 后面长长大片的输出结果省略dir()函数
dir()是Python自带的函数,用于展示某个包下面的模块列表,或者某个模块下面的函数列表。
dir(print)
Out[60]:
['__call__',
'__class__',
'__delattr__',
'__dir__',
## 中间大量输出结果省略
'__self__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__text_signature__']
import math
dir(math)
Out[62]:
['__doc__',
'__loader__',
## 中间大量输出结果省略
'tan',
'tanh',
'tau',
'trunc']
help(math.tan)
Help on built-in function tan in module math:
tan(x, /)
Return the tangent of x (measured in radians).
Q4 Python的5种基础数据类型是什么?
(1)Numbers(数字),用来保存数值
## Software @Spyder
## Author @盲区行者
x = 3.1415926
x
Out[2]: 3.1415926
## type()函数查看类型
type(x)
Out[10]: float ##浮点型
(2)Strings(字符串),用来保存字符
myname = "盲区行者" #用英文双引号声明。也可以用单引号声明。两种符号灵活使用
myname
Out[4]: '盲区行者'
type(myname)
Out[11]: str ##字符串型
(3)List(列表),用来保存有序的元素集合
可以说,列表几乎是Python最重要的基础数据类型了。它的使用非常的灵活,用途广泛。比如可以用在一些小算法题目中暂存数据(后面的题目频繁出现),也可以用在爬虫爬取的数据存储等等。
mynicknames = [1898, '盲区行者', '盲区行者1898', ["a", "b", "c"]]
mynicknames
Out[18]: [1898, '盲区行者', '盲区行者1898', ['a', 'b', 'c']]
type(mynicknames)
Out[19]: list ##列表型
mynicknames[0] ##检索mynicknames的第一个元素。Python的元素索引是从0开始。末尾从-1开始。
Out[20]: 1898
mynicknames[0] = 1998 ##可以改变列表的元素的取值
mynicknames[3] ##列表中也可以包含列表
Out[21]: ['a', 'b', 'c']
mynicknames[1:3] ##检索第2到第3个,共2个元素
Out[22]: ['盲区行者', '盲区行者1898']
(4)Tuple(元组),用来保存某些元素的集合。但是元素取值是固定的
tuple1 = (1898, '盲区行者', '盲区行者1898', ["a", "b", "c"]) #用圆括号来定义
tuple1
Out[30]: (1898, '盲区行者', '盲区行者1898', ['a', 'b', 'c'])
## Tuple元组的元素的取值无法更改
tuple[0] = 1998
Traceback (most recent call last):
File "", line 1, in
tuple[0] = 1998
TypeError: 'type' object does not support item assignment
(5)Dictionary(字典),用来保存键(key)值(value)对
dict1 = {"name":"Steph Curry", 'birthday':'18980101', 'height':194}
dict1 ##键和值的元素,都可以是字符串或者数字
Out[46]: {'name': 'Steph Curry', 'birthday': '18980101', 'height': 194}
type(dict1)
Out[47]: dict
## 通过key键来检索元素,而不是数字编码
dict1["height"]
Out[49]: 194
dict1.keys()
Out[50]: dict_keys(['name', 'birthday', 'height'])
dict1.values()
Out[51]: dict_values(['Steph Curry', '18980101', 194])
Q4小结:列表和元组的区别在于定义方式不同,且列表的元素取值可以更改,但元组的元素不能更改。
列表和字典的区别在于,列表是有序的元素集,而字典的元素是无序的集合,只能通过键的取值进行访问(对应的值)。
终于写完漫长的第4题。这里摆上本文几本关键的References参考书籍(前两本在京东自营是最畅销的两本,一本是歪果仁写的,一本是国人写的)。
Q5 Python的代码怎么保存?
Python的代码文件也叫Python模块,以.py为后缀进行保存。对应的,R语言用.R保存代码,而Stata用的是.do。
Q6 Python的切片slice什么意思?
Python中对元素序列(比如字符串、列表和元组)进行访问的方式,比如访问第2个到第5个:list1[1:6]。
切片的具体格式为:[start:end:step],对应[初始值:结束值:步长值],索引取值从正向从0开始,逆向从-1开始,不包括结束值对应的元素。
name = "Steph Curry"
name[5:11]
Out[55]: ' Curry' ##检索出来的第一个元素是空字符
Q6 用print函数打印一棵圣诞树
height = 10 ##定义圣诞树的树叶的层数。一共1层
starsn = 1 ##定义初始的、第一层树叶的星星的个数
## 用for循环来输出每层的树叶(星星)
for i in range(height): ##从第1层到第10层,逐层输出。注意:循环中i的取值是0到9,不是1到10!
print((' ' * (height - i)) + ('*' * starsn)) ##输出一定数量的空格,再输出一定数量的星星
starsn += 2 ##第一层输出10个空格,加1颗星星
print((' ' * height) + '|') ##第二层输出8个空格,加3颗星星
##即第i层,输出10-i个空格;以及逐层多输出2颗星星
* ##输出完10层星星后,第11层输出10个空格,加一条竖线
***
*****
*******
*********
***********
*************
***************
*****************
*******************
|
Q7 Python的十大内置函数是什么?print()输出/打印函数
input()键盘输入函数
format()格式化函数
open()文件读写函数
type() / isinstance() 查看类型函数
sorted()排序函数
range()数字序列生成函数
len()查看目标长度函数
round() / sum() / max() / min()等等基础数学函数
enumerate() / zip() / map() / ord() / chr()五个特殊功能函数
下面具体用例子说明。其中某些例子的用法对于初学者来说可能有点fancy,故可以跳着看关键的语句即可。
Q7.1 print()输出/打印函数#########################
# -*- coding: utf-8 -*- """ Created on Thu Dec 3 00:14:20 2020 @ software: Spyder @ author: 盲区行者 """
import time ##导入时间库
def printer(text, delay=0.3): ##定义一个叫printer的函数。其中delay延迟参数设置为0.3秒
'打字机效果演示'
for ch in text: ##逐个字符打印的循环语句
print(ch, end='', flush=True) ##打印ch这个字符串变量的每一个元素,且打印完一个元素后不带任何符号或空格
time.sleep(delay) ##打完一个字符后,时间延迟0.3秒
print()
printer('Life is short, you need Python! ---- 生命苦短,你用Python')##1. print()输出/打印函数
Out [1]: Life is short, you need Python! ---- 生命苦短,你用Python ##需要真正执行,才好看到逐个字符打印的效果
##2 input()键盘输入函数##########################
nums = input('请输入数字1-5,中间用空格隔开。输入结束后摁Enter键:') ##括号内是屏幕提示词
请输入数字1-5,中间用空格隔开。输入结束后摁Enter键:1 2 3 4 5
print(nums)
1 2 3 4 5 ##这其实是一个字符串
##可以通过split函数将上面输入的字符串切开
list1 = nums.split()
list1
Out[18]: ['1', '2', '3', '4', '5']
##再使用int()函数将5个数字转换为数字
list2 = [ int(item) for item in list1]
list2
Out[21]: [1, 2, 3, 4, 5]
type(list2[1]) ##查看第一个元素的类型
Out[26]: int
Q7.2 input()键盘输入函数##########################
nums = input('请输入数字1-5,中间用空格隔开。输入结束后摁Enter键:') ##括号内是屏幕提示词
请输入数字1-5,中间用空格隔开。输入结束后摁Enter键:1 2 3 4 5
print(nums)
1 2 3 4 5 ##这其实是一个字符串
##可以通过split函数将上面输入的字符串切开
list1 = nums.split()
list1
Out[18]: ['1', '2', '3', '4', '5']
##再使用int()函数将5个数字转换为数字
list2 = [ int(item) for item in list1]
list2
Out[21]: [1, 2, 3, 4, 5]
type(list2[1]) ##查看第一个元素的类型
Out[26]: int
Q7.3 format()格式化函数,基于%
## Python可以用个英文的冒号:格式化,也可以使用来自C语言的%。
## 还考虑到和Stata及R统一,我们推荐用%
x = format(0.5, '8.2f')
x
Out[34]: ' 0.50' ##0前面有7个空格
Y, M, D, h, m, s = 2020, 1, 10, 12, 7, 53 ##2020年1月10号,12点7分53秒
'%04d-%02d-%02d%02d:%02d:%02d' %(Y, M, D, h, m, s)
Out[32]: '2020-01-10 12:07:53'
Q7.4 open()文件读写函数
## 使用with...as结构来写
data = [[1,2,3],[4,5,6]]
with open(r'd:\data.csv', 'w') as fp:
for line in data:
ok = fp.write('%s\n'%','.join([str(item) for item in line]))
新生成的csv文件如下图:
## 从CSV文件中,逐个读出数据元素
numlist = list()
with open(r'd:\data.csv', 'r') as fp: ##r = read, 表示读出数据
for line in fp.readlines():
numlist.append([int(f) for f in line.strip().split(',')])
numlist
Out[39]: [[1, 2, 3], [4, 5, 6]]
Q7.5 type() / isinstance() 查看和判断类型函数
##type()函数前面我们已经演示过
##isinstance() 判断类型函数
a = [1, 2, 3]
isinstance(a, list)
Out[43]: True
isinstance(a, int)
Out[44]: False
Q7.6 sorted()排序函数
sorted函数用于对某个对象中的元素进行排序。排序的规则还可以变化,比如逆序排序,也可以基于某个元素的第一个子元素大小排序。对于Python数据分析,这个函数我们还会在pandas中做详细介绍,这里只是简单展示。
sorted([1, 3, 5, 2, 4]) ##对列表中的5个数字元素进行排序
Out[46]: [1, 2, 3, 4, 5]
Q7.7 len()查看目标长度函数
从字面意思上来看,这个应该是一个挺简单的函数。但是如果要涉及到“可迭代对象”的长度的时候,返回的结果可能稍微复杂一点。
len('Life is short! I need Python!')
Out[1]: 29
len([1,2,3,4,5])
Out[2]: 5
len({'Name':'Steph', 'Height':1.92})
Out[3]: 2
len(range(10))
Out[4]: 10
Q7.8 range()数字序列生成函数
这个range在写for循环的时候会经常用到。在我们自动快速数据对象的元素的时候,我们也可以使用。range还有自己的数据类型,就叫range。
range(10)
Out[11]: range(0, 10)
list(range(10))
Out[12]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
type(range(0, 10, 2))
Out[13]: range
for i in range(0, 10, 2):
print(i, end=', ')
0, 2, 4, 6, 8,
Q7.9 round() / sum() / max() / min()等等基础数学函数
round(3.14)
Out[25]: 3
round(3.54)
Out[26]: 4
round(-3.54)
Out[27]: -4
round(-3.14)
Out[28]: -3
sum([1, 2, 3, 4, 5])
Out[29]: 15
max([1, 2, 3, 4, 5])
Out[30]: 5
min([1, 2, 3, 4, 5])
Out[31]: 1
abs(-3.14)
Out[32]: 3.14
pow(4, 1/2) ##pow=power,幂运算。4的1/2次方,等于4的开方
Out[33]: 2.0
Q7.10 enumerate() / zip() / map() / ord() / chr()五个特殊功能函数
x=[1, 2, 3, 4, 5]
y=[2, 4, 6, 8, 10]
##和enumerate类似,zip函数也不可以直接单独使用
for a, b in zip(x, y):
print(a, b, sep='*2=')
1*2=2
2*2=4
3*2=6
4*2=8
5*2=10
Q8. 什么是Python的列表推导式?
列表推导式的出镜率非常高,主要用于推导、表示或者产生一个列表的各个元素。列表推导式是Python独有的一种语法,它可以让代码变得更加整洁。目前有些编程语言也模仿着创建了类似的用法。下面我们举例说明。
x = [1, 2, 3, 4, 5]
x
Out[14]: [1, 2, 3, 4, 5]
y = [i**2 for i in x]
y
Out[16]: [1, 4, 9, 16, 25]
## 这里当然也可以用map函数实现
## 如果使用传统方法,比如for循环是这样的:
x = [1, 2, 3, 4, 5]
y = list() ## 创建一个空的列表y
for i in x:
y.append(i**2)
y
Out[22]: [1, 4, 9, 16, 25]
Q9. 什么是Python的三元表达式?
三元操作符是C/C++的经典应用。比较符合直觉地使用if+else也可以完成类似功能,比如:
x = 1
if x < 0:
print('x是一个负数!')
else:
print('x是一个非负数!')
x是一个非负数!
不过,对应C/C++的三元操作符,Python也有自己专用的三元表达式,可以让语法变得简洁。
## Python的三元表达式
x = 1
print('x是一个负数!' if x<0 else 'x是一个非负数!')
x是一个非负数!
y=2
x = -1 if y < 0 else 1
x
Out[35]: 1
Q10. 什么是Python的lambda函数?
lambda函数,也被称为匿名函数。如果需要写一个临时的简单函数来实现某个具体的功能,那么lambda匿名函数是一个很好的选择。相对于普通的函数,匿名函数省略了return。下面以求均值的函数为例。
(lambda x1, x2, x3: (x1+x2+x3)/3) (101, 102, 103)
Out[41]: 102.0
## 也可以像普通函数那样,定义和引用lambda函数
ave = lambda x1, x2, x3: (x1+x2+x3)/3
ave(101, 102, 103)
Out[44]: 102.0
Q11. 什么是Python with-as语法?
with-as通常用于资源的访问,是一种上下文管理协议语法。在使用过程中,无论是否发生异常,都会事先和时候执行必要的准备和善后工作。这里以open和read函数为例说明。
data = open('C:/Users/Biaoyue/Desktop/std1.txt', 'r')
try:
std1 = data.readlines()
finally:
data.close()
std1
Out[61]:
['pid\tname\tbirthday\tfid\n',
'102\t盲区行者2\t10/10/2020\t2\n',
## 中间大量数据内容省略
'201\t盲区行者101\t1/17/2021\t101\n']
## 使用with-as写看起来会更优雅
with open('C:/Users/Biaoyue/Desktop/std1.txt', 'r') as data:
std1 = data.readlines()
std1
Out[64]:
['pid\tname\tbirthday\tfid\n',
'102\t盲区行者2\t10/10/2020\t2\n',
## 中间大量数据内容省略
'201\t盲区行者101\t1/17/2021\t101\n']