变量

局部变量

  1. 简单使用:

    1
    2
    3
    4
    5
    def setName():
    name = 'peter' #局部变量
    print(name)

    setName() #调用函数
  2. 作用:临时保存数据,需要在函数中定义来进行存储。

  3. 特点:

    • 在函数内部定义的变量,作用域仅局限在函数内部

      1
      2
      3
      4
      def setName():
      name = 'peter' #局部变量

      print(name) #打印name

      运行结果:

    • 不同的函数可以定义相同名称的局部变量,不会产生影响

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      def setName1():
      name = 'peter'
      print(name)

      def setName2():
      name = 'Bob'
      print(name)

      setName1()
      setName2()

      运行结果:

全局变量

  1. 使用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    age = 10 #全局变量

    def setName1():
    print(age)

    def setName2():
    print(age)

    setName1()
    setName2()

    运行结果:

  2. 区别局部变量:作用域的范围不同,全局变量在整个文件当中均可使用

  3. 易错:

    • 冲突时:局部变量优先级高于全局变量

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      age = 10

      def setName1():
      age = 9
      print(age)

      def setName2():
      print(age)

      setName1()
      setName2()

      运行结果:

    • 函数中修改全局变量:

      1
      2
      3
      4
      5
      6
      7
      age = 10

      def setAge():
      age = 5 #错误做法,这样只是定义了一个局部变量

      setAge()
      print(age)

      运行结果:

      1
      2
      3
      4
      5
      6
      7
      8
      age = 10 

      def setAge():
      global age #一定要先定义后赋值,具体原因不知
      age = 5

      setAge()
      print(age)

      运行结果:

      注意:

      • 若写成 global age = 5 是错误的,一定要先定义后赋值,具体原因不知
      • 上面的代码把最开始的age=10去掉也能成功运行

引用传值

补充

  1. 不可变数据:整型、字符串、元组
  2. 可变数据:列表、字典

传不可变值

1
2
3
4
5
6
7
age = 5 

def fonc(age): #传不可变数据类型的值
age = 4

fonc(age)
print(age)

运行结果:

传可变值

1
2
3
4
5
6
7
list = []

def fonc(list):
list.append(1)

fonc(list)
print(list)

运行结果:

匿名函数

基础

  1. 语法:lambda 参数1,参数2:表达式
  2. 特点:
    • 与标准函数相比,使用起来更加简洁
    • 自带return,返回的就是表达式的结果
  3. 缺点:
    • 复杂逻辑无法实现

使用

  1. 求和运算

    匿名函数:

    1
    2
    Sum = lambda x, y: x + y
    print(Sum(1, 2))

    标准函数:

    1
    2
    3
    4
    def Sum(x, y):
    return x + y

    print(Sum(1, 2))

    运行结果:

    注意:上面代码可以更简洁为 print((lambda x, y: x + y)(1, 2))

  2. 简单判断:

    补充: print('左边大' if 3 > 2 else '右边大')

    运行结果:

    1
    2
    Judge = lambda x, y: '左边大' if x > y else '右边大'
    print(Judge(1, 2))

    运行结果:

    同样可以简写为:print((lambda x, y: '左边大' if x > y else '右边大')(1, 2))

递归函数

  1. 特点:

    • 有递归结束判断
    • 自己调用自己
  2. 使用:

    • 普通求阶乘:

      1
      2
      3
      4
      5
      6
      7
      def diGui(x):
      res = 1
      for i in range(1, x + 1):
      res *= i
      return res

      print(diGui(5))

      运行结果:

    • 递归求阶乘:

      1
      2
      3
      4
      5
      6
      7
      def diGui(x):
      if x == 1:
      return 1
      else:
      return x * diGui(x - 1)

      print(diGui(5))

      运行结果:

    • 递归输出给定目录子文件名称:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      def findFile(file_path):  # 输出给定路径下所有文件名称
      lists = os.listdir(file_path) # 将所有文件(夹)名称存入列表
      for item in lists:
      full_path = os.path.join(file_path, item) # 获取完整路径名称
      if os.path.isdir(full_path): # 判断
      findFile(full_path)
      else:
      print(item)
      else:
      return

      findFile('D:\\code')

      运行结果: