python之路——认识函数

        函数

初识函数的定义与调用:

#函数的定义
def func():
    """计算S1的长度"""
    s1="hello world"
    count=0
    for i in s1:
        count += 1
    print(count)
#函数的调用
func()

总结:

定义:def关键词开头,空格之后接函数名称和圆括号(),最后还有个:号。

           def是固定的,不能变,必须是连续的,不能分开。空格是为了将def关键字和函数分开,必须空

           函数名:函数名只能包含字符串、下划线和数字且不能以数字开头

           括号必须最后加上,以上就是函数开头的书写格式。

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

调用:就是 函数名() 要记得加上括号。

函数的返回值:

#函数定义
def func():
    """计算s1的长度"""
    s1 = "hello world"
    count = 0
    for i in s1:
        count =count+1
    return count

#函数调用
str_len=func()
print('str_len : %s'%str_len)

return关键字的的作用:

 return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

  这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

要研究返回值,我们还要知道返回值有几种情况:分别是(没有返回值返回一个值返回多个值)

没有返回值:

  不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况

#函数定义
def func():
    """计算s1的长度"""
    s1 = "hello world"
    count = 0
    for i in s1:
        count +=1
    print(count)

#函数调用
str_len = func()
#因为没有返回值,此时的str_len为None
print('str_len : %s'%str_len)

只写return,后面不写其他内容,也会返回None,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数

返回一个值:

      刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。

 

#函数定义
def func():
    """计算s1的长度"""
    s1 = "hello world"
    count = 0
    for i in s1:
        count +=1
    return count

#函数调用
str_len = func()
print('str_len : %s'%str_len

       注意:return和返回值之间要有空格,可以返回任意数据类型的值

 

返回多个值:

  可以返回任意多个、任意数据类型的值

def ret_demo1():
    '''返回多个值''' 
    return 1,2,3,4


def ret_demo2():
    '''返回多个任意类型的值'''
    return 1,['a','b'],3,4

ret1 = ret_demo1()
print(ret1)
ret2 = ret_demo2()
print(ret2)

返回的多个值会被组织成元组被返回,也可以用多个值来接收

def ret_demo2():
    return 1,['a','b'],3,4

#返回多个值,用一个变量接收
ret2 = ret_demo2()
print(ret2)

#返回多个值,用多个变量接收
a,b,c,d = ret_demo2()
print(a,b,c,d)

#用多个值接收返回值:返回几个值,就用几个变量接收
a,b,c,d = ret_demo2()
print(a,b,c,d)

 

函数的参数

 

详细参数:

1 def func(a,b):     #站在函数定义的角度上:位置参数:必须传
2 print(a,b)
3                            #站在调用函数的角度上
4 func(1,2)             #按位置传参
5 func(b=1,a=2)    #按照关键字传参
6 func(1,b=2)        #混用:必须先按照位置传参,再按照关键字传参

实参与形参

参数还有分别:

我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。 

传递多个参数

参数可以传递多个,多个参数之间用逗号分割。

def mymax(x,y):
    the_max = x if x > y else y
    return the_max

ma = mymax(10,20)
print(ma)

位置参数:

  站在实参角度

    1.按照位置传值

def mymax(x,y):
    #此时x=10,y=20
    the_max = x if x > y else y
    return the_max

ma = mymax(10,20)
print(ma)
按照位置传参

              2.按照关键字传值

def mymax(x,y):
    #此时x = 20,y = 10
    print(x,y)
    the_max = x if x > y else y
    return the_max

ma = mymax(y = 10,x = 20)
print(ma)
按照关键字传参

              3.位置、关键字形式混着用

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

ma = mymax(10,y = 20)
print(ma)
位置、关键字混着用

       站在形参角度

                 位置参数必须传值

def mymax(x,y):
    #此时x = 10,y = 20
    print(x,y)
    the_max = x if x > y else y
    return the_max

#调用mymax不传递参数
ma = mymax()
print(ma)

#结果
TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
位置参数必须传值

 

默认参数:

站在定义函数的角度上——默认参数

def welcome(name,sex='male'):    #sex 默认参数
    print('welcome:%s,sex:%s' %(name,sex))

welcome('黄小贵’)
welcome('曹海娇’,'female'

默认参数
是可以不传参数
如果不传默认是设置的默认值,如果传就用传入的值
默认的值是在定义阶段就确定了
默认参数的陷阱:针对可变的数据类型 如:
def demo3(a=[]):
    a.append(1)
    print(a)
demo3()
demo3([])
demo3()
View Code

动态参数:

按位置传值多余的参数都由args统一接收,保存成一个元组的形式

1 def func(*args):
2     count=0
3     for i in args:
4         count +=i
5     return count
6 print(func(1,2,3,4,5,6))

动态参数

站在函数定义的角度上:*做聚合用,将一个一个的参数组合成一个元组

站在函数调用的角度上:*做打散用,将一个列表或者元组打散成多个参数

*只针对按位置传参

 

**动态参数,接受按关键字传递过来的参数,组织成一个字典 如:

1 def demo4(**kwargs):
2     print(kwargs)
3 
4 d={'a':1,'b':2,'c':3}
5 demo4(**d)

站在传参的角度:按位置,按关键字

1 def demo5(*args,**kwargs):
2     print(args)
3     print(kwargs)
4 
5 demo5(1,2,3,a=12,b=4)  #必须按照

站在函数定义的角度:所有的参数都是形式参数

默认参数

位置参数

动态参数:*args **kwargs 

 

站在函数调用的角度上:所有的参数都是实际参数

按照位置传

按照关键字传

混用:按照位置传必须在关键字传参之前   如:

1 def func(位置参数1,位置参数2,*args,默认参数=10,**kwargs):
2     print(位置参数1,位置参数2)
3     print(默认参数)
4     print(args)
5     print(kwargs)
6 func(1,2,3,4,5,默认参数='hahaha',a=10,b=20)

下节预习:

函数的镶嵌调用

1 def func():
2     print(123)
3 def func2():
4     func()
5     print(345)
6 func2()
1 def func(x,y,z):
2     print(x,y,z)
3     def func2(a,b,c):
4         print('func2',a,b,c)
5     func2(x,y,z)
6 func(4,5,6)

 

 

 

    

 

posted @ 2017-08-29 16:30  陌文欲  阅读(178)  评论(0编辑  收藏  举报