• Python基础—06-函数基础


    函数基础

    函数简介

    • 定义:就是具有特定功能的一段代码
    • 优点:
      • 解决代码的重复书写
      • 可以将功能的实现着和使用者分开,提高开发效率
    • 分类:
      • 库函数:print、input、abs等
      • 自定义:用户自己封装的函数

    函数使用

    • 定义函数格式

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

      []表示可选,参数可以有,也可以没有,也可以是多个。

    • 函数名:

      • 与变量一样,只要遵循标识符的命名规范即可。
    • 函数调用:

      • 函数定以后不会执行,需要调用才会执行
      • 调用格式:函数名([参数])

    函数分类(参数与返回值)

    • # 无参无返回值
      def print_hello():
          for i in range(10):
              print('Hello world!')
      
      # print_hello()
      # 带参数无返回值
      def print_n_hello(n):
          for i in range(n):
                print('Hello world!')  
         
      # print_n_hello(5)
      
      # 带参有返回值
      def add(m, n):
          c = m + n
            # 使用return返回需要返回的值,不返回默认为None
            return c   
      
      print(add(3, 5))

    分类的标准是按照有无参数,以及有无返回值。

    函数参数

    • 形参:形式参数,就是写在函数定义出的参数

    • 实参:实际参数,就是在函数调用时传递的参数

    • 位置参数:也叫必传参数,没有默认值的参数

    • 默认参数:定义时有默认值,调用时可以不传,必须写在最后

    • 关键字参数:在函数调用时指定参数名字,参数的位置就无所谓。

    • 可变长度参数:函数调用时可以传递比定义处更多的参数,多出来的参数会保存在args和kwargs中

      def var_len_args(a, b, name='goudan', *args, **kwargs):
          print(a, b)
          print(name)
          # 是一个元组,保存多传的位置参数
          print(args)
          # 是一个字典,保存多传的关键字参数
          print(kwargs)
      
      var_len_args(1, 2, 3, 4, age=10)
    • *的使用:

      def show(a, b):
          print(a, b)
      
      lt = [1, 2]
      # 需要从列表根据下表获取元素,然后作为参数传递
      # show(lt[0], lt[1])
      show(*lt)
      
      def show2(aa=11, bb=22):
           print(aa, bb)
         
      d = {'aa': 123, 'bb': 456}
      # show2(aa=d['aa'], bb=d['bb'])
      # 上下等价
      show2(**d)

    函数进阶

    • 函数的定义位置是随意的?
      • 不是,一定是先定义后调用,函数的调用一定要放在定义之后。
    • 函数的名字可以相同吗?
      • 不可以,若出现同名函数,后者会覆盖前者。
    • 函数内容能否再定义函数?
      • 可以,定义在函数内部的函数叫内部函数,它是很多高级功能实现的基础。

    变量的作用域

    • 块级作用域

      if True:
          name = 'guanyu'
      
      # 能够在块的外部使用,说明没有块级作用域
      print(name)
    • 局部作用域

      • 局部变量:定义在函数内部的变量叫局部变量,只能在函数内部使用。
      def test():
          a = 10
      
      # 不能再函数外部使用,此处会报错
      print(a)
    • 全局作用域

      • 全局变量:定义在函数外部的变量叫全局变量,哪里都可以使用
      num = 10
      
      def show():
          # 声明使用的时外部的同名变量
          global num
          # 只能使用,不能修改,若想修改协议进行全局声明
          num = 20
          print(num)
      
      show()
      print(num)
      1. 函数内部可以使用外部变量,但是不能修改
      2. 若修改需要使用global进行全局声明
      3. 当函数内部与外部出现同名变量,默认使用的时内部变量
    • nonlocal使用

      • 说明:内部函数使用外部函数的局部变量,需要使用nonlocal进行声明
      def wai():
          n = 10
          def nei():
              # 声明使用非本地变量,外部函数的局部变量
              nonlocal n
              n = 20
              print(n)
          nei()
          print(n)
      
      wai()

    递归函数(了解)

    • 定义:函数内部调用函数本身的函数叫递归函数。
    • 组成:
      • 函数内部调用自己
      • 终止条件(停止调用自己的条件)
      • 核心算法(具体功能)
    • 特点:
      • 代码简洁
      • 可读性差(不易理解)
      • 瞬间占用内存较大,没有终止条件立即崩溃
      • 有些领域是禁止使用的(安全领域:汽车电子)
      • 只有在不得不使用的时候才使用(遍历目录)
    • 练习:(可以做个小练习来巩固)
      • 求n的阶乘
      • 斐波那契数列的第n项
        • 前两项都为1,从第三项开始,每一项都等于前两项的和
        • 如:
          1,1,2,3,5,8,13,21,...

    常用函数

    • 内置函数(无需导入)

      print:打印,输出
      input:输入
      abs:求绝对值
      type:获取变量的类型
      chr:将ASCII数值转换为字符
      ord:将字符转换为对应的ASCII
      id:获取变量地址
      len:统计元素个数
      range:产生连续整数的可迭代对象
      enumerate:枚举可迭代对象
      
      强制类型转换:
      int
      float
      str
      list
      tuple
      set
      dict
      
      max:求多个参数的最大值,或可迭代对象中的最大元素
      min:最小值
      sum:求和,可迭代对象元素求和
      pow:求幂,pow(2, 3)等价于2 ** 3
      round:四舍五入,可以指定保留位数
      
      hex:16进制
      oct:8进制
      bin:2进制
    • 模块函数(需要导入)

      time:
          sleep:休眠指定的秒数,可以是小数
      math:
          e:自然对数
          pi:圆周率
          ceil:向上取整
          floor:向下取整
          sqrt:开方(请平方根)
          degrees:弧度转换为度
          radians:度转换为弧度
      sys:
          argv:运行程序时所有的命令行参数列表,第一个是程序文件名
          练习:完成一个计算器,支持加、减、乘、除运算
       
  • 相关阅读:
    netty(4)高级篇-Websocket协议开发
    netty高级篇(3)-HTTP协议开发
    netty中级篇(2)
    netty入门篇(1)
    nio简介
    总账科目如何添加自定义属性?
    如何切换组织初次打开界面时,默认显示财务组织?
    超好用的免费Redis客户端
    Postman如何测试Webservice接口?
    创建Maven project 提示pom.xml 首行错误
  • 原文地址:https://www.cnblogs.com/swjblog/p/9671007.html
Copyright © 2020-2023  润新知