zoukankan      html  css  js  c++  java
  • python ==》 函数

    一.提个问题,为什么要有函数?

      1.让程序变的简洁

      2.提高代码的可读性

    函数的定义:

    def 函数名(参数1,参数2):
        ---函数的注释---
        print('函数体')
        return '返回值'

    函数的调用:

    返回值 = 函数名(参数1,参数2)

    函数的参数: 

      实参 和 形参。 (两类)

      实参:函数调用的时候传入的参数值。

      形参:在函数定义的时候所定义的参数名。

    参数: 分三类。

      1.参数可以是任意的数据类型。2.可以传递0个或者多个参数。

    位置参数:

      按顺序定义参数

    默认参数:

    首先,不要设置可变类型的默认参数,对于变化小的参数可以设置默认参数。

    如果传递,会覆盖默认值默认的值是在函数定义前的设置好的了。

    动态参数:

       *args
     **kwargs
    

     调用函数时的传参数:

      按照位置传参:

    def my_max (a,b):
        print(a,b)
    my_max(10,20)

      按照关键字传参:

    def my_max (a,b):
        print(a,b)
    my_max(b = 10 , a=20 )

    函数的返回值:

      返回值的关键字:return

      return的作用:

        1.结束函数的执行

        2.返回要返回的值

    返回值的两种情况:

     一.返回值 为 None

      函数的返回值为None有三种情况。

    1.不写返回值

    2.只写一个return

    3.return None  (几乎不用)

    1.不写返回值 return
    def func1():
        a = 111
        b = [1,2,3]
    
    ret = func1()
    print(ret)
    
    #2.return
    def func2():
        a = 111
        b = [1,2,3]
        return
    ret = func2()
    print(ret)
    
    #3. return
    def func3():
        a =111
        b = [1,2,3]
        return  None
    ret = func3()
    print(ret)
    
    
    这以上的三种情况的返回值都为 None。
    View Code

     二.返回值 不为  None

        1.返回一个值

          用一个变量接收

        2.返回多个值

          用一个变量接收,接收的结果是一个元组

          有多个返回值就用多少个变量接收。

    函数的闭包:

      闭包函数:函数内部定义的函数,该内部函数包含对外部作用域,而不是对全局作用域名字的引用,

      那么该内部函数称为: 闭包函数。

      闭包 : 内部函数,包含了对外部作用域中变量的引用。
      闭 : 内部的函数
      包 : 包含外部函数的变量

    闭包的例子:

    from urllib.request import urlopen   #1.定义一个模块
    def index (url):          #2.定义一个函数index(url)    url:是一个传递值 
        def inner():            #5. 调用index()后,进到函数index,里面,又定义了个新函数,inner()
            return  urlopen(url).read()     #8.返回   读url 网址
        return  inner       #6.返回inner      inner 在 index 里, index = get   所以  inner == get
    u = 'http://www.baidu.com'       #3. 把一个网址  赋给  u
    get = index (u)            #4调用 index(u)     
    print(get())            #7.输出打印  调用get== 调用inner

    函数的装饰器:

    装饰器:

      本质是任意可以调用的对象,被装饰的对象也可是任意可调用对象。

           装饰器本身也是函数,用来装饰其他函数。

    装饰器的功能是:

           在不修改被装饰器对象源代码以及的调用方式的前提下为其添加新功能。

    原则:

      1.      不修改源代码。

      2.      不修改调用方法

    目标:

           添加新功能

    一:开放封闭原则,对扩展是开放的,对修改是封闭的。

    一个装饰器就闭包函数。

    先写最内层的函数。

    最简单的装饰器:

    import time
    def timer(func):
        def inner():
            func()
        return inner
    def hahaha():
        time.sleep(2)
        print ('aaaa')
    hahaha = timer(hahaha)
    hahaha()
    

    语法糖:@timer  ==》   hahaha = timer(hahaha)

    import time
    def timer(func):
        def inner():
            start = time.time()
            time.sleep(2)
            func()
            end = time.time()
            print(end-start)
        return inner
    @timer
    def hahaha():
        print ('aaaa')
    hahaha()    
    

      

  • 相关阅读:
    QQ在线人数图表
    使LumaQQ.NET支持接收长消息
    发现有趣的东东,Live Mail能自动显示人名
    关于转换QQ消息中系统表情,自定义表情和截图的函数
    使用Autofac,提示重写成员“Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)”时违反了继承安全性规则。重写方法的安全可访问性必须与所重写方法的安全可访问性匹配。
    libvirt笔记(未完待续)
    OpenStack Grizzly版本部署(离线)
    git学习笔记
    MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
    Response 关于浏览器header的方法
  • 原文地址:https://www.cnblogs.com/zhongbokun/p/7235320.html
Copyright © 2011-2022 走看看