zoukankan      html  css  js  c++  java
  • ql的python学习之路-day8

    前言:本节主要学习的是函数的全局变量和局部变量以及递归

    一、全局变量和局部变量

    定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效。

    局部变量只在函数里生效,这个函数就叫做这个变量的作用域。

    在函数里直接修改全局变量的类型是字典、列表、集合以及类,数字和字符串类型的要加上global关键字才能修改。

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:qinjiaxi
     4 hobby = 'sing'
     5 def change_name(name):
     6     global hobby#global关键字,在函数里修改全局变量
     7     hobby = 'play'
     8     print('before name', name)
     9     name = 'qinlang'#局部变量只在函数里生效,这个函数就是这个变量的作用域。
    10     age = 3#出了这个函数就找不到
    11     print('after name', name)
    12 name = 'qinjiaxi'
    13 change_name(name)
    14 print(name)
    15 #print(age)#报错
    16 print(hobby)

     二、递归

    递归的定义:在函数的内部可以调用函数;如果一个函数在内部调用自己本身,这个函数就是递归函数。

    递归特性:

    1.必须要有一个明确的结束条件

    2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少(或者说成:问题规模每递归一次都应该比上一次问题规模有所减少)

    3.递归效率不高,递归层数过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数的调用,栈就会增加一层栈帧,每当函数返回,栈就减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。)

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:qinjiaxi
     4 def calc(n):
     5     print(n+1)
     6     return calc(n+1)
     7 calc(0)#递归层数最多只有999层,然后报错,这是一个保护机制
     8 
     9 #用递归求一个数除2直到不能返回为止
    10 def calc1(n):
    11     print(n)
    12     if n//2 > 0:
    13         return calc1(n//2)
    14     print('--->', n)#最后执行打印,如果不明白可以断点调试
    15 calc1(10)

    calc1()函数运行结果:

    1 10
    2 5
    3 2
    4 1
    5 ---> 1

     三、高阶函数

    变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以接受一个函数作为参数,这种函数就叫做高阶函数。

    注:高阶函数基本运用不到,只做了解。

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 # Author:qinjiaxi
    4 #高阶函数就是把一个函数作为另外一个函数的参数使用
    5 def add(a, b ,c):
    6     return c(a) + c(b)
    7 d = add(2,-6,abs)
    8 print(d)
  • 相关阅读:
    C struct的内存对齐
    C++ 继承、函数重载
    C++ 操作符重载
    C中入栈顺序和运算顺序有关系吗?
    Java 关于finally、static
    C++ 类的复制控制
    Linux中vi的使用
    C++ 类的头文件、实现、使用
    (web)个人项目(挖宝网)
    MariaDB使用enum和set
  • 原文地址:https://www.cnblogs.com/qinlangsky/p/9484535.html
Copyright © 2011-2022 走看看