Python学习之旅(十一)
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学习之旅(十一)的更多相关文章
- 180分钟的python学习之旅
最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习之旅(三十一)
Python基础知识(30):图形界面(Ⅰ) Python支持多种图形界面的第三方库:Tk.wxWidgets.Qt.GTK等等 Tkinter可以满足基本的GUI程序的要求,此次以用Tkinter为 ...
- Python学习之旅(二十一)
Python基础知识(20):错误.调试和测试 一.错误处理 在运行程序的过程中有可能会出错,一般我们会在添加一段代码在可能出错的地方,返回约定的值,就可以知道会不会出错以及出错的原因 1.使用try ...
- python学习笔记-(十一)面向对象进阶&异常处理
上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用). 静态方法 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使 ...
- Python学习【第十一篇】模块(1)
模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保 ...
- python学习之旅:array 转 list
最近学习python,记录学习的点滴. >>> import numpy as np >>> a = np.array([[1,2],[3,4]]) >> ...
- Python学习之旅(三十八)
Python基础知识(37):访问数据库(Ⅱ) 二.MySQL MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MyS ...
随机推荐
- [Chrome插件] SelectJd(京东自营筛选器) v1.0.0 发布
如今京东的商品列表已经没有"自营"筛选了,只有"京东物流"筛选.导致找商品时不方便. 于是我开发了一下Chrome插件--SelectJd(京东自营筛选器). ...
- simHash 简介以及 java 实现
传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.产生的两个签名,如果相等,说明原始内容在一定概 率 下是相等的:如果不相等,除了说明原始内容不相等外 ...
- The module is an Android project without build variants, and cannot be built
导入 安卓项目报错 Error:The module 'app' is an Android project without build variants, and cannot be built. ...
- C#中,重新排列panel中的按钮
https://www.cnblogs.com/hfzsjz/archive/2010/08/13/1799068.html void ArrangeButtons(Panel pn) { , y = ...
- vscode: Visual Studio Code 常用快捷键1
ctrl + pAlt + shift 多行编辑
- ssh连接服务器失败解决记录
故障:db2inst1用户无法通过ssh连接数据库服务器. 但是root用户可以连接,连接后su – db2inst1用户报错: su: cannot set user id: Resource te ...
- socket.timeout: The read operation timed out 更改pip源至国内镜像,显著提升下载速度
出现socket.timeout: The read operation timed out 错误的时候,可能是pip源不稳定,改改试试看! 经常在使用Python的时候需要安装各种模块,而pip ...
- ubuntu 下无损扩展分区
命令扩展: http://www.cnblogs.com/greatfish/p/7347945.html http://www.cnblogs.com/wangxingggg/articles/68 ...
- C# 获取对象 大小 Marshal.SizeOf (sizeof 只能在不安全的上下文中使用)
C# 能否获取一个对象所占内存的大小? 今日,在项目重构的时候忽然想到一个问题,一个类哪些成员的增加,会影响一个类所占内存的大小?C#有没有办法知道一个对象占多少内存呢? 第一个问题:很快想到是类的非 ...
- MySQL 大表数据定期归档
数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档. 1 - 创建一个新表,表结构和索引与旧表一模一样 create table table_news lik ...