zoukankan      html  css  js  c++  java
  • 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  # 局部作用域
    
  • 相关阅读:
    codeforces round #433 div2
    bzoj1951
    bzoj3620
    bzoj2286
    bzoj1513
    bzoj4390
    codeforces round 430 div 2
    bzoj3339
    准备实现体积蒙皮
    看牛顿法的改进与验证局部收敛
  • 原文地址:https://www.cnblogs.com/jieperhaps/p/11425200.html
Copyright © 2011-2022 走看看