• 09_Python定义方法_Python编程之路


    有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解

    def 定义一个方法

    在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python中内置排序的方法),在编程中,我们肯定是会多次用到这个功能的,如果我们每次都在要用这个功能时,都去写一遍,那实在是太影响编程效率了,这时我们就可以通过def去定义一个排序的方法,那么我们就可以在要使用的时候直接调用即可,而不需要去重写代码

    事实上,我们之前也接触过很多内置方法,比如len()获取一个列表的元素个数,或者是split()对字符串或列表进行切片,当然还有针对列表的排序方法sort()

    In [9]: My_list = [45, 345, 56, 233 ,456 ,23423, 56 ,234, 3452,212]
    
    In [10]: My_list.sort()
    
    In [11]: My_list
    Out[11]: [45, 56, 56, 212, 233, 234, 345, 456, 3452, 23423]
    
    In [12]: len(My_list )
    Out[12]: 10
    

      

    定义一个方法的语法结构

    def后面接你定义的方法的名称,名称后面要加一对括号,括号里你可以写你需要操作的元素,也就是形参,如果你的方法只是输出或是不需要操作数值元素的,你也可以不加参数,然后这一行接一个冒号,下面你就可以来定义你的方法

    在调用的时候直接方法名称后面加上括号就行,括号里放实参,注意不管有没有参数,调用时都要加括号,和定义方法一样

    例如不加参数:

    In [13]: def hello():
        ...:     print("hello susmote")
        ...:
    
    In [14]: hello()
    hello susmote
    

      

    传递参数

    In [15]: def add(a, b):
        ...:     res = a + b
        ...:     print(res)
        ...:
    
    In [16]: add(25, 53)
    78
    

      

    下面的方法你可以写一个return 语句,return 后面接一个你需要返回的值,和前面说的一样,如果不需要返回值,你也可以不写return语句

    注意,在定义一个方法时,return 语句代表着结束,后面的语句不会再执行,所以一般在方法定义的最后一行写return语句

    如果你这个函数有返回值,那么你就可以直接把函数的执行结果直接赋值给一个变量(或者是直接打印)

    In [19]: def add(a, b):
        ...:     return a+b
        ...:
    
    In [20]: res = add(10, 19)
    
    In [21]: print(res)
    29
    

      

    In [22]: def add(a, b):
        ...:     return a+b
        ...:
    
    In [23]: print(add(10, 19))
    29
    

      

    下面我们通过写一个求斐波那契数列的方法来增强对定义方法的理解

    斐波那契数列:这个数列从第3项开始,每一项都等于前两项之和。想详细了解的话,可自行上网搜索

    In [24]: def fib(n):
        ...:     a, b = 0, 1
        ...:     while a < n:
        ...:         print(a, end=" ")
        ...:         a,b = b,a+b
        ...:     print()
        ...:
    
    In [25]: fib(10)
    0 1 1 2 3 5 8
    

      

    我简单的讲解以上代码:

    首先定义了一个fib()方法,传了一个形式参数n,这个n是作为一个限制,实际意义是求所有的不大于n的斐波那契数列中的值

    然后在下面是一个赋值语句,这种语法在Python中应该是独有的,前面的变量分别对应后面的值,一一对应,把0赋给了a, 1赋给了b

    然后就是一个while语句,也就是我前面说的传进来的参数 n 的作用,只要是值不大于n就继续循环,知道最后大于n跳出循环

    第四行语句,输出这个数列中的值,在这里我们要注意,print方法后面是可以加很多参数的,这个我们后续会仔细讲,end=“ ”,意思就是,每次都以一个空格结尾,等价于,print(a , " ")

    然后下面又是一个赋值语句

    注意它们是按照顺序来执行赋值语句的,先把b的值赋给了a,再把a+b的值赋给了b

    最后是一个print(),是用来换行的,这个不多说了

    然后在这里我们要明白定义的方法是一个对象,并不能直接通过print输出

    In [26]: def fib(n):
        ...:     a, b = 0, 1
        ...:     while a < n:
        ...:         print(a, end=" ")
        ...:         a,b = b,a+b
        ...:     print()
        ...:
    
    In [27]: fib
    Out[27]: <function __main__.fib>
    

      我们还可以吧这个方法赋给一个变量

    In [30]: f = fib
    
    In [31]: f(10)
    0 1 1 2 3 5 8
    

      

    前面我们讲了return语句应该在什么情况下写上,当时我只是很浅显的介绍了,其实不管你加不加都是会返回值的

    In [33]: def add(a, b):
        ...:     print(a + b)
        ...:
    
    In [34]: ret = add(10, 19)
    29
    
    In [35]: print(ret)
    None
    

      

    如果你没有加return的话,那么会默认返回一个None

    return不仅能够返回简单的数值字符类型,还能返回列表、字典等高级数据类型

    例如把斐波那契数列中的值都存到一个列表中,然后通过return返回

    In [40]: def fib_list(n):
        ...:     result = []
        ...:     a,b = 0,1
        ...:     while a < n:
        ...:         result.append(a)
        ...:         a, b = b, a+b
        ...:     return result
        ...:
    
    In [41]: my_fib_list = fib_list(100)
    
    In [42]: my_fib_list
    Out[42]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    

      

    上面的代码相信应该不需要多讲了吧,append在前面讲列表的时候讲到过,对一个列表增加数据

  • 相关阅读:
    vue-router路由
    前端路由与后端路由
    getsupportfragmentmanager 没有这个方法
    Glide使用
    Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
    电脑卡,eclipse Android stadio 卡,什么都卡解决方法
    Service IntentService区别 (面试)
    枚举
    Android stadio litepal
    Android 单元测试
  • 原文地址:https://www.cnblogs.com/susmote/p/8746281.html
Copyright © 2020-2023  润新知