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

一、全局变量和局部变量

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

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

在函数里直接修改全局变量的类型是字典、列表、集合以及类,数字和字符串类型的要加上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)

ql的python学习之路-day8的更多相关文章

  1. ql的python学习之路-day15

    前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...

  2. ql的python学习之路-day14

    前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳  2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...

  3. ql的python学习之路-day13

    前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...

  4. ql的python学习之路-day12

    前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...

  5. ql的python学习之路-day11

    前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...

  6. ql的python学习之路-day10

    前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...

  7. ql的python学习之路-day9

    前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...

  8. ql的python学习之路-day7

    函数与函数式编程 一.编程模式分为三种: 1.面向对象编程:类----->关键字class 2.面向过程编程:过程----->关键字def,没有return 3.函数式编程:函数----- ...

  9. ql的python学习之路-day6

    字节编码: 这一节主要学习的是各种编码模式的相互转换,另外插两句话,今天的心情不是特别好,又没控制好自己的情绪,以后要心存阳光,好好的对待生活和身边的人. 废话不多说了直接贴码: #!/usr/bin ...

随机推荐

  1. 详细的JavaScript知识梳理和经典的一百个例题,让你掌握JavaScript

    这里先做一下JavaScript知识点的梳理,具体的可领取资料 JavaScript语法: js语法.png DOM操作: DOM操作.png 数据类型 面向对象 继承 闭包 插件 作用域 跨域 原型 ...

  2. 关于flex弹性布局

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

  3. 在java中构建高效的结果缓存

    文章目录 使用HashMap 使用ConcurrentHashMap FutureTask 在java中构建高效的结果缓存 缓存是现代应用服务器中非常常用的组件.除了第三方缓存以外,我们通常也需要在j ...

  4. MYSQL 索引汇总

    1.MySQL索引类型 先分以下类,MYQL有两大类索引:聚集索引和非聚集索引(只考虑mysql innodb) 聚集索引:在有主键的情况下,主键为聚集索引,其他都是非聚集索引             ...

  5. [译] React 16.3(.0-alpha) 新特性

    原文地址:What's new in React 16.3(.0-alpha) 原文作者:Bartosz Szczeciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/ ...

  6. USACO Training Section 1.1黑色星期五Friday the Thirteenth

    题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...

  7. FZU 1894 志愿者选拔

    Problem 1894 志愿者选拔 Accept: 2308 Submit: 7003 Time Limit: 1500 mSec Memory Limit : 32768 KB Problem D ...

  8. POJ - 2387 Til the Cows Come Home (最短路入门)

    Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before ...

  9. Centos7 team 绑定多网卡

    1.nmcli connection show 查看所有的网络连接 nmcli connection show 接下来我们要使用 ens37 ens38 两个网卡绑定 , 绑定的网卡取名: agg-e ...

  10. 学习笔记之MySQL的使用

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文 ...