Python函数2

1、函数的基本类型

2、全局变量和局部变量

  • 局部变量 就是在函数内部定义的变量(作用域仅仅在函数内部);
  • 不同的函数可以定义相同的局部变量,互不影响。
  • 作用:为了临时的保存数据,需要在函数中定义来进行存储
# 这里的name就是局部变量
def printInfo():name='hubert'print(name)pass
def TestMethod():name='刘德华'print(name)pass
TestMethod()
printInfo()


全局变量:与局部变量的区别就是作用域的不同;

# 全局变量
pro='计算机技术'  # 这是一个全局变量
name='ALEX'  # 当全局变量和局部变量相同的时候,程序会优先执行函数内部定义的局部变量(强龙不压地头蛇)
def printInfo():name='hubert'print(name,pro)pass
def TestMethod():# name='刘德华'print(name,pro)pass
TestMethod()
printInfo()

修改全局变量

如果在函数的内部想要修改全局变量,必须用global先进行声明。

# 修改全局变量
pro='计算机技术'  # 这是一个全局变量
name='ALEX'  # 当全局变量和局部变量相同的时候,程序会优先执行函数内部定义的局部变量(强龙不压地头蛇)
def printInfo():name='hubert'print(name,pro)pass
def TestMethod():# name='刘德华'print(name,pro)pass
def changeGlobal():'''想要修改全局变量:return:'''# pro='信息管理与信息系统'  # 局部变量,无法修改全局变量,需要global先定义一下global propro = '信息管理与信息系统'pass
changeGlobal()
print(pro)
TestMethod()
printInfo()


3、函数参数的引用传值

在python中,值是靠引用来传递来的,可以用id()查看一个对象的引用是否相同,id是值保存在内存中那块内存地址的标识。

a=1
print(id(a))
a=2
print(id(a))  # 撕掉1上面的变量a标签,然后贴到2上面(变量本身并不传递信息)


传递的是对象的引用,而不是值

a=1
def func(x):print('x的地址:{}'.format(id(x)))pass
print('a的地址:{}'.format(id(a)))
func(a)


# 可变类型
li=[]
def testC(parms):li.append([1,2,3,4,5])print(id(parms))print('内部的变量对象{}'.format(parms))pass
print(id(li))
testC(li)
print('外部的变量对象{}'.format(li))

小节:

  • 在python中,万物皆对象,,在函数调用的时候,实参传递的就是对象的引用;
  • 了解了原理,就可以更好地把控在函数内部处理是否会影响到函数内部数据的变换;
  • 参数得传递就是通过对象引用来完成的。

4、匿名函数(没有名字的函数)

  • python中使用lambda关键字创建匿名函数,所谓匿名即这个函数没有名字不用def关键字创建标准的函数。
  • 格式 lambda 参数1,参数2,参数3: 执行代码语句
  • 为了满足简单的逻辑,复杂逻辑还是需要def来定义
test=lambda x,y:x+y
print(test(1,3))
print(test(2,4))
# print(test(2,4,6)) # 报错,多了一个参数

# 找最大值
greater = (lambda x, y: x if x > y else y)
print(greater(3, 5))
print(greater(6, 2))
rs = (lambda x, y: x if x > y else y)(10,20) # 直接调用
print(rs)

5、递归函数

  • 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
  • 递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,只到到达最大递归深度报错。

求阶乘 5! = 54321

# 求阶乘
# 1、普通方法,循环来实现
def jiecheng(n):result=1for i in range(1,n+1):result*=ipassreturn result
print(jiecheng(5))# 2、递归方法
def factorial(n):if n == 1:return 1return n * factorial(n-1)
print(factorial(5))


优点:

  • 递归使代码看起来更加整洁、优雅
  • 可以用递归将复杂任务分解成更简单的子问题
  • 使用递归比使用一些嵌套迭代更容易

缺点:

  • 递归逻辑很难调试,递归条件处理不好容易造成程序无法结束,直到达到最大递归错误。
  • 递归占用大量内存,耗费计算机资源。

案例:模拟实现树形结构的遍历(文件的搜索)

import os # 引用文件操作模块
def findFile(file_Path):listRs=os.listdir(file_Path) # 获得该路径下的所有文件夹for fileItem in listRs:full_path=os.path.join(file_Path,fileItem)  # 获得完整的文件路径if os.path.isdir(full_path):  # 判断是否是文件夹(不是文件就是文件夹)findFile(full_path)  # 如果是文件夹,再次递归else:print(fileItem)passpasselse:returnpass#调用搜索文件对象
findFile('H:\python_learning')

求知讲堂python+人工智能day5相关推荐

  1. 求知讲堂python+人工智能 99天完整版 学完可就业+某某教程Python 100例————作业(持续更新)

    个人答案仅供参考,不喜勿喷. 求知讲堂python+人工智能 99天完整版 学完可就业 1.day1 1. import random index=1 error=0 age=random.randi ...

  2. 求知讲堂python+人工智能day4

    python函数 基本上所有的高级语言都支持函数,Python也不例外.Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用.函数就是最基本的一种代码抽象的方式. 1.函数 ...

  3. 求知讲堂python+人工智能day8

    面向对象基础(中) 相信大家都有这样的经历:我们进入一家商店的时候经常会听到一个喇叭播放说,欢迎光临,当我们出商店的时候也会提醒说欢迎光临,现实中这是通过感应器触发的,但是在程序中我们是如何触发实现呢 ...

  4. 求知讲堂python+人工智能day11

    文件操作与模块 文件操作是很常见的功能,我们python当然也支持,python自带文件的基本操作方法,但是借助os等模块更加方便快捷.在学习过程中,我们时不时会用到模块,这里也将详细讲解模块.常用模 ...

  5. 求知讲堂python+人工智能day6

    Python内置函数 任何一门编程语言的核心操作都是操作内存中的数据,但内存中的数据又是通过编程语言的API来实现,所谓的API,就是系统提供给我们的函数,有一种函数是系统预先定义的函数,也就是我们安 ...

  6. 求知讲堂python+人工智能day7

    python面向对象基础(上) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 1.面向对象 ...

  7. 如何学习python+人工智能

    做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了 ...

  8. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

  9. 哈佛大学(2020)《CS50 Python人工智能入门》课程资料下载

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本课程探讨现代人工智能基础上的概念和算法,深入探讨游戏引擎.手写识别和机器 ...

最新文章

  1. julia有 pytorch包吗_有了Julia语言,深度学习框架从此不需要计算图
  2. 掌握 Angular2 的表单 - Angular2 系列 (4)
  3. 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...
  4. 查看mysql SQL物理读_Oracle查看逻辑读、物理读资源占用排行的SQL语句
  5. How to use external classes and PHP files in Laravel Controller?
  6. TP-Link路由器设置上网知识笔记
  7. /etc/network/interfaces
  8. 组装一台计算机 java_如何在同一台计算机上安装多个Java版本
  9. 计算机考研英语什么时候考试,计算机考研:早期复习三大注意事项
  10. “strcpy” 模拟的实现
  11. LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)
  12. html动态背景个人引导页,Web前端动态背景特效合集
  13. VirtualBox成功安装Ubuntu18.04设置共享文件夹总结
  14. 初学者零基础如何快速入门学习平面设计
  15. 《OpenDRIVE1.6规格文档》3
  16. Python爬虫技巧一之设置ADSL拨号服务器代理
  17. KB: 如果通过API读取黑莓程序jad文件里面的属性
  18. i5 12600k核显相当于什么显卡
  19. 企业系统之间数据同步处理
  20. 宏狗、圣天狗、Rockey6、HASP加密锁性能体验与分析

热门文章

  1. python太阳代码_利用python计算太阳天顶角、方位角、高度角
  2. Linux学习笔记(自用)
  3. 迟到的总结(三)--springmvc的系统学习之数据的处理,乱码及restful
  4. 【智慧城市】材质调整-C4D和UE5的模型和材质如何统一
  5. 【Java项目实战】在线音乐播放器(从需求到产品完整解析)
  6. 美国计算机科学本科申请条件,申请美国计算机专业需要达到哪些要求
  7. [论文阅读]Functional Dependencies for Graphs 阅读笔记
  8. halcon 圆点标定板相关算法说明及使用方法
  9. [转]UDP(udp通信、广播、组播),本地套接字
  10. JavaScript函数及应用