5.函数[函数定义、函数调用、函数参数、变量作用域]

一函数简介(function) 

  • 函数也是一个对象 
  • 对象是内存中专门用来存储数据的一块区域
  • 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
  • 创建函数:
    • def 函数名([形参1,形参2,...形参n]) :  

    •                                  代码块

 

    • 函数名必须要符号标识符的规范
    • (可以包含字母、数字、下划线、但是不能以数字开头)
  • 函数中保存的代码不会立即执行,需要调用函数代码才会执行 
  • 调用函数:
    •   函数对象() 
  • 定义函数一般都是要实现某种功能的
  • Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

Python的内置函数

  • 数学相关: abs / divmod / pow / round / min / max / sum
  • 序列相关: len / range / next / filter / map / sorted / slice / reversed 
  • 类型转换: chr / ord / str / bool / int / float / complex / bin / oct / hex 
  • 数据结构: dict / list / set / tuple 
  • 其他函数: all / any / id / input / open / print / type

 

Python常用模块 

  • 运行时服务相关模块: copy / pickle / sys / ... 
  • 数学相关模块: decimal / math / random / ... 
  • 字符串处理模块: codecs / re / ... 
  • 文件处理相关模块: shutil / gzip / ... 
  • 操作系统服务相关模块: datetime / os / time / logging / io / ... 
  • 进程和线程相关模块: multiprocessing / threading / queue 
  • 网络应用相关模块: ftplib / http / smtplib / urllib / ... 
  • Web编程相关模块: cgi / webbrowser 
  • 数据处理和编码模块: base64 / csv / html.parser / json / xml / ...

 

二、定义函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。函数可以同时返回多个值,return 返回的其实就是一个tuple,可以是函数、多个数值等。

语法:

Python 定义函数使用 def 关键字,一般格式如下:

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

 

三、函数的调用:

要调用一个函数,需要知道函数的名称和参数。

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”

>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1 

调用方法:

函数对象(参数)

 

四、函数的参数:

  • 在定义函数时,可以在函数名后的()中定义数量不等的形参, 多个形参之间使用,隔开 
  • 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值 
  • 实参(实际参数) 
    •   如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
    •   实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参

以下是调用函数时可使用的正式参数类型:

  • 位置参数
  • 关键字参数
  • 默认参数
  • 不定长的参数

①位置参数

  • 位置参数就是将对应位置的实参复制给对应位置的形参
  • 第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。。。

②关键字参数

  • 关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数
  • 位置参数和关键字参数可以混合使用
  • 混合使用关键字和位置参数时,必须将位置参数写到前面

 ③默认参数

  • 默认参数必须在后面
  • 当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
  • 默认参数必须指向不变对象!
def fn(a = 5 , b = 10 , c = 20):  #这种给定值的是默认参数
    print('a =',a)
    print('b =',b)
    print('c =',c)

fn(1 , 2 , 3)  #这个就是位置参数

fn(b=1 , c=2 , a=3) #这个就是关键字参数

 

④不定长的参数

  • 需要一个函数能处理比当初声明时更多的参数
  • 第一种方式:加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
  •  第二种方式:**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
#语法:以元组的形式导入
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
#以字典的形式导入,传参是键值对方式
def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]

  

五、变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内置作用域(内置函数所在模块的范围)

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

 

posted @ 2019-08-29 09:58  小红帽爱吃大灰狼  阅读(667)  评论(0编辑  收藏  举报