• 初识函数


    1.函数简介

      1)函数是先定义后使用!!!!!!!

      def   funce(arg1,arg2.....):

      """描述信息"""

      函数体

      return value

      我们为什么要用参数呢?在以后的编程过程当中,有大量的代码会重复被使用,使用函数会解决代码重复问题,能统一维护,程序的组织结构清晰,可读性强。

      def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个‘:’,def 是固定的,必须是连续的def三个字母,空格是为了将def关键字和函数名分隔开,函数名只能包含字符串,下划线和数字且不能以数字开头。

      2)定义函数可以分为三类:

      无参函数、有参函数、空函数

    2.reture关键字的作用

      返回值有三种情况:没有返回值,返回值,返回多个值。

      不写return:函数默认返回None.

    def func():
         print('hahaha')
     res = func()
     print(res)
    

      只写return:return除了返回值之外,还可以直接结束整个函数的运行,返回值也是None

    def func():
         l = ['jason','egon','tank']
         while True:
             for i in l:
                 if i == 'egon':  # 当i为egon的时候 直接结束函数运行
                     # break
                     return
                     # print('asdasdkljlsjadl')  # 这一行代码拥有都不会运行
                 print(i)
     res = func()
     print(res)
    

      写return none 跟上面的情况是一样的

      写return返回一个值:这个值可以是python任意数据类型, 些什么就返回什么

    def func():
         return '123'
     def func1():
         return [1,2,3]
     def func2():
         return {'name':'jason'}
     def func3():
         return (1,)
     def func4():
         return {1,2,3,4,5}
     def func5():
         return True
     print(func(),func1(),func2(),func3(),func4(),func5())
    

        写return返回值:return会自动将多个值以元组(函数不希望自己处理的结果被修改)的形式返回给调用者 

    def func():
        return 1,2,3,4      # 返回的是(1,2,3,4)
    res = func()
    print(res)
    
    
    
    def func1():
        return 'a','b','c'     #返回值为('a','b','c')
    res = func1()
    print(res)
    
    
    
    def func2():
        return [1,2,3],[1,2,3],[1,2,3]        #返回值为([1,2,3],[1,2,3],[1,2,3])
    res = func2()
    print(res)
    
    
    
    字典也是同上面输出一样
    

      返回多个值,并且不想让return帮你做处理,可以自己动手加上想要的类型

    def func4():
        return [[1,2,3],[1,2,3],[1,2,3]]#返回值为[[1, 2, 3], [1, 2, 3], [1, 2,3]]
    res = func4()
    print(res)
    

      所有的函数都有返回值,无论写不写return ,python中所有的函数都有返回值,不写的情况下默认返回none。光写return和return none 并不是为了考虑返回值,而是为了结束函数的运行。

    3.函数参数两大类型

      形参:在函数的定义阶段,括号内写的是变量名,是该函数的形式参数。

      实参:在函数的调用阶段,括号内实际传入的值,叫做实际参数

      形参就相当于变量名,而实参就相当于变量的值,函数调用传参的过程就是给形参变量名赋值的过程,形参和实参的绑定关系只在函数的调用阶段有效,函数运行结束关系自动解除,只在函数内部有效,函数外部无任何影响。

    4.位置参数

      在函数定义阶段按照位置从左往右依次书写的变量名,叫做函数位置形参,位置参数在调用的时候,必须为其传值。

    def my_max(x,y):
        print(x,y)
        if x > y:
            return x
        else:
            return y
    res = my_max(1)  # 在调用函数的时候 少一个实参不行
    res = my_max(1,2,3)  # 在调用函数的时候 多一个实参也不行
    res = my_max(20,10)
    

      位置实参:在函数的调用阶段,传入的参数会按照位置一一对应给形参

      第一种直接按照位置传,一一对应。

      第二种指名道姓的传,关键字传字。

    my_max(y=20,x=10)
    my_max(10,y=20)  # 位置和关键字混合使用
    my_max(20,y=40)
    

      在函数的调用阶段,位置参数和关键字参数可以混合使用,但是必须注意的是位置参数必须在关键字参数的前面(越短的越靠前,越长的越靠后),同一个形参不能被多次使用。

    5.默认值参数

      在函数的定义阶段,形参(变量名),就已经被赋值了,在调用的时候可以不为默认值形参传值,默认使用定义阶段就已经绑定的值,在调用的时候如果可以给默认值形参传值,传了那么就使用你传的值,在定义阶段,默认值形参必须放在位置形参的后面。

      函数无论在什么地方被调用,都会跑到函数定义阶段去执行代码,形参中用到的值都是往函数定义阶段代码网上找。

    6.可变长参数

      站在调用函数传递实参的角度,实参的个数不固定的情况,也就意味着形参也不固定,站在形参的角度,可以用*和**来接收多余的位置参数和关键字参数。

      站在形参的角度看*

      形参中的*会将多余位置实参统一用元组的形式处理,传递给*后面的形参名

    def func(x,y,*z):
         print(x,y,z)  # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)
    func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)
    

      站在实参角度看*

    def func(x,y,z):
         print(x,y,z)
     func(a,b,c)
     func(*[1,2,3,4,5,6])  # *会将列表打散成位置实参一一传入等价于func(1,2,3,4,5,6)
    

      站在形参的角度看**

    def func(x,y,**z):
        print(x,y,z)  # z = {'z': 1, 'a': 1, 'b': 2, 'c': 3}
    func(x=1,y=2,z=1,a=1,b=2,c=3)
    

      **会接收所有多余的关键字参数,并将关键字参数转换变成字典的形式,字典的key就是关键字的名字。字典的value就是关键字的名字指向的值,将字典交给**后面的变量名

      站在实参的角度看**

    def func(x,y,z):
        print(x,y,z)
    func(12,3,4)
    func(x=1,y=2,z=3)
    d = {'x':1,'y':1,'z',333}
    func(**d) # 等价于func(1,1,333)

     ***会将字典拆成key = value的形式。

    总结*与**

      *在形参中能够接受多余的位置参数,组织成一个元组赋值给*后面的变量名 

      **在形参中能够接受多余的关键字参数,组织成一个字典赋值给**后面的变量名

      *在实参中*能够将列表,元祖,集合,字符串打散成位置参数的形式传递给函数(看成for循环取值)

      **在实参中,能将字典打散成key = value 的形式,按照关键字参数传递给函数

      

      

    生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
  • 相关阅读:
    QT visual stuido 集成插件不能打开ui文件的原因
    KLSudoku 1.2 数独游戏软件发布
    QT for linux 的错误 undefined reference to 'FcFreeTypeQueryFace' 的解决方法
    tp3.2源码解析——入口文件
    关于php调用.net的web service 踩过的坑
    CentOS7 LNMP+phpmyadmin环境搭建(二、LNMP环境搭建)
    CentOS7 LNMP+phpmyadmin环境搭建(一、虚拟机及centos7安装)
    php无限分类
    php的文件引用
    CentOS7 LNMP+phpmyadmin环境搭建(三、安装phpmyadmin)
  • 原文地址:https://www.cnblogs.com/panshao51km-cn/p/11159647.html
Copyright © 2020-2023  润新知