2022年 11月 4日

python 累乘函数_【Python学习】——5.1函数

【Python学习】——5.1函数以代码行数来衡量程序设计的进度,就好比以重量来衡量飞机的制造进度。

——比尔·盖茨

提起函数大家可能脑海出现的是这样的图片:

这是数学上所指的函数,和计算机中的函数有所不同。

在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合。定义一个函数时,需要指定函数的名称并写下一系列程序语句。之后,就可以使用名称来“调用”这个函数。可以理解函数是一段具有特定功能的、可重用的语句组。函数是功能的抽象。

函数的目的:降低编程难度和代码复用。

函数的定义

Python使用def保留字定义一个函数,语法形式如下:

def():

return

举个例子:

#计算n!

def fact(n):

s=1

for i in range(1,n+1):

s *= i

return s

def是关键字,表示接下来是一个函数的定义,这个函数名称是fact,函数名称的书写规则和变量是一样的:字母、数字、下划线是合法的,但第一个字符不能是数字。关键字不能作为函数名,而且应该尽量避免函数和变量重名。n是参数,函数定义中的参数称为形式参数是一种占位符。s是返回值。函数的定义也可以说是函数声明,如果不调用函数,则不会执行函数。

函数的调用

调用是运行函数的方式

程序调用一个函数需要执行以下4个步骤:调用程序在调用处暂停执行

在调用时将实际参数复制给函数的形式参数

执行函数体语句

函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

例如对上面的函数进行调用

#计算n!

def fact(n):

s=1

for i in range(1,n+1):

s *= i

return s

a=fact(10) #计算10!

print(a)

函数的参数传递

函数可以有参数,也可以没有参数,但必须保留括号

函数定义时可以为某些参数指定默认值,构成可选参数,可选参数必须定义在非可选参数的后面。

def (,):

例如对上面的例子,我们想要计算n!//m,则可以有:

def fact(n,m=1):

s=1

for i in range(1,n+1):

s *= i

return s//m

a=fact(10,5)

print(a)

m=1就是可选参数

在函数定义时,也可以设计可变数量的参数,称可变参数,通过在参数前面加星号(*)实现。可变参数也只能出现在参数列表的最后,调用时,这些参数被当作元组类型传递到函数中。例子如下:

#计算n!乘数

def fact(n,*b):

s=1

for i in range(1,n+1):

s *= i

for item in b:

s *= item

return s

fact(10,3,5,8)

fact函数定义了可变参数b,调用fact函数时输入到(3,5,8)被当作元组传递给b,与n累乘后输出。

函数调用时,参数可以按照位置传递或者名称传递

def fact(n,m=1):

s=1

for i in range(1,n+1):

s *= i

return s//m

fact(10,5) #位置传递

fact(m=5,n=10) #名称传递

函数的返回值

return保留字用来传递返回值

函数可以有返回值,也可以没有,可以有return,也可以没有。

return可以传递0个返回值,也可以传递任意多个返回值。多个值以元组形式保存。

函数对变量的作用

局部变量和全局变量

全局变量是指在函数之外定义的变量,一般没有缩进,在程序执行中全过程有效。

局部变量是指在函数内部使用的变量,仅对函数内部有效,当函数退出时变量将不存在。

举个例子:

n,s=10,100 #n和s是全局变量

def fact(n):

s = 1

for i in range(1,1+n): #fact()中的n,s是局部变量

s *= i

return s

print(fact(n),s) #n和s是全局变量

最后运行结果是n=3628800 ,s=100

局部变量和全局变量的规则:局部变量和全局变量是不同的变量局部变量是函数内部的占位符,可与全局变量重名但不同

函数运算结束后,局部变量被释放

可以使用global保留字在函数内部使用全局变量

局部变量为组合数据类型且未创建,等同于全局变量

ls = [“F”,”f”]#通过[]创建了一个全局变量列表ls

def func(a):

ls.append(a)#此处的ls是列表类型,且未真实创建,则等同于全局变量

return

func(“C”)#全局变量ls被修改

print(ls)运行结果是[“F”,”f”,”C”]

另一种情况是在函数内部真实创建了个组合数据类型例子如下:

ls = [“F”,”f”] #通过[]创建了一个全局变量列表ls

def func(a):

ls = [] #此处的ls是列表类型,真实创建ls,则是局部变量

ls.append(a)

return

func(“C”) #局部变量ls被修改

print(ls)运行结果是[“F”,”f”]