python学习之路9——初识函数

函数是带名字的代码块。

要执行函数定义的特定任务,可调用该函数。

需要在程序中多次执行同一任务时,你无需反复编写完成该任务的代码,而只需要调用执行该任务的函数,让Python运行其中的代码。

你将发现,通过使用函数,程序的编写、阅读、测试和修复都将更容易。

 

1、定义函数

def 定义的函数名称(参数):

  函数内容

  (return

由def引出函数名称,括号里加入相应的参数,以冒号结束定义。

函数内容通过缩进进行表达。

2、函数的返回值

函数返回值有如下三种情况:

①没有返回值:

#1)不写return
def func():
    print('123')

#2)只写return:后面没有东西,结束一个函数。其返回值为‘None’
def func1():
    return        #返回值为None
View Code

②返回一个值:

#1)可以返回任何数据类型
def func():
    return'123'


def func1():
    return[123]


def func2():
    return(1,2,3)


def func3():
    return{'k1':1,'k2':2,'k3':3}


#2)只要返回,就可以收到
def func4():
    return'你好'    #返回值:   你好

#3)有多个return,返回第一个return的值d
def func5():
    return 1
    return'不是1'    返回值:    1
View Code

③返回多个值

#1)多个返回值用多个变量接收,有多少返回值就用多少变量接收;
def func():
    return 1,2,3    
a,b,c = func()
print(a,b,c)    #返回值:   1 2 3 


#2)多个返回值用一个变量接收,接收值为一个元组
def func1():
    return 1,2,3    
a= func()
print(a)    #返回值:   (1, 2, 3) 
View Code

3.多个参数传递情况

 

站在实参的角度上:
按照位置传参
按照关键字传参
混着用可以:但是 必须先按照位置传参,再按照关键字传参数
不能给同一个变量传多个值

 

站在形参的角度上
位置参数:必须传,且有几个参数就传几个值
默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的

 

只有调用函数的时候
按照位置传 : 直接写参数的值
按照关键字: 关键字 = 值

定义函数的时候:
位置参数 : 直接定义参数
默认参数,关键字参数 :参数名 = '默认的值'
动态参数 : 可以接受任意多个参数
参数名之前加*,习惯参数名args,
参数名之前加**,习惯参数名kwargs
顺序:位置参数,*args,默认参数,**kwargs

 

 

动态参数的另一种传参方式:

 

1 def func(*args):        #形参角度上:给变量加上*,就是组合所有传来的值
2     print(args)        #将值分别打印出来
3 l = [1,2,3,4,5]
4 func(*l)        #返回值为(1,2,3,4,5)
5 
6 
7 #站在实参的角度上,给一个序列加上*,就是将这个序列按序打散开,传给形参   
*args

 

1 def func(**kwargs):        形参角度上:给变量加上**,就是组合所有传来的值
2     print(kwargs)        
3 d = {'a':1,'b':2}
4 func(**d)        #返回值:{'a':1,'b':2}
5 
6 
7 #实参出啊如的是打散的字典,通过函数调用,最终返回原字典
**kwargs

 


 

 

默认参数的陷阱:

def qqxing(l=[]):        #定义函数里有一个默认参数l
    l.append('你好')
    print(l)        

qqxing()        #返回值: ['你好']

qqxing()        #返回值:['你好', '你好']

#默认参数随着函数的不断调用,会保存先前的数据,从而偏离需求

解决方案:
def qqxing(l=None):
    if not l:
        l = []
    else:
        l = l
    l.append('你好')
    print(l)

qqxing()
qqxing(l = [1,2,3,4,5])
qqxing()

 

posted @ 2018-12-10 22:14  Lewis姜  阅读(120)  评论(0编辑  收藏  举报