• 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)

        

  • 相关阅读:
    常见网络设备工作原理
    Linux逻辑卷的创建
    关于华为模拟器eNSP-防火墙USG6000V怎么重装镜像
    一人之下(名言吧)
    Struts2学习笔记——Struts2搭建和第一个小程序
    eclipse部署Tomcat9
    通过反射访问类的私有方法(无参)
    Java学习笔记之——IO
    Java学习笔记之——线程的生命周期、线程同步
    Java学习笔记之——多线程
  • 原文地址:https://www.cnblogs.com/bsxq/p/7448952.html
Copyright © 2020-2023  润新知