wl413911

python-自定义函数

函数定义:

  def func_name (parameter,...):

    # 处理逻辑

    return(或者yield,也或者没有) some_value  

  def :关键字,是个可执行语句,在被调用之前,函数其实是不存在的

  func_name : 函数名字

  parameter: 函数参数,可以给定默认值(def func(parameter = 0):    这里就为parameter定义了默认值0)

函数的参数可以设定默认值

  return (yield): 函数返回值 ,也可以没有返回值,需要根据需要而定

 

函数调用:

  主程序调用函数时,必须保证这个函数此前已经定义过,不然就会报错。

  python寻找变量的时候,会按照本地作用域、闭包、全局、内置这种顺序去查找

变量的作用域:

  全局变量:定义在整个文件层次上 ,可以在文件内部任何地方被访问,包括函数内部,但是不能被修改(修改的话,需要在函数内部做特殊处理)

  局部变量:定义在 函数内 ,如果不加特殊处理,python的解释器默认在函数内定义或者进行一些修改操作的都是局部变量

 

  要在函数内部修改全局变量怎么办?

    答:在函数内,用global关键字修饰全局变量,这里并不是重新声明,而是告诉解释器,函数内的这个变量和全局定义的是同一个,global起到的是标识的作用

 

  函数内部定义的变量,和全局变量重名怎么办?

    答:全局变量会被局部变量覆盖。

 

  嵌套函数可以访问外部函数的变量,但是要修改,需要什么处理办法?

    答: 在内部函数 该变量前 加 nonlocal关键字, 标识该变量 为 外部函数的变量

  

  函数的嵌套函数内的变量, 跟外部函数的变量重名怎么办?

    答: 内部函数的变量 会 覆盖  外部函数的变量

 

主程序调用函数时,必须保证这个函数此前已经定义过,不然就会报错
主程序调用函数时,必须保证这个函数此前已经定义过,不然就会报错

  def本身就是一个声明,如果不执行,就不涉及对对象的引用,也就不会报错,即使这时在函数内部引用了一个不存在的变量。关键在于执行的时候,被引用的变量或者函数是否被加载。

 

python语言的特点之一: dynamically typed ,也就是 ”多态

  可以接受任何数据类型(整型,浮点,字符串等等),Python 不用考虑输入的数据类型,而是将其交给具体的代码去判断执行

  这个特点,也会带来一些问题,必要时,需要在函数的开头加上类型检查的相关处理

 

python语言的特点之一:函数内可以嵌套函数 , 内部函数的作用域仅限于外层嵌套函数内部,无法在外层函数以外 被访问

  第一:提供了很好的封装(保护敏感数据不会在外层函数之外被访问到)

  第二:提高效率,比如在递归函数中,参数类型检查 等操作,在外部函数完成, 实际的递归逻辑在内部函数中完成,这样就避免了每次递归都进行参数检查

 

python语言特点之一:闭包(closure)

  类似于函数的嵌套,只是 外部函数返回的是一个函数 , 返回的函数还可以再接收相应参数

  闭包优点: 让程序变得更加的  简洁易读

          提高效率 : 有些程序需要返回执行一部分核心代码,而之前还需要额外的一些处理。就可以将额外处理的代码(比如,参数检查)放在外部函数内,需要反复执行的核心代码放在内部函数里。

 

posted on 2020-05-28 14:39  wl413911  阅读(155)  评论(0编辑  收藏  举报