当前位置:
文档之家› Python程序设计课程11、函数总结
Python程序设计课程11、函数总结
def hello_1(greeting, name): print greeting, name
hello_1('hello', 'Smith') hello_1('Smith', 'hello') hello_1(‘hello’)或者hello_1( )
参数类型
• 关键字参数:如果在函数调用时使用关键字 参数,允许函数调用时参数的顺序与声明时不 一致
(p1 q1)2 (p2 q2 )2 (pn qn )2
• 构造一个数据集—用于存储用户偏好的字典。 • 设计一个函数,分别传入用户偏好字典,两个用户 的名字,计算出两个用户评价的相似度。
• from math import sqrt
• def sim_distance(prefs, person1,person2):
抽象
• 抽象是数学中非常常见的概念。 • 计算数列的和,比如:1 + 2 + 3 + ... + 100, 写起来十分不方便,于是数学家发明了求和符号∑。 • 在数学中,借助抽象,我们不关心底层的具体计算 过程,而直接在更高的层次上思考问题。 • 写计算机程序也是一样,函数就是最基本的一种代 码抽象的方式。
• 如果函数有return语句,并且给定返回值,则返回 对应的元组值。 • 如果函数有return语句,却没有给定返回值,则返 回None • 如果函数没有return语句,则函数默认返回None。 • 总结:函数返回元组值,或者None。
函数返回值
• #没有返回值 • def multi1(x,y): • z=x*y • print z • multi1(2,3) • print multi1(2,3)
除了从默认的目录中寻找之外,还需要从指定的目录中寻找 模块。完成这个步骤后,就能导入自己的模块了。
递归函数--二分查找
• import bubble
• def search(sequence,number,lower,upper):
• if lower==upper:
•
return upper
• else:
13689
冒泡排序—示例
• 序列sort_list =[r1,r2, …, rn-1, rn], 第1趟冒泡,进行n-1次比较
第2趟冒泡,进行n-2次比较 归纳:双重循环
……
对于具有n个记录的序列,
第n-2趟冒泡,进行2次比较 要进行n-1趟冒泡;
第n-1趟冒泡,进行1次比较
在第i趟冒泡过程中,要 进行n-i次比较。
2.5 3.5
2.5 2.0 2.0 1.0
the nitht listener
3.0 3.0 4.0 4.5 3.0 3.0
欧几里德距离
• 欧几里德距离是指多维空间两点间的距离,如果将 两个点分别标记为:(p1,p2,p3....pn)和 (q1,q2,q3.....qn),则欧几里德距离的计算公式为:
调用函数
递归
• 计算数n的阶乘n!=n*(n-1)*(n-2)*……*2*1
• 1、1的阶乘是1
• 2、大于1的数的阶乘是n*(n-1)!
• def factorial(n):
retruertnur3n*3fa*c2(2)
• if n==1: • return 1
fac6(3)
retruertnur2n*2fa*c1(1)
模块导入
• 任何python程序都可以作为模块导入 • 假设有一个python程序,被保存为hello.py文件 • 文件保存的位置为:'D:\Program Files (x86)\JetBrains\text2 • import sys • sys.path.append('D:\Program Files (x86)\JetBrains\text2')
编写函数
• 分别生成含有10个和20个数字长度的斐波那契数列
• def fibs(num):
• result=[0,1] • for i in range(num-2):
定义函数
• result.append(result[-2]+result[-1])
• return result
• print fibs(10) • print fibs(20)
冒泡排序—示例
• 然后在除8、9之外的其余3个数中找最大的数 排在倒数第三的位置,也就是第三趟冒泡。
36189 36189
五个记录 第三趟冒泡 两次比较
31689
冒泡排序—示例
• 然后在除6、8、9之外的其余2个数中找最大的数 排在倒数第四的位置,也就是第四趟冒泡。
31689
五个记录 第四趟冒泡 一次比较
• seq=[34,67,8,123,4,100,95]
• number=len(seq)-1
• bubble.bubble_sort(seq)
• print seq
• print search(seq,34,0,number)
初始数据
Lisa Gene Michael Claudia Mick Ack Toby
• #si用来存储两个用户共同的列表
• si={}
• for item in prefs[person1]:
•
if item in prefs[person2]:
•
si[item]=1
• #如果两者没有共同之处,则返回0
• if len(si)==0:return 0
• #求偏好空间距离,计算所有差值的平方和
•
if sort_list[j] > sort_list[j+1]:
•
sort_list[j], sort_list[j+1] = sort_list[j+1], sort_list[j]
• return sort_list
• seq=[34,67,8,123,4,100,95]
• print bubble_sort(seq)
def hello_2(greeting, name): print greeting, name
hello_2(greeting='Hello', name='Smith') hello_2(name='Smith', greeting='Hello')
参数类型
• 关键字参数:在定义函数时使用,表示给参数提供 默认值,如果调用时没有传入值,则使用默认值。 如果传入参数则覆盖默认的参数值。
• sum=0
• for item in prefs[person1]:
•
if item in prefs[person2]:
•
sum+=pow(prefs[person1][item]-prefs[person2][item],2)
• sum_sqrt=sqrt(sum)
• #变换写法
• # sumx=0
函数定义
• def square(x):
• 'calculates the square of the number x‘
• y=x*x • return y
函数定义:使用def语句定义,由 语句块组成,可以从“外部世界” 获得值(参数),也可以返回一 个或者多个值作为运算的结果。
函数参数
• def add_params(x,y): • z=x+y • print z
Lady in the water
2.5 3.0 2.5
3.0 3.0
Snakes on a Just my
plane
luck
3.5
3.0
3.5
1.5
3.0
3.53.04Fra bibliotek02.0
4.0
2.0
4.5
Superman returns
3.5 5 3.5 4.0 3.0 3.0 4.0
You,me and dupree
编写函数
• 计算斐波那契数列:指的是这样一个数列0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,610,987,1597,2584,4181,6765,10946, 17711,28657,46368........ • 从观察中可以看出:这个数列从第3项开始,每一 项都等于前两项之和。
• else: • return n*factorial(n-1)
return 1
• print factorial(3)
冒泡排序—基本思想
• 对于待排序的列表进行多遍扫描,两两比较相邻
记录的值,如果这两个记录的值的次序与排序要
求的规则不一致,则将这两个记录交换,直到没
有反序的记录为止。
小
大
r1 r2 …… rn
• #有一个返回值 • def multi2(x,y): • z=x*y • return z • multi2(2,3) • print multi2(2,3)
作用域
g = 1 #全局的
def fun(): g = 2 #局部的 return g
print fun() print g
• def scopetest(): • var=6; • print var • var=5 • print var • scopetest() • print var
函数从参数中得到需要的信息, 支撑函数的实际运行,也就是 函数调用时设定的变量。
• 函数被定义之后,所操作的值从哪里来呢?
• add_params(1,2)