从玩耍Excel表格到MySQL数据仓库,之后进入数据分析的天坑,然后再到大数据平台HIVE、Hbase。接着Django Web全栈开发。在走过这一圈之后,很多的内容学习都是碎片化的,在未来一段时间找几本书籍系统的学习一下,顺便做个笔记给后来的学生。
在编程的语境下,“函数”这个词的意思是对一系列语句的组合,这些语句共同完成一种运算。定义函数需要给函数指定一个名字,另外还好写出这些进行运算的语句。定义完成后,就可以通过函数名来“调用”函数。
Python提供了一些转换数值类型的函数。
>>> type(10)
<class 'int'>
但是并不是什么数据类型都能转换,需要确保被转换的数据类型合法,换句话理解为可以是真实存在的。
>>> int('32')
32
>>> int('Hello')
ValueError: invalid literal for int(): Hello
>>> int(1.91)
1
>>> int(-1.3)
-1
>>> float(12)
12.0
>>> float('3.14159')
3.14159
>>> str(12)
'12'
>>> str(3.14159)
'3.14159'
数据函数模块是Python内置,提供了绝大多数数学方面的计算公示并封装成了函数。
实用数学函数之前必须进行加载导入
>>> import math
>>> math
<module 'math' (built-in)>
>>> ratio = 0.5
>>> ratio_result = 10 * math.log10(ratio)
-3.010299956639812
>>> ratio = 0.7
>>> sin_reslut = math.sin(ratio)
0.644217687237691
>>> radians = 45/ 180.0 * math.pi
>>> math.sin(radians)
0.707106781187
x = math.sin(45/ 360.0 * 2 * math.pi)
x = math.exp(math.log(x+1))
def is_divisible(x, y):
if x % y == 0:
return True
else:
return False
>>> is_divisible(6, 4)
False
>>> is_divisible(6, 3)
True
if is_divisible(x, y):
print('x is divisible by y')
# 等价于
if is_divisible(x, y) == True:
print('x is divisible by y')
函数名后面的括号是空的,意思是这个函数不需要参数。
def 函数名(参数):
函数要执行的语句
def print_lyrics():
print("请你在我怀里一起生活吧。")
print("做着美梦 在梦里不知不觉。")
def repeat_lyrics():
print_lyrics()
repeat_lyrics()
请你在我怀里一起生活吧。
做着美梦 在梦里不知不觉。
def get_lyrics():
data = "请你在我怀里一起生活吧。"
return data
lyrics = get_lyrics()
请你在我怀里一起生活吧。
写一些复杂函数的时候,你会发现要花很多时间调试。不如将所有的内容整合刀一个函数里进行增量式的代码编写节省时间,并且逻辑更加清楚。
def distance(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
dsquared = dx**2 + dy**2
result = math.sqrt(dsquared)
return result
如果你能看懂代码就一定知道这是一个欧式距离的计算公式
d i s t a n c e = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 distance = \sqrt{(x_2 − x_1)^2 + (y_2 − y_1)^2} distance=(x2−x1)2+(y2−y1)2
用代码来实现了这个公式的计算。
例如现在有个问题,函数需要两个点,一个是圆心,一个是圆周上面的点,函数要用来计算这个圆的面积。
需要
def area(radius):
a = math.pi * radius**2
return a
def circle_area(xc, yc, xp, yp):
radius = distance(xc, yc, xp, yp)
result = area(radius)
return result
# 等价于
def circle_area(xc, yc, xp, yp):
return area(distance(xc, yc, xp, yp))
为了确保一个函数在首次被调用之前已经定义,你必须要之道语句运行的顺序,也就是所谓『运行流程』。
一个Python程序都是从第一个语句开始运行的。从首至尾,每次运行一个语句。
函数的定义并不会改变程序的运行流程,但要注意,函数体内部的语句只有在函数被调用的时候才会运行。
函数调用就像是运行流程有了绕道的行为。没有直接去执行下一个语句,运行流跳入到函数体内,运行里面的语句,然后再回来从离开的地方继续执行。
总的来说,你阅读一个程序的时候,并不一定总是要从头到尾来读的。有时候你要按照运行流程来读才更好理解。
实际参数就是调用函数时候传给他的那个参数,而形式参数可以理解为函数内部定义用的参数。
def print_(data):
print(data)
print(data)
>>> print_twice(42)
42
42
# data 形式参数
# 42 实际参数
# 定义函数
def print_(data):
print(data)
print(data)
# 调用函数
>>> print_(math.cos(math.pi))
-1.0
-1.0
# 等价于
data = math.cos(math.pi)
>>> print_(data)
-1.0
-1.0
在函数内部建立一个变量,这个变量是仅在函数体内部才存在。
def print_(data):
print(data)
print(data)
def data_twice(part1, part2):
part = part1 + part2
print_(part)
>>> data1= 'hello'
>>> data2= 'python.'
>>> data_twice(data1, data2)
hello python.
hello python.
执行完毕之后 我们调用part会提示未定义
>>> print(part)
NameError: name 'part' is not defined