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)

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

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

原文地址:https://www.cnblogs.com/rprp789/p/9514793.html