• 老齐python-基础8(函数)


    1、函数基本概念

    2、理解函数

        python中一个函数,就是一种映射关系

    3、定义函数

    #!/usr/bin/env python
    #coding:utf-8
    
    def add_function(a,b):   
        c = a+b
        return c
    
    if __name__ == "__main__":
        result = add_function(2,3)
        print(result)

    def:是函数的开始,在声明要建立一个函数的时候,一定要使用def(define),意思就是告知python解析器,这里要声明一个函数。def所在的哪一行,包括后面的add_function(a,b)被称为函数头。

    add_function:是函数名称。取名是有讲究的,在python中取名字的讲究就是要有一定的意义,能够从名字中看出这个函数是用来干什么的。

    (a,b)是参数列表,要写在括号里面。这是一个变量(参数)列表,其中的变量(参数)指向函数的输入。

    : 非常重要,如果少了,就会报错

    c = a + b ,这一行开始就是函数体,函数体是缩进了4个空格的代码块,完成你需要完成的工作,

    return c ,需要缩进4个空格,return是函数的关键字,意思是要返回一个值。return语句执行时,python跳出当前的函数并返回到调用这个函数的地方,在下面,有调用这个函数的地方 :result = add_function(2,3)但是,函数中的return语句也不是必须要写的,如果不写,python将认为以return None作为结束。也就是说,如果函数中没有return ,事实上在调用的时候,python也会返回一个结果None

    if __name__ == "__main__":

    result = add_function(2,3)

    总结:

        def 函数名(参数1,参数2,...参数n):

        函数体(语句块)

    4、标准

        函数名的命名规则要符合python中的命名要求,一般用小写字母和单下划线、数字等组合。

        def是定义函数的关键词,这个简写来自英文单词define

        函数名后面是圆括号,括号里面可以有参数列表,也可以没有参数。

        千万不要忘记括号后面的冒号

        函数体(语句块),相对于def缩进,按照python习惯,缩进4个空格

        

        多态:

    >>> add("qiw","sir")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'add' is not defined
    >>> def add(x,y):
    ...     return x+y
    ... 
    >>> add("qiw","sir")
    'qiwsir'
    >>> add("qiwsir",4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in add
    TypeError: Can't convert 'int' object to str implicitly
    

      对象有类型,变量无类型

    >>> add
    <function add at 0x7fabf4c30b70>
    >>> type(add)
    <class 'function'>
    >>> r = add
    >>> r
    <function add at 0x7fabf4c30b70>
    >>> r(3,4)
    7
    >>> add(3,4)
    7
    >>> type(r)
    <class 'function'>
    

      

    5、命名总结

        变量:变量名全部小写,由下划线连接各个单词,注意,变量的命名不要与Python保留的关键字冲突

        文件名:全小写,可始用下划线

        函数名:小写,可以始用下划线风格的单词,以增加可读性。

        函数的参数:命名方式同变量(本质上就是变量)

    6、函数调用

        降低编程难度

        代码重用

    >>> add(10,3)
    x=10
    y=3
    13
    >>> add(x=10,y=3)  #指定函数变量值
    x=10
    y=3
    13
    >>> add(y=10,x=3)
    x=3
    y=10
    13
    >>> def times(x,y=2):   #创建函数内变量默认值
    ...   print("x={}".format(x))
    ...   print("y=",y)
    ...   return x * y
    ... 
    >>> times(2)
    x=2
    y= 2
    4
    >>> times(3,4)  #改变函数内变量默认值
    x=3
    y= 4
    12
    
    >>> def foo():    #函数嵌套,调用一个不存在的函数
    ...   print('Hello,Teacher Cang!')
    ...   bar()
    ... 
    >>> foo()
    Hello,Teacher Cang!
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in foo
    NameError: name 'bar' is not defined
    >>> def bar(): pass  #定义函数体内函数,pass表示什么也不做
    ... 
    >>> foo()
    Hello,Teacher Cang!

    7、函数返回值

        斐波那契数列:

    #!/usr/bin/env python3
    # encoding: utf-8
    
    """
    @version: ??
    @author: tajzhang
    @license: Apache Licence 
    @file: fbnq.py
    @time: 2018/2/28 11:49
    """
    
    def fibs(n):
        result = [0,1]
        for i in range(n-2):
            result.append(result[-2] + result[-1])
        return  result
    if __name__ == "__main__":
        lst = fibs(10)
        print(lst)
    

     返回多个值 

    >>> def my_fun():
    ...   return 1,2,3
    ... 
    >>> a = my_fun()
    >>> a
    (1, 2, 3)
    >>> type(a)
    <class 'tuple'>
    >>> x,y,z = my_fun()
    >>> print(x,y,z)
    1 2 3
    >>> def foo():   #定义空函数
    ...   pass
    ... 
    >>> print(foo())  #返回空值
    None
    
    
    >>> def my_fun():  #return中断函数体过程
    ...   print("I am coding.")
    ...   return
    ...   print("I finished.")
    ... 
    >>> my_fun()    
    I am coding.

      定义函数中的帮助属性

    #!/usr/bin/env python3
    # encoding: utf-8
    
    """
    @version: 1.0
    @author: tajzhang
    @license: Apache Licence 
    @file: fbnq.py
    @time: 2018/2/28 11:49
    """
    
    def fibs(n):
        """
        This is a Fibonacci sequence.    #定义doc方法输出内容
        """
        result = [0,1]
        for i in range(n-2):
            result.append(result[-2] + result[-1])
        return  result
    if __name__ == "__main__":
        lst = fibs(10)
        print(lst)
        print(fibs.__doc__)    #打印doc
    >>> my_fun()
    I am coding.
    >>> def cang():
    ...   """This is a function of canglaoshi"""
    ...   pass
    ... 
    >>> cang.__doc__
    'This is a function of canglaoshi'
    >>> cang.breast = 90     #增加函数属性
    >>> cang.breast
    90
    >>> cang.__name__
    'cang'
    >>> cang.__module__
    '__main__'
    

      传递多个参数

    arg、args

    >>> def func(x,*arg):  #将其它参数组成元祖
    ...   print(x)
    ...   result = x
    ...   print(arg)
    ...   for i in arg:
    ...     result += i
    ...   return result
    ... 
    >>> func(1,2,3,4,5,6,7,8,9)  
    1
    (2, 3, 4, 5, 6, 7, 8, 9)   #arg或args 将多个参数揉进一个元祖
    45 
    >>> def foo(x,*args):
    ...   print("x:",x)
    ...   print("tuple:",args)
    ... 
    >>> foo(7)   #定义函数给args传入空值
    x: 7
    tuple: ()
  • 相关阅读:
    如何控制input框!
    火车头采集器破解版
    记Angular与Django REST框架的一次合作(2):前端组件化——Angular
    拉勾网一些“震惊”的结论
    一个知乎重度用户眼中的知乎
    anthelion编译
    搜索引擎爬虫蜘蛛的USERAGENT大全
    Netty系列之Netty高性能之道
    python正则表达式
    Cookie的使用,详解,获取,无法互通、客户端获取Cookie、深入解析cookie
  • 原文地址:https://www.cnblogs.com/Taj-Zhang/p/7543911.html
Copyright © 2020-2023  润新知