zoukankan      html  css  js  c++  java
  • chapter4.1、函数,参数

    函数

    y = f(x)  y是x的函数,x自变量

    python函数

      由若干的语句块,函数名称,参数列表构成,是组织代码的最小单元

      作用是完成一定的功能

    函数的作用

      结构化编程的最基本封装,一般按照功能组织代码

      封装为了复用,减少冗余代码

      代码简洁美观,可读易懂

    def语句定义函数

    def 函数名(参数列表)    <--参数列表不是列表  

      函数体(代码块)

      [return 返回值]
        函数名就是标识符,命名要求一样

        语句块缩进 四个空格

        python的函数没有return语句,返回None

        定义的参数列表为形式参数,只是符号表达,简称形参,相当于占位符

    调用

      函数定义,只是声明函数,需调用才能执行

      调用的方式,就是函数加上小括号,括号内写参数

      调用的参数是实际参数,和形参位数相同 

      返回值也是值,None也是值,返回值可以用变量接收

      定义要在调用前,否则NameError异常

      callable测试是否是函数,测试时不要在函数名后加括号

      print返回None,打印打印的话会返回None

    函数的调用,输入参数时,动态语言的缺点,不能指定类型,除了程序解决,没有语法上的解决方案。

    位置参数,一一对应,按照参数定义顺序传入

      def f(x,y,z) 调用使用 f(1,3,5)  按照定义顺序传入参数

    关键字参数,使用形参的名字传参,可以与定义顺序不同

      def f(x,y,z) 调用使用 f(x=1,y=3,z=5)  

    传参

      f(z=None,y=10,x=[1])    f((1,),z=6,y=4.1)    

    实参:位置参数要在关键字参数之前,位置参数按位置对应

    形参:非缺省参数要在缺省参数之前

    参数默认值,缺省值

    定义时,在形参后跟上一个值

    作用

    参数的默认值可以在未传入足够的实参时,对未定义的参数赋值为默认值

    简化函数调用

    可变参数

    def add(nums):
        sum = 0
        for i in nums:
            sum += i
        return sum

    传入可迭代对象,迭代元素求和

    一个形参可以匹配任意个参数

    *可变位置参数,可以接收多个实参

      使用*封装成元组返回,收集的实参为一个tuple

      空的返回空元组

    **可变关键字参数

      使用**符号,表示接受多个关键字参数

      收集到的值和名称封装成字典dict

            空的收集空字典

    位置参数后放可变位置参数,再放keyword-only参数,最后边只能放可变关键字参数

    keyword-only参数,只能通过关键字传参

      在位置可变参数之后,出现参数,就不能在理解为位置参数,要理解为关键字参数

    **kwargs只能在最后的位置

    fn(*args,x,y),表示x,y是keyword-only参数,前边收位置参数

    fn(*,x,y) 表示只要keyword-only参数,必须有

    参数列表的一般顺序是,普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数

    def fn (x,y,z=3,*arg,m=4,n,**kwargs)

    注意

    代码应该易读易懂,按照书写习惯定义函数参数

    解构

    fn(*[4,5])  fn(*{4,5})  fn(*(4,5))

      解开是fn(4,5)

      *参数解构成位置参数,可以解开一层的结构,列表,元组,集合,字符串,字节,可以解开可迭代对象(range等)

    add(**{'x':2,'y':4})

      解开的参数是add(x=2,y=4)

      **解开两层,解开字典构成关键字参数,产生的键值对组成的元组。二维结构,返回两层。

    可变位置参数和参数解构要分清

  • 相关阅读:
    struts2 标签为简单标签
    html a标签链接使用action 参数传递中文乱码
    html 字体加粗
    Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
    Unity3D学习笔记(一):Unity3D简介 111
    C#学习笔记(二十):C#总结和月考讲解
    C#学习笔记(十九):字典
    C#学习笔记(十八):数据结构和泛型
    C#学习笔记(十七):委托、事件、观察者模式、匿名委托和lambert表达式
    C#学习笔记(十六):索引器和重载运算符
  • 原文地址:https://www.cnblogs.com/rprp789/p/9514793.html
Copyright © 2011-2022 走看看