zoukankan      html  css  js  c++  java
  • 函数参数与函数文档

    四类参数?

    • 普通参数
    • 默认参数
    • 关键字参数
    • 收集参数

    关键字参数?

    • 语法

        def func(p1=v1, p2=v2....):
            func_body
      
          调用函数:
          func(p1=value1,p2=calue2......)
    
    • 比较麻烦,但也有好处
      • 不容易混淆,一般实参和形参只是按位置一一对应即可,容易出错
      • 使用关键字参数,可以不考虑参数位置
    In [4]:
     
    ?x
     
    # 关键字参数案例
    def stu(name, age, addr):
        print("I am a student")
        print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))
    
    
    n = "ruirui"
    a = 20
    addr = "宿舍"
    ?
    # 普通参数,只是按照位置传递,容易出错
    stu(n, a, addr)
    I am a student
    我叫 ruirui, 我今年 20岁了, 我住宿舍
    
    In [6]:
     
     
    def stu_key(name="No name", age=0, addr="No addr"):
        print("I am a student")
        print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))
    
    
    n = "ruirui"
    a = 20
    addr = "宿舍"
    ?
    # 关键字参数,按名字传递,不会出错
    stu_key(name=n, age=a, addr=addr)
    I am a student
    我叫 ruirui, 我今年 20岁了, 我住宿舍
    
     
     
    ## 收集参数
     - 把没有位置, 不能和定义时的参数位置相对应的参数,放入一个特定的数据结构里去
     - 语法
            
            def func(*args)
                func_body
                按照 list 使用方式访问 args 得到传入的参数
                
             调用:
             func(p1, p2, p3,.......)
     - 参数名 args 不是必须这样写,但是,我们推荐直接用 args ,约定俗成
     - 参数名 args 前面必须有星号  *
     - 收集参数可以和其他参数共存
    
    

    收集参数?

    • 把没有位置, 不能和定义时的参数位置相对应的参数,放入一个特定的数据结构里去
    • 语法

       def func(*args)
           func_body
           按照 list 使用方式访问 args 得到传入的参数
      
        调用:
        func(p1, p2, p3,.......)
      
    • 参数名 args 不是必须这样写,但是,我们推荐直接用 args ,约定俗成
    • 参数名 args 前面必须有星号 *
    • 收集参数可以和其他参数共存
    In [12]:
     
     
    # 收集参数代码
    # 函数模拟一个学生进行自我介绍,但具体内容不清楚
    # args 把它看作一个 list
    def stu(*args):
            print("Hello 大家好, 我先自我介绍下:")
            # type 函数作用是检测变量的类型
            print(type(args))
            for item in args:
                print(item)
    
    
    stu("ruirui", 20, "青岛大学","jianjain", "single" )
    stu("大锤")
    Hello 大家好, 我先自我介绍下:
    <class 'tuple'>
    ruirui
    20
    青岛大学
    jianjain
    single
    Hello 大家好, 我先自我介绍下:
    <class 'tuple'>
    大锤
    
    In [13]:
     
     
    # 收集参数案例
    # 说明收集参数可以不带任何实参调用,此时收集参数为空 tuple
    stu()
    Hello 大家好, 我先自我介绍下:
    <class 'tuple'>
    
    In [14]:
     
     
    # 如果使用关键字参数调用,会出问题
    stu(name="Liuying")
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-14-9c9c0b11e172> in <module>()
          1 # 如果使用关键字参数调用,会出问题
    ----> 2 stu(name="Liuying")
    
    TypeError: stu() got an unexpected keyword argument 'name'
    
    
     
     
    ## 收集参数之关键字收集参数
    - 把关键字参数按字典格式嵌入收集参数
    - 语法
            
            
            def func(**kwargs):
                 func_body
                 
              # 调用:
              func(p1=v1, p2=v2, p3=v3,.....) 
     - kwargd 一般的约定俗成
     - 调用的时候,把多余的关键字参数嵌入 kwargs 
     - 访问 kwargs 需要按字典的格式访问

    收集参数之关键字收集参数?

    • 把关键字参数按字典格式嵌入收集参数
    • 语法
        def func(**kwargs):
             func_body
    
          # 调用:
          func(p1=v1, p2=v2, p3=v3,.....) 
    
    • kwargd 一般的约定俗成
    • 调用的时候,把多余的关键字参数嵌入 kwargs
    • 访问 kwargs 需要按字典的格式访问
    In [21]:
     
     
    # 收集参数关键字参数案例
    # 自我介绍
    # 调用的时候需要使用关键字参数调用
    def stu( **kwargs):
        print("Hello 大家好, 我先自我介绍下:")
        print(type(kwargs))
         # 关于字典的访问 python2 和 python3 是有区别的
        for k,v in kwargs.items():
            print(k, "....", v) # k 表示变量名称 引号里面表示字符串,v 表示给变量赋的值
    
    
    stu(name="jianjian", age=20, addr="青岛大学", love="ruirui", work="自由")
    print("*"*20)
    stu(name="大锤")
    Hello 大家好, 我先自我介绍下:
    <class 'dict'>
    name .... jianjian
    age .... 20
    addr .... 青岛大学
    love .... ruirui
    work .... 自由
    ********************
    Hello 大家好, 我先自我介绍下:
    <class 'dict'>
    name .... 大锤
    
    In [22]:
     
     
    # 收集参数可以为空的案例
    stu()
    Hello 大家好, 我先自我介绍下:
    <class 'dict'>
    
     
     
    ### 收集参数混合调用得顺序问题
     - 收集参数,关键字参数,普通参数可以混合使用得
     - 使用参数规则就是,普通参数和关键字参数优先
     - 定义得时候一般找普通参数,关键字参数,收集参数 tuple ,收集参数 dict

    收集参数混合调用得顺序问题?

    • 收集参数,关键字参数,普通参数可以混合使用得
    • 使用参数规则就是,普通参数和关键字参数优先
    • 定义得时候一般找普通参数,关键字参数,收集参数 tuple ,收集参数 dict
    In [44]:
     
     
    # 收集参数混合使用案例
    #  stu 模拟一个学生得自我介绍
    def stu(name, age, *args, hobby="没有",**kwargs):
        print("Hello 大家好")
        print("我叫{0},今年{1}了。".format(name, age))
        if hobby =="没有":
            print("我没有特殊的爱好,so sorry")
        else:
            print("我的爱好是{0}".format(hobby))
        print("*" * 20)
    
    
        for i in args:
            print(i)
    
    
        for k,v in kwargs.items():
            print(k, "...", v)
    
    
    
    
    # 开始调用函数
    name = "jianjian" 
    age = 20
    # 调用不同得格式
    stu(name, age)
    ?
    stu(name, age, hobby="吃")
    ?
    stu(name, age, "ruirui", hobby="聊天", hobby1="烹饪")
    Hello 大家好
    我叫jianjian,今年20了。
    我没有特殊的爱好,so sorry
    ********************
    Hello 大家好
    我叫jianjian,今年20了。
    我的爱好是吃
    ********************
    Hello 大家好
    我叫jianjian,今年20了。
    我的爱好是聊天
    ********************
    ruirui
    hobby1 ... 烹饪
    
     
     
    ## 收集参数得解包问题
    ?
     - 把参数嵌入 list 或字典里,直接把 lisr/dict 中得值放入收集参数中
     - 语法:参见案例

    收集参数得解包问题?

    • 把参数嵌入 list 或字典里,直接把 lisr/dict 中得值放入收集参数中
    • 语法:参见案例
    In [51]:
     
     
    # 收集参数得解包问题
    def stu(*args):
        print("我笑了")
        # n 用来表示循环次数
        # 主要用来调试
        n = 0
        for i in args:
            print(type(i))
            print(n)
            n += 1
            print(i)
    
    
    
    
    
    
    #stu("jianjian", "ruirui", 20, 19)   
    ?
    l = ("jianjian", "ruirui", 20, 19)
    l = list()
    l.append("jianjian")
    l.append(20)
    l.append(19)
    ?
    stu(l)
    # 此时,args 得表示形式是字典内一个 List 类型得元素, 即 arg = ({jianjian", "ruirui", 20, 19})
    #很显然跟我们违背了最初得想法
    ?
    ?
    # 此时得调用,我们就需要解包符号,即调用得时候前面加个星号  *  
    stu(*l)
    我笑了
    <class 'list'>
    0
    ['jianjian', 20, 19]
    我笑了
    <class 'str'>
    0
    jianjian
    <class 'int'>
    1
    20
    <class 'int'>
    2
    19
    
     
     
    # 同理,dict 类型收集参数一样可以解包,但是
      - 对 dict 类型进行解包
      - 需要两个星号进行解包(**)

    同理,dict 类型收集参数一样可以解包,但是?

    • 对 dict 类型进行解包
    • 需要两个星号进行解包(**)
     
     
    ##   返回值
    
    
      - 函数和过程得区别
         - 有无返回值
       - 需要用  relum 显示返回内容
       - 如果没有返回,则默认返回 None
       - 推荐写法,无论有无返回值最后都要以 return 结束

    返回值?

    • 函数和过程得区别
      • 有无返回值
        • 需要用 relum 显示返回内容
        • 如果没有返回,则默认返回 None
        • 推荐写法,无论有无返回值最后都要以 return 结束
    In [3]:
     
     
    # 返回值示例
    ?
    def func_1():
        print("有返回值得")
        return 1
    def func_2():
        print("没有返回值得")
    
    
    f1 = func_1()
    print(f1)
    ?
    f2 = func_2()
    print(f2)
    有返回值得
    1
    没有返回值得
    None
    
     
     
    # 函数文档
    ?
     - 函数得文档得作用是对当前函数提供使用相关参数信息
     - 文档得写法
          - 在函数内部开始得第一行使用三字符串定义符
          - 一般具有特定格式
          - 参看案例
     - 文档查看
          - 使用 help 函数, 形如 help(func)
          - 使用 __doc__ ,参看案例(doc两边各两个下划线)

    函数文档?

    • 函数得文档得作用是对当前函数提供使用相关参数信息
    • 文档得写法
      • 在函数内部开始得第一行使用三字符串定义符
      • 一般具有特定格式
      • 参看案例
    • 文档查看
      • 使用 help 函数, 形如 help(func)
      • 使用 doc ,参看案例(doc两边各两个下划线)
    In [19]:
     
     
    # 文档案例
    # 函数 stu 是模拟一个学生得自我介绍得内容
    def stu(name, age, *args):
        """
        第一个
        第二个
        这是一个文档
    
    
        """
        print("This is shanshu stu")
    In [20]:
     
     
    # 查看文档
    help(stu)
    stu.__doc__
    Help on function stu in module __main__:
    
    stu(name, age, *args)
        第一个
        第二个
        这是一个文档
    
    
    Out[20]:
    '
        第一个
        第二个
        这是一个文档
        
        '
    In [1]:
     
     
    def stu(name, age):
        """
        这是文档内容
        :param name:表示学生姓名
        :param age:表示学生年龄
        :return:此函数没有返回值
        """
        pass
    print(help(stu))
    print("*" * 20)
    print(stu.__doc__)
    Help on function stu in module __main__:
    
    stu(name, age)
        这是文档内容
        :param name:表示学生姓名
        :param age:表示学生年龄
        :return:此函数没有返回值
    
    None
    ********************
    
        这是文档内容
        :param name:表示学生姓名
        :param age:表示学生年龄
        :return:此函数没有返回值
  • 相关阅读:
    iOS9 UITableViewCell separatorInset设置为0分割线还是没有顶到头的问题
    facebook登录(集成FBSDKLoginKit) result的isCancelled总是YES token为nil
    Mac OS X 在Finder新建文本文件
    Xcode8 Could not build Objective-C module 'FBSDKCoreKit'
    Multiple methods named 'status' found with mismatched result, parameter type or attributes
    iOS 10 UserNotifications 框架解析
    WKWebView无法(通过URL schemes)跳转到其他App
    WKWebView不显示提示框(Swift)
    Redis 3.2.1集群搭建
    高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
  • 原文地址:https://www.cnblogs.com/yuanjian6/p/9702900.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com