zoukankan      html  css  js  c++  java
  • 019 函数:确认过参数,返回对的值

    简介

    • 它是代码的一种组织形式
    • 一个函数一般完成一项特定的功能

    定义

    def func():
        """
        def 是定义函数的关键字,后要跟一个空格
        func 为函数名,可自定义,起名最好遵循约定俗的成命名规则,如小驼峰
        func 后面的括号和冒号都不能省,括号内可以有参数,也可以没有
        """
        
        print("我是一个函数。")  # 需要注意缩进
        print("我可以完成一定的功能。")
        print("调用才能执行。")
        
        return None  # 只写 return 或不写,默认均返回 None
    
    print("我不属于 func 函数。")
    

    参数

    说明

    • 负责给函数传递一些必要的数据或者信息
    • 形参(形式参数):在函数定义的时候用到的参数,也许有个默认值,也许有个具体值,也许只是占个位
    • 实参(实际参数):在调用函数的时候输入的数据
    • 个人觉得,Python 中更适合谈“可变参数”与“不可变参数”

    例1

    def hello(name):  # 形参
        print("Hello, {}!".format(name))
    
      
    name = "YorkFish"  # 实参
    hello(name)
    

    >>>

    Hello, YorkFish!
    

    例2

    def hello(name):  # 形参
        print("Hello, {}!".format(name))
    
        return "See you next time~"
    
      
    name = "YorkFish"  # 实参
    rst = hello(name)
    print("函数返回的是:", rst)
    

    >>>

    Hello, YorkFish!
    函数返回的是: See you next time~
    

    分类

    • 普通参数
      • 定义时,直接定义变量名
      • 调用时,直接把变量或者值放入指定位置
    • 默认参数
      • 形参带有默认值
      • 调用时,若没有给相应的形参赋值,则使用默认值
    • 关键字参数
      • 对调用时而言
      • 可以不考虑参数位置
      • 不容易混淆
    • 收集参数
      • 相当于预留一些位置给以后可能会用的参数,可以看成是一个特定的数据结构
      • args 是约定俗成,虽然可以写成别的,但推荐写成 args
      • 参数名 args 前的星号不能省略
      • 收集参数可以和其他参数共存

    普通参数

    # 定义
    def func_name(param1, param2, ...):
        func_body
    
    # 调用
    func_name(value1, value2, ...)  # 按位置依次传递数据
    

    默认参数

    # 定义
    def  func_name(param1=val1, param2=val2, ...):
        func_body
    
    # 调用1
    func_name()
    
    # 调用2
    value1 = 100
    value2 = 200
    func_name(value1, value2)
    

    关键字参数

    # 定义
    def func(param1=val1, param2=val2, ...):
        func_body
    
    # 调用1
    func(para1=value1, param2=value2, ...)
    
    # 调用2
    func(param2=value2, param1=value1, ...)
    

    收集参数

    # 定义
    def introduce(*args):  # 按照 tuple 使用方式访问 args 得到传入的参数
        print(type(args))
        for item in args:
            print(item)
    
    
    # 调用
    introduce()  # 不传参,args 为空元组
    introduce("YorkFish", 18, "reading", "running", "music")
    

    >>>

    <class 'tuple'>
    YorkFish
    18
    reading
    running
    music
    

    关键字收集参数

    • 把关键字参数按字典格式存入收集参数
      • kwargs 为约定俗成
      • 调用时,把多余的关键字参数放入 kwargs
      • 访问 kwargs 需要按字典格式访问
    # 定义
    def introduce(**kwargs):
        print(type(kwargs))  # 在函数体内使用 kwargs 不用带星号
        for k, v in kwargs.items():
            print(k, v)
    
    
    # 调用
    introduce()  # 不传参,kwargs 为空字典
    introduce(name="YorkFish", age=18, hobby1="reading", hobby2="running", hobby3="music")
    

    >>>

    <class 'dict'>
    name YorkFish
    age 18
    hobby1 reading
    hobby2 running
    hobby3 music
    

    关键字参数,收集参数,关键字收集参数

    • 收集参数,关键字参数,普通参数可以混合使用
    • 使用规则:普通参数和关键字参数优先
    # 定义
    def stu(name, age, *args, hobby="None", **kwargs):
        print("My name is {0}, and I am {1} years old.".format(name, age))
        
        if hobby == "None":
            print("I don't have a hobby.")
        else:
            print("I like {}".format(hobby))
    
        for i in args:
            print(i)
    
        for k, v in kwargs.items():
            print(k, v) 
    
    
    name = "YorkFish"
    age = 18
    
    # 调用
    # stu(name, age)
    # stu(name, age, hobby="reading")
    stu(name, age, "Howard", "Raj", hobby="comic", hobby2="kites")
    

    >>>

    My name is YorkFish, and I am 18 years old.
    I like comic
    Howard
    Raj
    hobby2 kites
    

    解包

    • list/dict 解包后,可以传给收集参数
    • 列表、元组使用 * 即可解包
    • 字典需要用 ** 解包
    def test(*args):
        for i in args:
            print(i)
            print(type(i))
    
    
    a = [123, "YorkFish"]
    test(*a)
    

    >>>

    123
    <class 'int'>
    YorkFish
    <class 'str'>
    

    返回值

    说明

    • 函数的执行结果
    • 使用 return 关键字
    • 如果没有写 return 语句,默认返回一个 None
    • 函数一旦执行 return 语句,则无条件返回需返回的值,然后退出函数
    • 推荐最后以 return 结束的写法

    举例

    def test1():
        print("有返回值!")
        return 1
    
    
    def test2():
        print("没有返回值?")
    
    
    rst1 = test1()
    print(rst1)
    
    rst2 = test2()
    print(rst2)
    

    >>>

    有返回值!
    1
    没有返回值?
    None
    

    函数文档

    说明

    • 作用:对当前函数提供使用相关的参考信息
    • 写法:在函数内部开始的第一行使用三引号字符串定义符
    • 文档查看
      • 使用 help(),形如 help(func)
      • 使用 __doc__,形如 introduce.__doc__

    例1

    def introduce(name, age, *args):
        '''介绍人物
        name: 
        age: 
        return: None
        '''
        print("name: {}, age: {}".format(name, age))
        for i in args:
            print(i)
    
    
    help(introduce)  # 查看 introduce 的说明文档
    

    >>>

    Help on function introduce in module __main__:
    
    introduce(name, age, *args)
        介绍人物
        name: 
        age: 
        return: None
    
    

    例2

    def introduce(name, age, *args):
        '''介绍人物
        name: 
        age: 
        return: None
        '''
        print("name: {}, age: {}".format(name, age))
        for i in args:
            print(i)
    
    
    print(introduce.__doc__)
    

    >>>

    介绍人物
        name: 
        age: 
        return: None
    
  • 相关阅读:
    性能测试的感悟
    Web性能测试问题,mysql分析之一
    LoadRunner使用代理远程执行提示找不到“pre_cci.c”文件
    yii widget验证码不实用form验证的方法
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    (亲测)nginx解决thinkphp中pathinfo的问题
    一个超好用的php header下载函数
    编程中的一些概念,KISS、DRY、MVC、OOP、REST
    8个开发必备的PHP功能(转)
    关于按钮在短时间内多次点击的问题.
  • 原文地址:https://www.cnblogs.com/yorkyu/p/10297761.html
Copyright © 2011-2022 走看看