python函数(细讲)

 计算n!(n的阶乘)

函数的定义 

def fact(n): #fact是函数名,n是参数
    s=1
    for i in range(1,n+1):
        s*=i
    return s #最后将阶乘的结果s返回来
#这就是一个函数的定义,程序看到这段定义,并不会去执行这段代码,执行是要使用函数的调用方式

函数的调用

调用时要给出实际参数

要用实际参数替换定义中的占位参数

函数调用后会得到实际参数运行之后的运行结果(即返回值)

例如:我们用fact(10)计算10!

之后的结果赋给变量a

并且将a打印出来

def fact(n): 
    s=1
    for i in range(1,n+1):
        s*=i
    return s
a=fact(10) #所谓函数的调用就是用函数的名称给定一个具体的值作为参数,fact(10)这是函数的调用
print(a)

 函数的参数传递

def<函数名>(): #函数可以有参数,也可以没有,但是必须保留括号
    <函数体>
    return<返回值>

可选参数传递 

def<函数名>(<非可选参数>,<可选参数>):
    <函数体>
    return<返回值>
def fact(n,m=1): #n为非可选参数(即必选参数),且必须放在可选参数前,m为可选参数
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m  #n的阶乘整除m
a=fact(10) #调用的时候可以使用第二个参数,也可以不使用,这里给出fact(10),10替换了n,m默认为1
print(a)

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m #n的阶乘整除m
a=fact(10,5) #我们也可以给出第二个参数,m就替换为5,而不是默认开始给的值
print(a)

可变参数传递 

def<函数名>(<参数>,*b): #那些确定要给的参数放在前面,然后最后增加一个*b来表达不确定的参数,用*c、*a表示也可以,这个b是一个自己可以定义的变量名字
    <函数体>
    return<返回值>

这里我们计算n! 乘数的问题

def fact(n,*b):#*b是可变参数
    s=1
    for i in range(1,n+1):
        s*=i #这里计算n的阶乘的值
    for item in b:
        s*=item
    return s
a=fact(10,3)#指的是我们算了10!并且与3相乘
print(a)

def fact(n,*b):#*b是可变参数
    s=1
    for i in range(1,n+1):
        s*=i #这里计算n的阶乘的值
    for item in b:
        s*=item
    return s
a=fact(10,3,5,8)#这里体现出了*b的作用,可以给出很多值,这些值会跟10!运算的结果逐一相乘并返回结果
print(a)

参数传递的两种方式

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m
a=fact(10,5) #位置传递(一般都默认位置传参)
a=fact(m=5,n=10)#名称传递(也可以名称传参)
print(a)

函数的返回值

函数可以返回零个或多个结果

return保留字用来传递返回值

函数可以有返回值也可以没有

可以有return也可以没有

return可以传递零个返回值

也可以传递任意多个返回值

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m,n,m  #传递多个返回值
a=fact(m=5,n=10)#名称传参
print(a)

 用小括号中间逗号分隔的这种形式

是一种组合数据类型叫元组类型

列表类型是指用方括号

中间用逗号分隔的几个元素

还可以使用几个变量

它们之间有逗号来分隔

并且获得返回值

def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m,n,m
a,b,c=fact(m=5,n=10)  #它指的是将函数运算的返回值分别赋给a b c
print(a,b,c)

 局部变量和全局变量

一段程序中间有一个函数定义

其中使用的变量叫做全局变量 

局部变量是函数内部使用的变量

全局变量是函数外部整个程序使用的变量 

 

n,s=10,100 #这里的n和s就是全局变量
def fact(n): #fact()函数中的n是局部变量
    s=1 #函数中的s是局部变量与全局变量s不同
    for i in range(1,n+1):
        s*=i
    return s #此处局部变量的值s是3628800
print(fact(n),s) #这里的n和s是全局变量,此处的全局变量s是100

#!!!局部变量和全局变量是不同变量,局部变量是函数内部的占位符,与全局变量可能重名但不同

#!!!函数运算结束后,局部变量被释放(即这个变量将不再存在,它只是用于函数内部运算的)

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

 global保留字用来在函数内部中声明这个变量

这个变量是全局变量而不是局部变量

n,s=10,100
def fact(n):
    global s #fact()函数中使用global保留字声明此处s是全局变量s
    for i in range(1,n+1):
        s*=i
    return s #此处s指全局变量s
print(fact(n),s) #此处全局变量s被函数修改,运行结果与之前使用局部变量的s是不同的

组合数据类型

 局部变量如果它是组合数据类型

而且未在函数内部创建

它等同于全局变量

ls=["F","f"] #通过使用[]真是创建了一个全局变量列表ls
def func(a):
    ls.append(a) #此处ls是列表类型,未真实创建,则等同于全局变量
    return
func("C") #指的是调用这段函数,全局变量ls被修改,向ls列表中增加一个变量C
print(ls)

 

 如果一个组合数据类型

在函数中它被真实创建了

那么它就是这个函数的局部变量了

所以是局部变量

那么在函数运行之后

这个变量就会被释放或消亡

它就不存在了

ls=["F","f"] #通过使用[]真实创建了一个全局变量列表ls
def func(a):
    ls=[] #此处ls是列表类型,真实创建,ls是局部变量
    ls.append(a)
    return
func("C") #局部变量ls被修改
print(ls) #这里打印的是全局变量

#如果一个组合数据类型,在函数中它被真实创建了,那么它就是这个函数的局部变量了,所以是局部变量,那么在函数运行之后,这个变量就会被释放,它就不存在了。

 lambda函数

lambda函数返回函数名作为结果

lambda函数是一种匿名函数

(没有名字的函数)

使用lambda保留字定义,函数名是返回结果

lambda函数用于定义简单的

能在一行内表示的函数

<函数名>=lambda<参数>:<表达式> #这是一种非常简单的函数的紧凑表达形式,它等价于用def和return,但它的后面只能跟表达式而不能跟函数体
f=lambda x,y:x+y #lambda保留字表示定义lambda函数,x和y表示这个函数有两个参数,我们定义了一个函数f,它有两个参数,运算的内容是x+y
f(10,15)
25

 lambda函数也可以接受那种没有参数的函数

f=lambda:"lambda函数"
print(f())
lambda函数

谨慎使用lambda函数

lambda函数主要用作

一些特定函数或方法的参数

lambda函数有一些固定使用方法

建议逐步掌握

一般情况,建议使用def定义的普通函数

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据的小数据孩儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值