Python-函数的定义与使用

1-4周课程笔记在笔记本上,抽空会腾出来
课程由中国大学MOOC提供,课程地址:https://www.icourse163.org/learn/BIT-268001?tid=1207014257
函数的定义
函数是一段代码的表示
def语句用来用户定义一个函数

def    <函数名>(<参数0 or N>):
       <函数体>
       return <返回值>

函数体指函数内部的语句代码
return给出当前函数的返回值

函数在定义时,所指定的参数是一种占位符
函数在定义后,如果不经过调用,不会执行
函数定义时,参数是输入,函数体是处理,结果是输出(IPO)
函数就IPO的实现,是一种完整的代码封装,代码复用可将代码封装到函数,并进行调用函数而实现代码复用

函数的调用过程
例:

def fact(n):
    s = 1
    for i in range(1,n+1):
        s*=i
    return s

a = fact(10)
print(a)

调用过程如下:
因定义了函数fact,fact的参数为n
将fact(n)中的n替换为参数10
将N的参数替换为10在函数体中运算

def fact(10):
    s=1
    for i in range(1,11):
        s*=i
    return s

函数运行结束后,由return返回当前函数计算后s的结果,再将s的结果赋值给a
最后输入a
结果为3628800

定义代码不被执行,而调用时,通过给定的实际参数,替换定义中的形式参数,获得运算结果

函数参数传递
函数可以有参数,也可以没有参数,但必须保留括号
如果没有参数便给出空括号
也可以在函数定义时,可以为参数指定默认值,构成可选参数
函数定义中,必须把非可选参数放在可选参数之前

def <函数名>(<非可选参数>,<可选参数>)

可变参数传递
函数定义时可以设计可变数量参数,既不确定参数的总数量时
例:

def <函数名>(<参数>,*b):
    <函数体>
    return <返回值>

b为可定义的变量名,无数量限制
例:

def fact(10,3,2,1,5)
for a in b

替换为for a in (3,2,1,5)

参数的传递
指:在函数调用时,如何将参数按照位置或名称方式传递到位置上
位置对应
例:

fact(m,n)  fact(10,5)

这是位置对应,即按顺序将输入的参数对应到同样顺序的参数位置上

fact(m,n)  fact(m=10,n=5)

这是名称对应,即按照m和n参数的赋值将参输入的数对应到相应参数上

函数的返回值
函数可以返回0个或多个结果
return保留字用来返回值
函数可以有返回值,也可以没有,可以有return,也可以没有
return可以返回0个返回值,也可以返回多个返回值

例:return s//m,n,m
用,分割
返回值为用小括号和,号组合形成的元组类型
也可以将这些返回值,分别赋值多个参数
比如

a,b,c=fact()
a=s//m
b=n
c=m

局部变量和全局变量

局部变量:函数内部使用的变量
全局变量:整个程序使用的变量
规则1:局部变量和全局变量是不同变量
-局部变量是函数内部的占位符,与全局变量可能重名但不同
-函数运行结束收,局部变量将被释放
-可以使用global保留字在函数内使用全局变量
例:

n=10
m=25
def fact(n,m)
.....

fact括号内的参数以及定义的函数体中的n和m与函数定义外赋值的n和m不同
函数定义内的n和m为局部变量
而函数定义外用于赋值的n和m变量为全局变量
两个变量不管进行什么运算,两个变量互不受影响

global保留字用来申明变量为全局变量不是局部变量

在函数体内先使用global +变量名定义这个变量,便可以申明在该函数体中,global申明过的变量为全局变量
例:

n,s=10,100
def fact(n):
    global s  #声明此处s是全局变量s
    for i in range(1,n+1):
        s*=i
    retun s #此处s指全局变量s
print(fact(n),s)

规则2:局部变量如果为组合数据类型且未创建,等同于全局变量
组合数据类型:多个数据组成的类型
例:

ls = ["F","f"]    #列表类型必须要用[]真实创建
def func(a)
    ls.apend(a)    #ls.apend(a)为在ls列表类型后,添加一个a变量的数据 未真实创建则等同于全局变量
    return
func("c")   #将func()函数中的参数改为字符c   全局变量ls被修改
print(ls)
#运行结果:
#['F','f','c']

ls = [“F”,“f”] 列表类型必须要用[]真实创建
def func(a)
ls =[] 此处ls是列表类型,在函数体中被真实创建
ls.apend(a) ls.apend(a)为在ls列表类型后,添加一个a变量的数据 真实创建则为局部变量
return
func(“c”) 将func()函数中的参数改为字符c 因ls在函数体中被真实创建,则不修改局部变量ls
print(ls)
运行结果:
[‘F’,‘f’]

如果一个组合类型在函数中被真实创建,就为这个函数的局部变量,待函数运行结束后,局部变量被释放,全局变量布发生改变
如果一个组合数据在函数中没有被真实创建,又全局变量的变量名相同,则改变相同全局变量

在python中,组合数据类型由指针体现,如果没有真实创建数据类型,使用的变量是指针,指针指向全局变量,所以就改变全局变量

使用规则总结
-基本数据类型,无论是否重名,局部变量与全局变量不同
-可以通过global保留字在函数内部声明全局变量
-组合数据类型,如果局部变量未使用[]真实创建,则是全局变量

lambda函数
lambda函数返回函数名作为结果
-lambda函数是一种匿名函数,即没有名字的函数
-使用lambda保留字定义,函数名是返回结果
-lambda函数用于定义简单的、能够在一行内表示的函数
-lambda函数是一种运算的紧凑形式

<函数名>=lambda <参数>:<表达式>

例:

f=lambda x,y:x+y
f(10,20)

结果为25
上面表达为,f为函数名,lambda给f函数增加了2个参数x和y,f函数的作用是计算x与y相加之和

lambda也可以没有参数的函数
例:

f=lambda:"123"
print(F())

结果为字符串:‘123’
上面表达为函数f的作用是生成了一个函数f,只要调用它,就会产生一个字符串的结果

一般编写代码时,建议使用def
谨慎使用lamda函数
-lambda函数主要用作一些特定函数或方法的参数
-lambda函数有一些固定使用的方式,建议逐步掌握
-一般情况,建议使用def定义的普通函数

单元总结:
了解了def定义函数,lamda定义匿名函数
了解了可选参数,可变参数,名称传递,位置传递
保留字return返回结果,
局部变量和全局变量
global声明使用
列表的局部变量和全局变量定义方式

发布了10 篇原创文章 · 获赞 3 · 访问量 102

猜你喜欢

转载自blog.csdn.net/yinghua1234/article/details/105139788
今日推荐