python语言篇(8知识点)

函数变量
  函数名是变量,它在创建时绑定一个函数

示例:
  def f1(lst=[]):
      print("f1函数被调用")
  f1()
  f1 = None
  f1() # 出错,f1 绑定的是None

示例:
    def f1():
        print("hello")

    def f2():
        print("world")

    f1, f2 = f2, f1
    f1()  # world

一个函数可以作为另一个函数的参数(实参)传递
示例:
  def f1():
      print("f1函数被调用")

  def f2():
      print("f2函数被调用")
  
  def fx(fn):
      print("fn绑定的函数是:", fn)
      # 在fx内调用fn绑定的函数
      fn()
  fx(f1)  # 调用fx,把f1作为实参传数
  fx(f2)

看懂下列代码在做什么?为什么?
def goodbye(L):
    for x in L:
        print("再见:", x)

def hello(L):
    for x in L:
        print("欢迎:", x)

def fx(fn, L):
    print("fx被调用")
    fn(L)

fx(hello, ['Tom', 'Jerry', 'Spike'])
fx(goodbye, ['小张', '小李'])


函数可以做为另一个函数的返回值:
  函数可以返回另一个函数

示例:
    def get_op():
        s = input("请输入您的操作: ")
        if s == "求最大":
            return max
        elif s == '求最小':
            return min
        elif s == '求和':
            return sum

    L = [2,4,6,8,10]
    print(L)
    f = get_op()
    print(f(L))

函数嵌套定义:
  def 语句的作用是用来创建一个函数
  def 语句可以写在函数内部,在函数执行时可以动态创建一个函数

示例:
    def get_func(value):
        if value == 1:
            def myadd(x, y):
               return x + y
            return myadd
        elif value == 2:
            def mysub(x, y):
               return x - y
            return mysub
    fx = get_func(1)
    print(fx(400, 300))  # 700
    fx = get_func(2)
    print(fx(400, 300))  # 100
   

全局变量和局部变量
  局部变量:
    1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
    2. 局部变量只能在函数内部使用
    3. 局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
  全局变量:
    定义在函数外部,模块内部的变量称为全局变量
    全局变量,所有函数都可以直接访问(但函数内部不能直接修改全局变量的绑定关系)

  示例:
    a = 100
    b = 200
    def fn(c):
        d = 300
        print(a, b, c d)

    fn(300)
    print('a =', a)
    print('b =', b)

局部变量说明:
  1. 在函数内首次对变量赋值是创建局部变量,再次为变量赋值是修改局部变量的绑定关系
  2. 在函数内部的赋值语句不会对全局变量造成影响

python作用域:
  作用域也叫命名空间,是访问变量时查找变量名的范围空间

python的四个作用域LEGB
     作用域            英文解释            英文简写
局部作用域(函数内)     Local(function)         L
外部嵌套函数作用域  Enclosing function locals  E
函数定义所在模块的作用域  Global(module)        G
python 内置模块的作用域  Builtin(python)       B

示例见:
  namespace.py

变量名的查找规则(顺序):
   1. 查找本地变量
   2. 查找包裹此函数的外部嵌套函数内部的变量
   3. 全局变量
   4. 内置变量

globals() / locals() 函数
  globals() 返回全局作用内变量的字典
  locals() 返回局部作用域内变量的字典

示例见: globals_locals_function.py

练习:
  1. 写一个函数 mysum 此函数的功能是返回:
     1 + 2 + 3 + 4 + 5 + ..... + n 的和
  def mysum(n):
      ....

  print(mysum(100))  # 5050

  2. 写一个函数 mysum2 此函数可以传入一个参数,两个参数和三个参数:
  1) 当传入一个参数时,这个参数代表 终止数
  2) 当传入两个参数时,第一个参数代表起始值,第二个参数代表终止值
  3) 当传入三个参数时,第三个参数代表步长
  此函数的功能是返回从开始到终止值的和
  如:

  print(mysum2(5))  # 10  (0+1+2+3+4)
  print(mysum2(4, 6))  # 9 (4+5)
  print(mysum2(5, 10, 2))  # 21 (5+7+9)


global 语句
  作用:
    1. 告诉解释执行器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域的变量,也称作全局变量
    2. 全局声明(global) 将赋值变量映射到模块文件内部的作用域
  语法:
    global 变量1, 变量2, ...
  示例:
    global ga, gb
    global gc
  global声明示例见:
    global_statement.py
  说明:
    1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
    2. 全局变量在函数内部不经过声明就可以直接访问
    3. 不能先声明局部变量,再用global声明为全局变量,此做法不附合规则
    4. global变量列表里的变量名不能出现在此作用域内的形参列表里


nonlocal语句
  作用:
    告诉解释器, nonloca声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
  语法:
    nonlocal 变量名1, 变量名2, ....
  示例见:
    nonlocal_statement.py
  说明:
    1. nonlocal语句只能在被嵌套函数内部进行使用
    2. 访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
    3. 当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作
    4. nonlocal语句的变量列表的变量名不能出现在此函数的参数列表里

    说明3示例:
    def f1():
        v =100
        def f2():
            v = 200
            def f3():
                nonlocal v
                v += 1 # 此时只对f2的v进行操作
            f3()
        f2()

练习:
  1. 创建一个列表L = []
     写一个函数 input_number读取数据放入列表L中
    程序如下:
      L = []
      def input_number():
          # 此处自己加入代码
          while True:
              i = int(input("请输入数字(-1结束):"))
          # 此处自己完成
      input_number()
      print("您刚才输入的整数值是:", L)

  2. 写一个函数isprime(x) 判断x是否为素数,如果为素数返回True,否则返回False
     测试代码:
     if isprime(5):
         print("5素数")
  3. 写一个函数prime_m2n(m, n) 返回从m开始,到n结束范围内素数的列表,并打印
    L = prime_m2n(10, 20)
    print(L)  # [11, 13, 17, 19]

  4. 写一个函数primes(n), 返回小于n的所有的素数的列表.
     L = primes(10)
     print(L)  # [2, 3, 5, 7]

猜你喜欢

转载自blog.csdn.net/Jason_Edison/article/details/88880236