zoukankan      html  css  js  c++  java
  • Python--初识函数

    一:定义

      对于代码块和功能的封装和定义

    二:函数的定义, 函数名, 函数体以及函数的调用

      我们使用def关键字来定义函数, 函数的定义语法:

        

    def 函数名():
        函数体

      函数名的命名规则和变量基本一致,

      函数体就是函数被执行之后要执行的代码

      函数名()的形式用来调用函数.

    三:函数的返回

      return关键字会中断函数,并返回一个返回值

      关于返回值:

        如果return什什么都不写 或者 ⼲干脆不写return .那么返回的就是None
        如果return后⾯面写了了⼀一个值. 则调⽤用者可以接收⼀一个结果
        如果return后⾯面写了了多个结果, 则调⽤用者可以接收⼀一个tuple, 调⽤用者可以直接解构成多个变量

    四:函数的参数

        

    def 函数名(参数):
        函数体

        首先,需要明确两个概念,形参和实参

          形参:写在声明位置的变量叫做形参,它表示形式上的完整,表示这个函数需要xxx

          实参:函数调用的时候传递给函数的值,表示给函数xxx

        传参:将实参交给形参的过程叫做传参

        4.1 实参的分类

          1.位置参数:传参时按照位置顺序分别将实参传递给形参,解释器默认按照位置传参.

            

    def yue(chat, address, age): # 形参
    print("拿出手机")
    print("打开"+chat)
    print("找个"+address+"附近漂亮的"+str(age)+"岁妹子")
    print("约不约")
    yue("微信", "北京", 18) # 实参
    结果:
    拿出手机
    打开微信
    找个北京附近漂亮的18岁妹子
    约不约

          2.关键字参数:不按照位置传参,按照参数名字传参

          

    def yue(chat, address, age):
    print("拿出手机")
    print("打开"+chat)
    print("找个"+address+"附近漂亮的"+str(age)+"岁妹子")
    print("约不约")
    yue(chat="微信", age=18, address="北北京") # 关键字参数.
    
    结果:
    拿出手机
    打开微信
    找个北京附近漂亮的18岁妹子
    约不约

          3.混合参数:将上述两种参数混合使用,但是位置参数必须在关键字参数前边

      

    # 混合参数
    yue("微信", age=18, address="上海") # 正确.第一个位置赋值给chat, 后面的参数开始指定关键字.
    yue(age="18", "微信", address="广州") # 错误, 最开始使用了关键字参数, 那么后面的微信的位置就串了, 容易出现混乱

        4.2 形参的分类

          1.位置参数:同实参的位置参数,很容易理解

          2.默认值参数:当这个参数不传实参的时候,使用默认的值,需要在位置参数的后边

        

    #比如, 我们录入一个班学生的基本信息. 通过调查发现.大部分学生都是男生. 这个时候就可以给出一个sex='男'的默认值.
    def stu_info(name, age, sex=''):
        print("录入学生信息")
        print(name, age, sex)
        print("录入完毕")
    stu_info("张强", 18)

          3.动态参数

            3.1  动态接受位置参数, 动态参数必须在位置参数之后,在默认值参数之前, *表示接受任意内容

    def chi(*food):
        print("我要吃", food)
    chi("大米饭", "小米饭")
    结果:
    我要吃 ('大米饭', '小米饭') # 多个参数传递进去. 收到的内容是元组tuple

            3.2 动态接收关键字参数,使用** 标志

     

    def func(**kwargs):
        print(kwargs)
    func(a=1, b=2, c=3)
    func(a=1, b=2)
    结果:
    {'a': 1, 'b': 2, 'c': 3}
    {'a': 1, 'b': 2}

         几种参数最终的排序:位置参数 > *args > 默认值参数 > **kwargs

        如果想接收所有类型的参数,可以使用def func(*args, **kwargs):的形式,可以接收任何类型的参数,源码中很多方法都是这种形式.

        4 动态传参的另一种方式

          

    def fun(*args):
        print(args)
    lst = [1, 4, 7]
    fun(lst[0], lst[1], lst[2])
    fun(*lst) # 可以使用*把一个列表按顺序打散
    s = "臣妾做不到"
    fun(*s) # 字符串也可以打散, (可迭代对象)

          在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列按顺序打散,在形参的位置上的* 表⽰示把接收到的参数组合成一个元组,如果是一个字典, 那么也可以打散. 不过需要用两个*

    def fun(**kwargs):
        print(kwargs)
    dic = {'a':1, 'b':2}
    fun(**dic)

              

  • 相关阅读:
    ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件
    在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
    如何远程关闭一个ASP.NET Core应用?
    ASP.NET Core应用中如何记录和查看日志
    ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
    ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
    学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
    学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
    框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
    学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup
  • 原文地址:https://www.cnblogs.com/DoingBe/p/9410440.html
Copyright © 2011-2022 走看看