• Python学习笔记三之函数


    一. 为什么要使用函数?

          函数可以方便阅读代码。

          函数可以减少重复代码。

          函数可以减少管理操作,减少修改操作。

    二. 函数分类:

          内置函数:len()   sum()   max()   min()

          自定义函数:用户自己设定的函数

    三. 函数定义语法:

          def 函数名称(参数1,参数2,参数3) :   也可以不加参数

                 '''注释说明'''

                    函数体     也就是要执行的代码

                    return  返回值

           例子:

    def name():
         x=1
         print (x)
    name()
    

      结果:

             

     四.  函数的使用规则:

            先定义,后调用。

            如果不定义,就调用,会有报错。相当于调用一个不存在的变量。

            例子:

            

    五.   函数在定义阶段只检查语法,而不执行代码,所以不会报逻辑错误。只会报语法错误。

    六.   定义函数的三种方式:

            无参数(如果函数无参数,那么调用函数的时候,也不用加参数)

            例子:

    def foo():
        print('from foo')
        bar()
        
    def bar():
        print('from bar')
    

        有参数(如果有参数,那么调用函数的时候必须要加参数,当函数体代码需要传入的值)

    def auth(username,password):
    

        空函数用来设计代码结构:

      def a():
    
        pass
       使用了pass关键字

    七.    如何调用函数?

             在函数的后面加() ,表示调用函数。

             先找到函数名,然后根据函数名执行里面的代码。

    八.    函数返回值

            无返回值 无return   返回None

            例子:

    def name():
        print ('I love you !')
    print(name())
    

      

             可以看到返回的值为none.

            返回一个值

             

             因为我要求return 520,所以打印调用函数的返回值为520

            返回多个值

            

             可以看到返回的值放到了一个元组中。

             注意:函数体中遇到return,函数执行代码就结束,并把return后面的值返回。函数体内可以有多个return,但是只执行一次。

                        return后面的值,可以是任意类型。返回是该值本身的数据类型。

                        return后面的值,如果是多个,用逗号分割开,并拼接成一个元组。

                        什么时候该有返回值?

                 调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值。

                           通常有参函数需要有返回值。

           什么时候不需要有返回值?

                           调用函数,仅仅只是执行函数体代码,最后不需要得到什么结果,则无需返回值。

                           通常无参函数不需要返回值。

    九.    调用函数的三种方式

             常用的就是:函数名()

             把函数的返回值赋值给一个变量

             把函数的返回值放到一个数学表达式中。

             例子:

              

    十.    函数的参数

             形参与实参

             形参:定义函数的时候,出现在函数括号里面的参数就是形参,形参就是变量名

             实参:调用函数的时候,出现在函数括号里面的参数就是实参,实参就是变量值

             在调用阶段,实参才会绑定到形参,调用结束,绑定结束。

            

            参数的类型:

             位置参数:

             位置形参:必选参数,多一个不行少一个不行,写几个形参,就必须有几个实参

             位置实参:从左往右,一个一个传值给形参

             

              位置实参换一下位置,就是下面的结果:

              

             name=30,age='yangjianbo'

              所以,位置参数就是从左到右传值,如果实参的位置颠倒,它依然还是从左到右传值。所以就需要下面的关键字参数,来配合位置参数使用。

             关键字参数:指名形参的名称,采用key=value的方式。

              

               

                 那么位置实参跟关键字实参能不能混合使用呢?

                 第一种情况:

                 

                 可以混合使用,第一个参数使用位置实参,后面两个使用关键字实参。

                 第二种情况:

                 

                 第一个参数是关键字实参,第二个是位置实参,第三个是关键字实参,结果报错了,错误显示:位置参数在关键字参数的后面了。

                 也就是说:位置参数必须在关键字参数的前面,才有效果。

                第三种情况:

                 

                   我给name这个变量赋值两次,结果报错,错误显示:name变量得到了多个值,所以当位置实参和关键字实参混合使用的时候,要注意不能传多个值给一个变量。

         

             默认参数:在定义阶段,已经为形参赋值。

             

             报错了:非默认参数不能放在默认参数后面,意思就是说:如果定义阶段,默认参数一定要放在最后面,位置形参一定在默认参数的前面。

                            默认参数的值不可变类型。

              

             使用默认参数:实参可以不用输入。

              可变长参数:

              *args

             

    def a(x,y,z,*args):
    print(x,y,z,args)
    a(1,2,3,4,5)
    输出的结果:

    D:\Python36\python.exe F:/python/第一课/while-lianxi.py
    1 2 3 (4, 5)

          

    args的结果为元组。

              **kwargs

              

    def a(x,y,z,**kwargs):
    print(x,y,z,kwargs)
    a(x=1,z=3,y=88,a='aaaa',c=2)
    结果:

    D:\Python36\python.exe F:/python/第一课/while-lianxi.py
    1 88 3 {'a': 'aaaa', 'c': 2}

    #  **的结果是字典。

    def a(x,y,z,**kwargs):
    print(x,y,z,kwargs)
    a(x=1,z=3,y=88,**{'d':'aaaa','c':2})

    D:\Python36\python.exe F:/python/第一课/while-lianxi.py
    1 88 3 {'d': 'aaaa', 'c': 2}

              命名关键字参数:

               形参中,在*后面的参数就是命名关键字参数。

               那么在传实参的时候,必须按照key=value的方式传值。

    十一.  练习题

    #判断用户输入的对象长度是否大于5

    def duixiang(str):

    if len(str)>5:
    print("长度大于5")
    else:
    print("长度小于5")
    duixiang((1,2,3,4))


    #检查列表的长度,大于2,返回前两个元素的内容给调用者
    x=[1,2,3]
    def a(x):
    if len(x)>2:
    return(x[0:2])
    else:
    print("列表长度小于等于2")
    y=a(x)
    print(y)
    结果:

    D:\Python36\python.exe F:/python/第一课/while-lianxi.py
    [1, 2]

    十二.  函数对象

               函数可以被引用

               函数可以当作一个参数传给另外一个函数

               函数当作一个返回值

               函数可以当作一个容器的元素

    十三.  函数嵌套

              函数的嵌套调用:在调用一个函数的过程中,又调用了一个函数。

              函数的嵌套定义:在定义一个函数的过程中,又定义了一个函数。

    十四.  名称空间与作用域

              名称空间:存放名字与值绑定关系的地方(内存)

              内置名称空间:内置的名字与值的绑定关系

              什么时候生效:python解释器一开始

              什么时候失效:python解释器一关闭

              全局名称空间:文件级别的名字与值的绑定关系

              什么时候生效:执行python文件的时候生效

             什么时候失效:执行完python文件的失效

              局部名称空间:函数内部定义的名字与值的绑定关系

              什么时候生效:调用函数的时候,临时生效

              什么时候失效:函数调用结束

              加载顺序:先内置,再全局,最后局部

              LEGB查找名字顺序:先局部,再全局,最后内置

              例子:

    十五.  作用域:

              全局作用域:内置名称空间名字与全局名称空间的名字       使用函数globals()查看,结果存放在字典中。

                                   print(dir(globals()['__builtins__']))

                                   全局存活,全局有效

              局部作用域:包含局部名称空间的名字       使用函数locals()查看,结果存放在字典中。

               

    def name():
        y=111
        print(locals())
    name()
    结果:

    C:\Users\yangjianbo\AppData\Local\Programs\Python\Python36\python.exe C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py
    {'y': 111}

    def name():
    y=111
    # print(locals())
    print(globals())
    name()
    结果:

    C:\Users\yangjianbo\AppData\Local\Programs\Python\Python36\python.exe C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002240EE2B198>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py', '__cached__': None, 'name': <function name at 0x000002240EAD3E18>}

                                   临时存活,局部有效

               作用域关系,在函数定义时,就已经固定了,与调用位置无关。

             

    十六.  关键字

              global

              在局部作用域修改全局作用域的变量值。

              例子:      

    x=10
    def name():
        x=100
    name()
    print(x)
    #  x=100在局部作用域内有效,虽然执行了函数,但是在全局作用域的x的值,依然是x=10,要想让x=100,必须在函数内部添加一个关键字global
    
    x=10
    def name():
        global x
        x=100
    name()
    print(x)

     作业示例分析:

    https://www.cnblogs.com/JayeHe/p/6846524.html

              

               

             

             

        

            

    一往无前虎山行,拨开云雾见光明
  • 相关阅读:
    Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
    Linux:krb5
    SqlServer数据库端口默认是1433吗?
    Linux下使用shell实现上传linux下某个目录下所有文件到ftp
    Spark+Hadoop+Hive集群上数据操作记录
    hadoop之 Hadoop2.2.0中HDFS的高可用性实现原理
    虚拟路由冗余协议VRRP
    hadoop 之Hadoop生态系统
    Oracle NoLogging Append 方式减少批量insert的redo_size
    Oracle常用的性能诊断语句
  • 原文地址:https://www.cnblogs.com/yangjianbo/p/7545978.html
Copyright © 2020-2023  润新知