当前位置:文档之家› python培训课件:函数练习

python培训课件:函数练习


这里定义的是一个局部变量,
func()
而不是全局变量。
局部变量和全局变量
• 2.函数内部的变量名如果是第一次出现,且出现在= 后面,且在之前已被定义为全局变量,则这里将引 用全局变量。 num = 100 def func(): x = num + 100 print x func()
局部变量和全局变量
函数返回值
• #return 后面没有给定值 • def test(): • print 'this is printed' • return • print 'this is not printed' • x=test() • print x
函数调用
• # coding: UTF-8
• def printme( str ): • "打印任何传入的字符串" • print str
• return result
• print fibs(10) • print fibs(20)
调用函数
定义函数
创建函数
• 请定义一个 square_of_sum 函数,它接受一个list,返回list中每个元 素平方的和。
• def square_of_sum(L): • sum=0 • for x in L: • x=x*x • sum=sum+x • return sum • print square_of_sum([1, 2, 3, 4, 5]) • print square_of_sum([-5, 0, 5, 15, 25])
• 1.定义函数内部的变量名如果是第一次出现,且在=
前,那么就认为是被定义为局部变量。在这种情况
下,不论全局变量中是否用到该变量名,函数中使
用nu的m都= 是10局0 部变量。 局部变量num在赋值前被应用。
def func():
也就是说该变量没有定义就
num += 100
被错误使用。由此再次证明
print num
定义函数
• return • printme("我要调用用户自定义函数!") • printme("再次调用同一函数")
调用函数
调用函数
• def fibs(num):
• result=[0,1]
• for i in range(num-2):
• result.append(result[-2]+result[-1])
创建函数--斐波那契数列
• 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)
局部变量和全局变量
• 1.定义在函数内部的变量名,如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量。 在这种情况下,不论全局变量中是否用到该变量名, 函数中使用的都是局n部um变=量10。0 def func(): num = 123 print num func()
局部变量和全局变量
这说明函数中的 变 量 名 num 被 定 义为全局变量, 并被赋值为200。
func()
print num
局部变量和全局变量
• 4.在函数中将某个变量定义为全局变量时需要使用关 键字globnaulm。= 100 def func(): global num num = 200 num += 100 print num func() print num
局部变量和全局变量
• def scopetest(): • var=6; • print(var) • var=5 • print(var) • scopetest() • print(var)
这 里 var 首 先 搜 索 的 是 本 地 变 量 , scopetest()中 var=6相当于自己定义了一 个局部变量,赋值为6. 当然如果的确要 修改全局变量的值,则需要如下:
局部变量和全局变量
• i=0 • def f(): • print i • i=0 • f()
在这个例子当中,函数f中的变量i是局部变 量,但是在print语句使用它的时候,它还未 被绑定到任何对象之上,所以抛出异常。
UnboundLocalError: local variable 'i' referenced before assignment
调用函数
定义函数
作用域
• #coding=utf-8 • g = 1 #全局的 • def fun(): • g = 2 #局部的 • return g • print fun() • print g
g = 1 #全局的
def fun(): g = 2 #局部的 return g
print fun() print g
汉诺塔
• def Hanoi(n, A, B, C) : • if (n == 1) : • print "%s-->%s" %(A ,C) #只有一个碟子时,直接从A塔移动到C
塔 • else : • Hanoi(n - 1, A, C, B) #将剩下的A塔上的n-1借助C塔移动到B塔 • print "%s-->%s" %(A ,C) #将A上最后一个直接移动到C塔上 • Hanoi(n - 1, B, A, C) #将B塔上的n-1个碟子借助A塔移动到C塔 • Hanoi(4, 'A', 'B', 'C')
函数返回值
• #没有返回值 • def multi1(x,y): • print x*y • print multi1(2,3)
• #有一个返回值 • def multi2(x,y): • return x*y • print multi2(2,3)
函数返回值
• #有两个返回值 • import math • def move(x, y, step, angle): • nx = x + step * math.cos(angle) • ny = y + step * math.sin(angle) • return nx, ny • x, y = move(100, 100, 60, math.pi / 6) • print x, y
状况处理。 • 每次函数调用时,针对这个调用的新命名空间会被创建,
意味着当函数调用 自身时,实际上运行的是两个不同的 函数(或者说是同一个函数具有两个不同的命名空间)。
递归函数
• def print_currence_number(num): • if num<0: • return • print num • print_currence_number(num-1) • print num • return • print_currence_number(5)
局部变量和全局变量
• def scopetest(): • global var • var=6; • print(var)# • var=5 • print(var) • scopetest() • print(var)
函数变量
• 1、变量的作用域由代码被赋值的位置所决定 2、变量可以在3个不同地方,对应3种不同作用域: (一)一个变量在函数内赋值,它的作用范围被定 位在函数之内 (二)当变量是在一个嵌套的函数中赋值时,对于 这个嵌套的函数来说,这个变量是非本地的 (三)变量在函数外赋值,它作用域就是当前整个 文件的全局变量
• 递归的能力在于用有限的语句来定义对象的无限集合。 一般来说,递归需要有边界条件、递归前进段和递归返 回段。当边界条件不满足时,递归前进;当边界条件满 足时,递归返回。
递归函数
• 函数可以调用自身 • 有用的递归应该包括以下几部分: • 1. 子问题须与原始问题为同样的事,且更为简单(能不
能逐层分解成一个个规模依次变小的小问题); • 2. 不能无限制地调用本身,须有个出口,化简为非递归
调用函数
定义函数
递归函数--斐波那契数列
• x=input('number:')
递归函数
• 递归算法一般用于解决三类问题: • (1)数据的定义是按递归定义的。(Fibonacci函数) • (2)问题解法按递归算法实现。 • 这类问题虽则本身没有明显的递归结构,但用递归求解
比迭代求解更简单,如Hanoi问题。 • (3)数据的结构形式是按递归定义的。 • 如二叉树、广义表等,由于结构本身固有的递归特性,
局部变量和全局变量
• i=0 • def f():
i=8 print i • f() • print i
运行结果显示:8和0。i = 8是一个名字绑 定操作,它在函数f的局部作用域中引入了 新的变量i,屏蔽了全局变量i,因此f内部 的print语句看到的是局部变量i,f外部的 print语句看到的是全局变量i。
• 用global语句的使用方法很简单,基本格式是:关键字
global,后跟一个或多个变量名
>>>x = 6
>>>def func():
用print语句输出x的值,此时的全局
>>> global x >>> x = 1 >>> >>>func() >>>print x
变量x值被重新定义为1 python中的global语句是被用来声明 是全局的,所以在函数内把全局变量
局部变量和全局变量
相关主题