ql的python学习之路-day8
前言:本节主要学习的是函数的全局变量和局部变量以及递归
一、全局变量和局部变量
定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效。
局部变量只在函数里生效,这个函数就叫做这个变量的作用域。
在函数里直接修改全局变量的类型是字典、列表、集合以及类,数字和字符串类型的要加上global关键字才能修改。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
hobby = 'sing'
def change_name(name):
global hobby#global关键字,在函数里修改全局变量
hobby = 'play'
print('before name', name)
name = 'qinlang'#局部变量只在函数里生效,这个函数就是这个变量的作用域。
age = 3#出了这个函数就找不到
print('after name', name)
name = 'qinjiaxi'
change_name(name)
print(name)
#print(age)#报错
print(hobby)
二、递归
递归的定义:在函数的内部可以调用函数;如果一个函数在内部调用自己本身,这个函数就是递归函数。
递归特性:
1.必须要有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少(或者说成:问题规模每递归一次都应该比上一次问题规模有所减少)
3.递归效率不高,递归层数过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数的调用,栈就会增加一层栈帧,每当函数返回,栈就减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
def calc(n):
print(n+1)
return calc(n+1)
calc(0)#递归层数最多只有999层,然后报错,这是一个保护机制 #用递归求一个数除2直到不能返回为止
def calc1(n):
print(n)
if n//2 > 0:
return calc1(n//2)
print('--->', n)#最后执行打印,如果不明白可以断点调试
calc1(10)
calc1()函数运行结果:
10
5
2
1
---> 1
三、高阶函数
变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以接受一个函数作为参数,这种函数就叫做高阶函数。
注:高阶函数基本运用不到,只做了解。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
#高阶函数就是把一个函数作为另外一个函数的参数使用
def add(a, b ,c):
return c(a) + c(b)
d = add(2,-6,abs)
print(d)
ql的python学习之路-day8的更多相关文章
- ql的python学习之路-day15
前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...
- ql的python学习之路-day14
前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳 2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...
- ql的python学习之路-day13
前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...
- ql的python学习之路-day12
前言:这一节主要学习json和pickle 背景: 相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级:当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪, ...
- ql的python学习之路-day11
前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...
- ql的python学习之路-day10
前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...
- ql的python学习之路-day9
前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...
- ql的python学习之路-day7
函数与函数式编程 一.编程模式分为三种: 1.面向对象编程:类----->关键字class 2.面向过程编程:过程----->关键字def,没有return 3.函数式编程:函数----- ...
- ql的python学习之路-day6
字节编码: 这一节主要学习的是各种编码模式的相互转换,另外插两句话,今天的心情不是特别好,又没控制好自己的情绪,以后要心存阳光,好好的对待生活和身边的人. 废话不多说了直接贴码: #!/usr/bin ...
随机推荐
- keras API的使用,神经网络层,优化器,损失函数,查看模型层数,compile和fit训练
layers介绍 Flatten和Dense介绍 优化器 损失函数 compile用法 第二个是onehot编码 模型训练 model.fit 两种创建模型的方法 from tensorflow.p ...
- 理解RESTful API
近日妹子向我求助RESTful API到底是个什么东西.原因是她们公司一个新启动的项目因为RESTful API起了争执.服务端同学坚持要用RESTful API,而前端同学则认为服务端用RESTfu ...
- Ansible playbook Vault 加密
Ansible playbook Vault 加密详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务 ...
- StringBuilder、StringBuffer分析比较
StringBuilder.StringBuffer源码分析 StringBuilder源码分析 类结构 public final class StringBuilder extends Abstra ...
- MySQL5.7 并行复制
MySQL5.7 并行复制 1.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->I ...
- solr7.4创建core,导入MySQL数据,中文分词
#solr版本:7.4.0 一.新建Core 进入安装目录下得server/solr/,创建一个文件夹,如:new_core 拷贝server/solr/configsets/_default/con ...
- 蚂蚁金服合作的RISE实验室到底有多牛?
近日,蚂蚁金服与美国加州伯克利大学近期新成立的RISE实验室达成合作意向.RISE实验室的前身是著名伯克利AMP实验室,主导研发了当今大数据计算领域最前沿的开源系统:Apache Spark.Apac ...
- Java9新特性系列(module&maven&starter)
上篇已经深入分析了Java9中的模块化,有读者又提到了module与starter是什么关系?本篇将进行分析. 首先先回顾下module与maven/gradle的关系: module与maven/g ...
- idea 将项目托管到 Git 报错:Can't finish Gitee sharing process
在idea中报: Can't finish Gitee sharing processSuccssully created project 'dmp' on Gitee. but initial co ...
- 清北学堂—2020.3NOIP数学精讲营—Day 1 morning 重点笔记
qbxt Day 1 morning 重点笔记 --2020.3.8 济南 主讲:钟皓曦 1 正数%负数==正数 负数%正数==负数 负数%负数==负数 a%b的答案的符号取决于a的符号. 2 快速幂 ...