python简单函数程序 python函数编程( 三 )


怎样解决这个问题?
程序3:
a=1
def a_add(x):
x+=1
return x
print('a的初值:',a)
a=a_add(a)
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
结果的确是正确的,但在函数a_add(x)中没有调用变量a(没有出现变量a) 。
程序4:
a=1
def a_add(a):
a+=1
return a
print('a的初值:',a)
a=a_add(a)
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
对比程序4和程序3不难发现,其实程序4只是简单的把函数的参数x变成了a,这个a的实质和程序3中的x还是一样的 。这进一步证实,函数中的a是局部变量,与主程序的全局变量a有着本质的区别 。
程序5:
a=1
def a_add():
global a
a+=1
print('a的初值:',a)
a_add()
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
程序5和程序2相比较,仅仅是在函数中添加了一个定义“global a”,此时的局部变量a就可以当做全局变量使用,由于它和全局变量a同名,自然也就不用区分a究竟是全局变量还是局部变量了,在主程序和该函数内都可以访问、修改变量a的值了 。
虽然使用global可使变量使用起来非常方便,但也容易引起混淆,故在使用过程中还是谨慎为好 。
12.3 函数的递归与嵌套
递归,就是函数调用它自身 。递归必须设置停止条件,否则函数将无法终止,形成死循环 。
以计算阶乘为例:
def func(n):
if n==1:
return 1
else:
return n*func(n-1) #func( )调用func( )
print(func(5))
运行结果为:120
嵌套 , 指在函数中调用另外的函数 。这是程序中常见的一种结构,在此不再赘述 。
匿名函数
Python中可以在参数前加上关键字lambda定义一个匿名函数,这样的函数一般都属于“一次性”的 。
例如:
程序1:这是一个常规的函数定义和调用 。
def f_add(x,y):
return x+y
print(f_add(2,3))
输出结果:5
程序2:使用lambda定义匿名函数 。
f_add=lambda x,y:x+y
print(f_add(2,3))
输出结果:5
从上面的代码可以看出 , 使用lambda仅仅减少了一行代码 。f_add=lambda x,y:x+y中的f_add不是变量名,而是函数名 。程序1和程序2的print( )语句中的参数都是一样的——调用函数f_add( ) 。所以,匿名函数并没有太多的优点 。
Python中的常用内置函数有哪些呢?(1)Lambda函数
用于创建匿名函数,即没有名称的函数 。它只是一个表达式,函数体比def简单很多 。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了 。
Lamdba的主体是一个表达式 , 而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
利用Lamdba函数,往往可以将代码简化许多 。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素 。
我们还可以使用匿名函数lamdba来配合map函数 , 这样可以更加精简 。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数 。举个例子 , 当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现 。
它与函数的最大的区别就是 , reduce()里的映射函数(function)接收两个参数,而map接收一个参数 。

推荐阅读