python中的函数

函数,可读性强,复用性强,定义之后可以在任意地方调用,他执行某种行为,并且返回一个值

 

#函数实现斐波那契数列
enternum = int(input('输入想生成的数量\n'))
def test(num):#定义函数,并且带形参'num'
    result = [0,1] #定义初始的列表
    for i in range(num-2):#初始列表有2个值所以需要去掉,循环的次数就是想要生成的个数
        result.append(result[-2]+result[-1])#把列表中前两个数的值之和追加到后面
    return result#返回列表

c = test(enternum)#定义C接受函数的返回值
print(c)#打印出函数的返回值

输出:
输入想生成的数量
10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
#===============================================================================
#函数的返回值
def test1():
    print('test1')

def test2():
    return 1,2,3


print(test1())#如果函数没有写返回值那就是none
print(test2())#有多个返回值的话返回的是一个元祖

a,b,c= test2()#利用拆包方法
print(a,b,c)

 

局部变量与全局变量

当函数定义变量的时候,函数内所声明的变量只在其函数内有效,与函数外具有相同名称的其他变量没有任何关系

如果局部变量与全局变量名字一眼,首先函数内的生效

#局部变量
a = 1
def func(a):
    print('我是全局的',a)
    a = 2
    print('我是函数内的',a)
func(a)
print('我是全局的,函数内的对我不生效',a)

输出
我是全局的 1
我是函数内的 2
我是全局的,函数内的对我不生效 1

global 语句

如果想把一个变量声名为全局的,则可以使用global语句

(不可变类型)str,int,float,tuple,bool需要用global声明

(可变类型)list,dict,set不需要用global声明

#全局变量
a = 1
def func():
    global a
    print('我是全局的',a)
    a =2
    print('在函数内我变成了',a)
func()
print('出了函数我变成了',a)

输出:
我是全局的 1
在函数内我变成了 2
出了函数我变成了 2

默认参数

对于一些参数,我们希望它的一些参数是可选的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值

#默认参数
def func(a,b=1):#b是可选参数
    print(a*b)
c1 = func(3)
c2 = func(4,2)

输出:
3
8

函数之间的调用

#函数与函数的调用
money = 500
def test(consume):#入参为500的时候 该函数返回是0,即test(money)
    return money - consume

def test1(money):#调用了test(consume)函数,返回值是0+500
    return test(money) + money

money1 = test1(money)#调用test1函数,所以返回了500
print(money1)

输出:
500

 不定长参数:

#不定长参数
#1。加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
#2。加了两个星号 ** 的参数会以字典的形式导入
#可选参数(参数组) 非必传,不限制参数个数,把参数放到一个list里,用*表示
def test1(*number):
    print(number)
test1()
test1(4)
test1(1,2,3)

#关键字参数衍生,非比传,不限制参数个数,把参数放到一个字典里
#传参的时候必须是用关键字的方式(key=value)
def test2(**kwargs):
    print(kwargs)
test2(mm='nihao',hh='buhao',mh='很好')




输出:
()
(4,)
(1, 2, 3)
{'mm': 'nihao', 'hh': 'buhao', 'mh': '很好'}

 参数拆包入参 适用于不定长参数

def test1(name,age,sex):
    print(name,age,sex)
l=['mm',18,'male']
def test2(name,age,sex):
    print(name,age,sex)
d={'name':'mm','age':18,'sex':'male'}
test1(*l)#拆成了'mm',18,'sex'
test2(**d)#拆成了name=mm,age=18,sex=male

 

lambda 来创建匿名函数,所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。

lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去

a=lambda x:x+1#  ':'前面是入参,后面是函数体
print(a(1))#结果是2

def test(n):
    return lambda a:a*n
t=test(3)#函数入参
print(t(2))#匿名函数入参,结果是6

 

 

关键参数

如果某个函数有许多参数,而我们只想指定其中的一部分,那么可以使用名字(关键字)而不是位置来给函数指定实参。----这被称作 关键字参数

                            

def func(a,b=5,c=10):
    print ('a is',a, 'and b is',b,'and c is',c)

func(3,7)
func(24,c=32)
func(c=23,a=14)

输出:
a is 3 and b is 7 and c is 10
a is 24 and b is 5 and c is 32
a is 14 and b is 5 and c is 23                                           
posted @ 2019-09-26 12:10  小马哥007  阅读(179)  评论(0编辑  收藏  举报