本文内容整理自DataCamp课程之 Intro to Python for Data Science.
本系列将包括以下内容:
- Python 基础
- Python 列表 list
- 函数、方法和包 (本文)
- Numpy 入门
访问 我的github 可下载本文对应的notebook以及练习答案,便于亲手实践。
注意:本文代码基于Python3版本。如果要在python2中执行,需要先导入_future_模块。
#仅在Python2中使用
#from __future__ import division
#from __future__ import print_function
1. 函数 Functions
函数是一段可重复使用的代码,往往是为了解决某个特定的任务。Python中有大量现成的函数可以调用,大大减轻了自己写代码的工作量。可以将函数看成是一个黑盒子,只需喂给它特定的参数,就能生成想要的结果。
Functions来看上一讲中使用的家庭身高数据,我们使用 max()
函数找出最高的身高。
fam = [1.73, 1.68, 1.71, 1.89]
tallest = max(fam)
print(tallest)
`1.89`
使用 `round()` 函数对该身高作近似估计。
>```python
round(tallest, 1)
1.9
round(tallest)
` 2`
注意,上面采用了不同的参数个数,输出结果也不一样,这是为什么呢?我们可以使用帮助函数 `help()` 来查看round函数的说明。
>```python
help(round)
Help on built-in function round in module builtins: round(...) round(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative.
从函数的说明中可以发现,round 函数有两个参数:其一是 number,它是需要做近似的数值,不可缺省;其二是 ndigits,是需要近似的小数点位数,由中括号括起,表示可以省略,默认值是0。这就解释了先前的例子。当然,查看函数还有一个方法,就是在函数名前加问号,比如 ?round
。
练习3-1:
Python中有许多内建函数,通过下面的练习让我们来使用一下。
# 创建两个变量 var1 和 var2
var1 = [1, 2, 3, 4]
var2 = True
# 打印输出变量 var1 的类型
# 打印输出变量 var1 的长度
# 将变量 var2 转化成整形变量 out2
print(type(out2))
提示:type()
判断变量类型;len()
计算列表长度;int()
强制转换成整形。
下面这个练习是将两组列表合并,并对数据元素进行降序排列。
# 创建连个列表 first 和 second
first = [11.25, 18.0, 20.0]
second = [10.75, 9.50]
# 将first 和 second 合并成新的列表 full
# 对 full 进行降序排列,存入新的变量 full_sorted
# 打印输出列表 full_sorted
提示:排序函数是 sorted()
, 参数 reverse 控制升序还是降序。
2. 方法 Methonds
本系列第二讲的最后提到了对象,Python中的一切都可以看成对象,列表是对象,整形、浮点型、布尔型、字符串也都是对象。每一种对象,都有其对应的属性和方法,用句点(.)标记法来访问它们。方法(Methods)可以看做是属于对象的函数。
我们先看一看列表的一些方法。
family = ['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89]
family.index("mom")
`4`
`.index(obj)` 给出了 obj 所对应的索引。
>```python
family.count(1.73)
1
.count(obj)
返回对象 obj 在列表中出现的次数。
family.append("brother")
family.append("1.79")
family
`['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89, 'brother', '1.79']`
`.append(obj)` 向列表中添加一个对象 obj。
可以使用 `dir(list)` 来查看列表对象的所有方法和属性。
我们再来看字符串的一些方法。
>```python
sister = 'liz'
sister.capitalize()
'Liz'
.capitalize()
把字符串的第一个字符大写。
sister.replace('z', 'sa')
` 'lisa'`
`.replace(str1, str2)` 把字符串中的 str1 替换成 str2。
#### 练习3-2:
字符串类型内建方法练习:
```python
# 创建字符串变量 room
room = "poolhouse"
# 对变量room使用 upper() 方法,存入变量 room_up中
# 打印输出 room 和 room_up,,观察upper()方法的作用效果
# 打印输出room中字符'o'的个数
列表类型内建方法练习(1):
# 创建列表 areas
areas = [11.25, 18.0, 20.0, 10.75, 9.50]
# 打印输出元素 20.0 的索引值
# 打印输出元素 14.5 在 areas 中出现的次数
列表类型内建方法练习(2):
# 创建列表 areas
areas = [11.25, 18.0, 20.0, 10.75, 9.50]
# 使用 append 方法在areas中增加 游泳池面积24.5和车库面积 15.45
# 打印输出areas
# 使用 reverse 方法,将 areas 列表原地翻转
# 打印输出 areas
3. 包 Packages
Python中的包(packages)可以看作是一系列相关模块的组合。而模块又是什么呢?它是Python中的一个源码文件(如mod1.py),包含了可执行代码、函数和类。常见的Python包有:用于数值计算的Numpy,用于数据分析的Pandas,用于绘图的Matplotlib,以及用于机器学习的Scikit-learn。
安装包的方法,可以使用 pip 或 conda, 在命令行中输入 pip install package_name
或 conda install package_name
。(前提是具备了pip工具或者conda环境,如果没有,还得事先选择一种来安装。)
在Python中导入包,采用 import package_name
的形式。比如:
import numpy
numpy.array([1,2,3])
`array([1, 2, 3])`
上面使用的 `numpy.array()` 是创建一维数组。如果嫌包名称太长,也可以赋予它简化的形式,方法如下:
>```python
import numpy as np
np.array([1,2,3])
array([1, 2, 3])
注意了,此时调用包中的函数时,需要将包名带上,以告知Python该函数的来源。如果忽略了包名,将出现如下错误:
array([1,2,3])
` ---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-12-27d393022d9f> in <module>()
----> 1 array([1,2,3])
NameError: name 'array' is not defined`
但是如果采用 `from ... import ...` 的形式将该函数直接导入时,则可以忽略包名。如下:
>```python
from numpy import array
array([1,2,3])
array([1, 2, 3])
然而这种方法,容易让其他代码阅读者傻傻分不清函数的来源。
练习3-3:
计算圆的周长和半径:
# 定义圆的半径r
r = 0.43
# 导入数学包 math
# 计算圆的周长 C (提示,math.pi给出圆周率)
C =
# 计算圆的面积 A
A =
# 输出
print("Circumference: " + str(C))
print("Area: " + str(A))
补充:
关于 我的github 中文件下载的方式:
-
如果下载单个文件,点击所要下载的文件,在新打开的页面中找到右上方的
raw
按钮,右击另存为即可。另外文件名需要删除后缀 .txt,而保留原始格式后缀,如 .ipynb 。 -
如果打包下载,回到github库的根目录中,点击右上方绿色的
Clone and download
按钮,选择Download ZIP
即可。
本文使用Jupyter notebook 编写,关于它的说明和安装方法,可以参考我之前的两篇文章。
网友评论
不过也遇到一个困惑,就是这些函数的使用格式。
比如print函数为什么格式是print(x),而index函数却必须是x.index()。 这其中是因为函数也分种类吗? 还是因为对象不同,而格式不同呢?
添扰啦,dr.fish