Python基础知识(10):函数(Ⅱ)

一、全局变量和局部变量

局部变量:在函数内定义的变量,在函数内使用

全局变量:在函数外定义的变量,在程序任何地方都可以使用

1、全局变量与局部变量同名

这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”

x=1
#x:全局变量
def test():
global x
x=5
#x:局部变量
print(x)
return x test()

结果:1

2、一个函数中的内层函数调用外层函数中的变量

内层函数调用外层函数中的变量要在内层函数中加一句“nonlocal 变量”

def demo1():
num=2
def demo2():
nonlocal num
num+=1 return demo2()
demo1() demo1()

结果:3

3、全局变量一般不可修改,如果函数中想要修改全局变量要加上“global 变量”语句

如果B函数要调用A函数中的c变量,需要在A函数内部加一句“global c”

x=1
def test1():
global x
global y
y=2
x=x+y
print(x)
return x
def test2():
print(y)
print(x) test1()
test2()

结果:

3
2

二、函数递归

1、一个函数自己调用自己

2、有明确的结束条件:加if判断

3、无穷递归:运行后它会永远运行下去,进而导致程序崩溃

4、理论上所有递归函数都可以写成循环的方式

计算阶乘

#用循环语句
def fact1(num):
result=num
for i in range(1,num):
result *=i
return result print(fact1(3)) #用递归函数
def fact2(n):
if n==1:
return 1
else:
return n*fact2(n-1) print(fact2(3))

结果:6

5、使用递归函数时要防止栈溢出,解决栈溢出的方法是通过尾递归优化

6、匿名函数

用lambda定义,只能有一个表达式,没有函数名

lambda x:x+1等价于def test(x):x+=1 retrun x

(1)可以把匿名函数赋值给一个变量,用该变量调用匿名函数

y=lambda x:x+2
y(1)
结果:3

(2)可以把匿名函数作为返回值返回

Python学习之旅(十一)的更多相关文章

  1. 180分钟的python学习之旅

    最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...

  2. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  3. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  4. Python学习之旅(三十一)

    Python基础知识(30):图形界面(Ⅰ) Python支持多种图形界面的第三方库:Tk.wxWidgets.Qt.GTK等等 Tkinter可以满足基本的GUI程序的要求,此次以用Tkinter为 ...

  5. Python学习之旅(二十一)

    Python基础知识(20):错误.调试和测试 一.错误处理 在运行程序的过程中有可能会出错,一般我们会在添加一段代码在可能出错的地方,返回约定的值,就可以知道会不会出错以及出错的原因 1.使用try ...

  6. python学习笔记-(十一)面向对象进阶&异常处理

    上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用). 静态方法 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使 ...

  7. Python学习【第十一篇】模块(1)

    模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保 ...

  8. python学习之旅:array 转 list

    最近学习python,记录学习的点滴. >>> import numpy as np >>> a = np.array([[1,2],[3,4]]) >> ...

  9. Python学习之旅(三十八)

    Python基础知识(37):访问数据库(Ⅱ) 二.MySQL MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MyS ...

随机推荐

  1. isPrototypeOf 与 instanceof区别

    1.代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  2. gdb调试常用实用命令和core dump文件的生成(转)

    1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的 ...

  3. Windows中读写ini文件

    .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,来配置应用软件以实现不同用户的要求.配置文件有很多种如ini配置文件,XML ...

  4. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  5. JDBC告警系列(一)The server time zone value 'ÖÐ' is unrecognized or represents more than one time zone.

    一.现象 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents ...

  6. Linux 系统 TCP优化

    这里主要是对<High performance Browser Networking>一书中关于TCP的描述的整理,本书与2013年出版,在书出版后,内核做了一些升级,有可能某些项不再适用 ...

  7. ThreadPoolExcutor 线程池 异常处理 (下篇)

    前言 因为这是之前面试的一个题目,所以印象比较深刻,前几天写了一篇文章:ThreadPoolExcutor 线程池 异常处理 (上篇) 中已经介绍了线程池异常的一些问题以及一步步分析了里面的一些源代码 ...

  8. nrm 安装与npm镜像切换

    家里宽带用的移动的...访问海外镜像是相当慢,npm和maven一个道理,maven可以切换到淘宝镜像或者其他的,那么npm也可以使用国内镜像,这个时候就需要用到nrm来做镜像管理了 首先这是目前本地 ...

  9. JSON.stringify转化报错

    两种方式会导致该错误:1.json格式数据存在循环调用.   举个例子: var obj = { title: '标题'}obj.content = obj;JSON.stringify(obj); ...

  10. Android Studio添加原生库并自动构建

    [时间:2017-09] [状态:Open] [关键词:Android,Android Studio,gradle,native,c,c++,cmake,原生开发,ndk-build] 0 引言 最近 ...