• python之路 初始函数


    python之初识函数:

    (一)为什么要使用函数:

       首先举一个例子,假如我们现在要计算"hello world"这个字符串的长度,我们可以怎么计算1,直接print(len(hello world)) 就可以计算长度,那么现在

        用len()这个函数了,我们还可以怎么计算呢,看下面代码

       

    #利用for 循环计算字符串长度
      
     s = "hello world"
    length = 0
    for i in s:
        length += 1
    print(length)

    这样我们也可以计算出“hello world” 的长度,但是我们如果要计算多个字符串的长度呢,难道要写很多个这样的for循环吗?能不有一个有一个工具可以帮我们解决这个问题,拿出来就可以直接用,那么这个工具就叫做函数,可以很好的解决我们重复代码----->代码冗余的问题。

    (二)函数的定义与调用

    还是上面那个例子,我们怎样来实现呢

    def mylen():
        s = "hello world"
        length = 0
        for i in s:
            length += 1
        print(length)

    这样子就定义好了一个函数,和之间的代码好像没有什么区别,除了加了一个def 和缩进,执行上面代码,什么结果也没有。上面那个过程就相当于我们只是把工具做好了,但是我们要用是不是还得取出来,再来一段代码

    #函数的定义
    def mylen():
        '''
        计算长度的函数
        
        '''
        s = "hello world"
        length = 0
        for i in s:
            length += 1
        print(length)
    
    #函数的引用
    mylen()

    总结:
          1,函数是以def关键字开头,空格之后接函数名和小括号():   函数名和定义变量差不多,必须是字母,下划线或数字组成,不能以数字开头。此外函数名还要有一定的意义,可以简单说明函数的功能。括号()和冒号:是必须加上的,2,注释:  每一个函数都应该对函数的功能和参数进行相应的说明,以增加函数的可读性,写在函数下面第一行,用三引号引起来。3,函数的调用,函数名加()就可以了。

    (三)函数的返回值

    要计算函数的返回值我们得用一个变量来接受str_len=len("hello world"),那么函数中是怎么实现的呢

    def mylen():
        '''
        计算长度的函数
        :return:
        '''
        s = "hello world"
        length = 0
        for i in s:
            length += 1
        print(length)
        
    str_len = mylen()
    print(str—len) 

    但是执行上述代码,发现返回为None,说明函数没有给你返回值。那么如何得到返回值呢。只需要加上return

    def mylen():
        '''
        计算长度的函数
        :return:
        '''
        s = "hello world"
        length = 0
        for i in s:
            length += 1
        return length
        
    str_len = mylen()
    print(str—len) 

    return 关键字的作用  1,返回函数的值  2,结束函数

    返回值分两种情况:1,没有返回值

                                    2,有返回值       当返回值为一个值得时候,用一个变量接收

                                                               当返回值为多个变量的时候,可以用一个变量接收(返回以元祖形式呈现),有几个值就用几个变量接收。

    (四)函数的参数

    函数的参数分为实参和形参,形参是在函数定义的时候接收的,形参是在函数调用时传入的。形参分为位置参数,*args,默认参数,**kwargs四种参数,形参分为按照位置传参,按照关键字传参,动态传参(直接传元祖或字典) 

    def mylen(s):#s形参
        '''
        计算长度的函数
        参数s:要计算的字符串长度        #注释,说明函数和参数功能说明
        return:要计算的字符串
        :param s:
        :return:
        '''
        length = 0
        for i in s:
            length +=1
        return (length)
    ret = mylen("hello world")#hello world为实参
    ret2 = mylen("12345")
    ret3 = mylen("egon is somebody")
    ret4 = mylen("hahahhahhahahha")
    print(ret)
    print(ret2)
    print(ret3)
    print(ret4)

    位置参数
             站在实参角度

    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)
    
    位置、关键字混用传参

    4,动态传参

    def fun(**kwargs):
        print(kwargs)
    d = {"a": 10,"b":20}
    fun(**d)#返回为{'a': 10, 'b': 20}
    
    
    
    #动态传参

    站在形参角度
            位置参数必须传值

    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 stu_info(name,sex = "male"):
        """打印学生信息函数,由于班中大部分学生都是男生,
            所以设置默认参数sex的默认值为'male'
        """
        print(name,sex)
    
    
    stu_info('alex')
    stu_info('eva','female')
    
    默认参数

    动态参数:

    *args接收按位置传参多余的参数,将他们组合成元祖输出**kwargs接收多个关键字传参,并将他们组成字典输出

    def fun(a,*args,x = 10,**kwargs):
        print(a,args,x,kwargs)
    fun(1,2,3,4,5,6,x= 20,y =30,z = 50)
    #返回值为1 (2, 3, 4, 5, 6) 20 {'y': 30, 'z': 50}
    1对应a,(2,3,4,5,6,)对应args,20对应x, {'y': 30, 'z': 50}对应kwargs

    小结:函数主要解决面向编程过程中的代码冗余,以及可读性差的问题

    函数定义的规则:

    1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
    2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
        参数可以定义多个,也可以不定义。
        参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
        如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
    3.注释:函数的第一行语句应该添加注释。
    4.函数体:函数内容以冒号起始,并且缩进。
    5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None
    
    def 函数名(参数1,参数2,*args,默认参数,**kwargs):
            """注释:函数功能和参数说明"""
            函数体
            ……
            return 返回值
    View Code

    调用函数的规则:

    1.函数名()
        函数名后面+圆括号就是函数的调用。
    2.参数:
        圆括号用来接收参数。
        若传入多个参数:
            应按先位置传值,再按关键字传值
            具体的传入顺序应按照函数定义的参数情况而定
    3.返回值
        如果函数有返回值,还应该定义“变量”接收返回值
        如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致
    
    无返回值的情况:
    函数名()
    
    有返回值的情况:
    变量 = 函数名()
    
    多个变量接收多返回值:
    变量1,变量2,... = 函数名()
    View Code

                

     
  • 相关阅读:
    在QT函数中返回一个数组/把一个数组传参给函数
    QT储存内容到指定的文件内
    QT对linux下/sys/class/gpio中的gpio的控制
    QT 线程的暂停和继续
    QT的close和系统的close冲突
    画动态曲线另一种方式方式
    QT关于iCCP警告去除
    ps两张图片合在一起
    ps 做动态图
    解决MFC中因控件类多次Attch造成的销毁窗口过程中CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); ASSERT(pWnd != NULL); 断言失败的问题
  • 原文地址:https://www.cnblogs.com/shengzhongqiu/p/7236088.html
Copyright © 2020-2023  润新知