Python基础10-函数基础
目录
函数的定义
函数的返回值
函数的参数
参数的传递
参数的默认值
可变长参数
全局变量与局部变量
函数嵌套定义
风湿理论——函数即变量
函数的定义
定义函数的关键字def。函数名,本例函数名是test。小括号里面是参数。冒号后缩进的代码块是函数内容。函数的注释用""",使用双引号是为了规范。return返回值。pass说明函数结束,其实pass不加也没问题,但是为了规范还是写上吧。
Python解释器逐行解释,如果函数test定义一次以后,再定义一个函数test,那么就test就以最后一次定义的为准。
def test(x):"""function test:param x: 整数:return: 返回x的立方值"""y = x ** 3return ypassdef test():"""function test这就重新定义了函数test:return: 9527"""return 9527passval = test()
print(val)
# 9527
函数的返回值
Python的返回值和Java一样也是只有一个返回值。因为Python有了元组这个容器类型,所以多个返回值可以被转换为一个元组返回。看起来可以返回多个值,而且实际上你也可以这么用。
def func01():"""如果没有返回值,那么返回的是None:return: None"""msg = "func01"print(msg)def func02():"""返回一个值:return: msg"""msg = "func02"print(msg)return msgdef func03():"""如果返回多个值,那么返回的是这多个值组成的元组。实际上是返回一个值,元组。但是你可以用多个变量来接收这个元组的元素。:return: """msg = "func03"print(msg)return msg, [11, 22, 33], 28, "Kevin"t1 = func01()
t2 = func02()
t3 = func03()
val, li, num, name = func03()
print(t1)
print(t2)
print(t3)
print(val, li, num, name)
# None
# func02
# ('func03', [11, 22, 33], 28, 'Kevin')
# func03 [11, 22, 33] 28 Kevin
函数的参数
参数的传递
函数的参数分为实参和形参。
func04的参数xyz都是形参。形参只在函数被调用时分配内存空间,函数调用结束以后内存空间就被释放。
函数传参可以传位置参数,就是按照形参顺序传参,不能多也不能少。
函数传参可以传关键字参数,就是形参名=实参,顺序无所谓,不能多也不能少。
位置参数和关键字参数可以混搭使用。位置参数必须在关键字参数前面,传参总个数不能多也不能少。
def func04(x, y, z):print(x, y, z, sep=",")return# 位置参数,按照顺序传参,不能多也不能少
func04(11, 22, 33)
# 关键字参数,按照关键字传参,顺序无所谓,不能多也不能少
func04(z=33, x=11, y=22)
# 位置参数和关键字参数可以混用
# 位置参数 必须在 关键字参数 前面,不能多也不能少
func04(11, 22, z=33)
参数的默认值
函数的参数可以有默认值。非默认值参数必须放在默认值参数前面。调用时,非默认参数必须传值,默认值参数可以不传值。参数不用默认值时,用关键字参数指定哪个参数不用默认值。
def func05(app, db="mysql", os="linux"):"""非默认值参数放在默认值参数前面。默认数据库是mysql,默认操作系统是linux。:param app: 应用:param db: 数据库:param os: 操作系统:return: None"""print("%(app)s, %(db)s, %(os)s." % ({"app": app, "db": db, "os": os}))pass# 默认值参数不用传输
# discuzz, mysql, linux.
func05("discuzz")# 参数不用默认值时,最好用关键字参数,指定哪个参数不是默认的值
# httpd, mysql, freebsd.
func05("httpd", os="freebsd")
可变长参数
传入多个参数,*对应列表,**对应字典。
函数参数加上*args,函数就可以接收多个位置参数,按照Python规则*args就这么写。*args接收位置参数,除去前面的位置参数,多出来的被处理成元组args。如果传入的是列表,那么列表就是元组args的一个元素。如果传入的*列表,那么就把列表的元素处理成元组args的元素。
def func06(x, y, *args):"""*args接收位置参数,将多个参数处理成元组。此时,函数可以接收多个参数,出去前面的位置参数,后面的多个参数处理成元组如果传入的是个列表,那么这个列表就是元组args的一个元素。如果传入的列表元素都变成args的元素,那么传参时需要加*。*对应列表:param x::param y::param args::return:"""print(x)print(y)print(args)pass# 1
# 2
# ()
func06(1, 2)# 1
# 2
# (3, 4, 5, 6)
func06(1, 2, 3, 4, 5, 6)# 1
# 2
# ([3, 4, 5, 6],)
func06(1, 2, [3, 4, 5, 6])1
2
(3, 4, 5, 6)
func06(1, 2, *[3, 4, 5, 6])
函数加上**kwargs,函数就可以接收多个关键字参数,按照Python规则就这么写。接收的多个关键字参数被处理成字典kwargs。如果要传入字典的话,字典前面加上**。
def func07(x, y, **kwargs):"""*kwargs接收关键字参数,将多个关键字参数处理成字典。此时,函数可以接收多个关键字参数,除去前面的位置参数,后面的多个关键字参数被处理成字典如果传入的是字典,需要在字典前面加**:param x::param y::param kwargs::return:"""print(x, y)print(kwargs, kwargs.get("k1"))pass# 1 2
# {'k1': 'v1', 'k2': 'v2'} v1
func07(1, 2, k1="v1", k2="v2")
# 1 2
# {'k1': 'v1', 'k2': 'v2'} v1
func07(1, 2, **{"k1": "v1", "k2": "v2"})
如果函数参数加上了*args和**kwargs,那么这个函数就可以接收任意的参数了。这样有利于未来的扩展。接收的参数怎么处理是函数实现的问题。
def func08(x, y, *args, **kwargs):"""现在这个函数牛逼了:param x: :param y: :param args: :param kwargs: :return: """print(x, y)print(args)print(kwargs, kwargs.get("k1"))pass# 1 2
# (3, 4, 5, 6)
# {} None
func08(1, 2, 3, 4, 5, 6)# 1 2
# ()
# {'a': 5, 'b': 9} None
func08(1, 2, a=5, b=9)# 1 2
# (3, 4, 11, 22, 33, 44)
# {'k1': 'v1', 'k2': 'v2', 'k3': 9527} v1
func08(1, 2, 3, 4, *[11, 22], *[33, 44], **{"k1": "v1", "k2": "v2"}, k3=9527)
全局变量与局部变量
全局变量作用于全局。局部变量作用于代码块。执行函数时,先找局部变量,局部变量找不到再找全局变量。如果要直接访问全局变量,那么要用global声明。Python编程规范,全局变量全部大写,局部变量全部小写,这样以后就不会出现变量名重合的情况了。
name = "Kevin"
name1 = "Tom"def change_name():global namename = "Alice"name1 = "Jerry"print(name, name1)pass# Alice Jerry
# Alice Tom
change_name()
print(name, name1)
函数嵌套定义
函数里面还可以再定义函数。如果出现global,那么global变量就是全局变量。这段代码func12将全局变量name的值从Able改成了Charlie。
name = "Able"def func11():name = "Baker"def func12():global namename = "Charlie"passfunc12()print(name)passprint(name)
func11()
print(name)
函数里global只的就是全局变量,而另一个关键字nonlocal指的是上一层的变量。这段代码,func12里面将func11的局部变量name的值从Baker改为Charlie。
name = "Able"def func11():name = "Baker"def func12():nonlocal namename = "Charlie"passfunc12()print(name)passprint(name)
func11()
print(name)
# Able
# Charlie
# Able
风湿理论——函数即变量
Python的风湿理论?靠,什么鬼名字。这里的意思是函数都可以看成是函数名的字符串。只要在这个字符串里面的变量或者函数曾经出现在内存中,就可以找到,继续执行不会报错。
这个例子中func14虽然定义在func13之后,但是根据风湿理论,程序逐行执行,func13和func14都会先作为变量保存在内存中。调用func13时,执行func13代码块,遇到调用func14,因为func14已经存在了,找得到,所以不会报错。
def func13():print("from func13")func14()passdef func14():print("from func14")pass# from func13
# from func14
func13()
相关文章:

Milking Cows 挤牛奶
1.2.1 Milking Cows 挤牛奶 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 554 Solved: 108[Submit][Status][Forum]Description 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶ÿ…

用eclipse玩转Python,让习惯java开发的童鞋拥有一个更爽的开发体验
#0>>>>>>>预准备工作:(a标签貌似不能用,,只好比较lowbi的直接放地址) IDEeclipse下载地址:http://ftp.yz.yamagata-u.ac.jp/pub/eclipse/technology/epp/downloads/release/neon/3/eclipse-jee-neon-3-win32…

适合计算机应用的班群名称,班级同学群名字大全
很多人现在都是一个班级建一个群,以便大家沟通交流,有什么事大家群里一说很方便,没事还可以吹吹牛B策策谈,那么同学班级群用什么样的名字好呢,在此起名网为大家收集整理了班级同学群名字大全。来看看吧。最新班级同学群…

Mac 安装多个版本jdk
JDK默认安装路径为/Library/Java/JavaVirtualMachines 多版本安装后效果为: 设置 1.执行以下命令 cd ~open -e .bash_profile #打开.bash_profile文件注:假如.bash_profile文件不存在执行下面命令新建文件 cd ~ touch .bash_profile #新建.bash_profile文件 ls -a #查看文件是…

Python基础11-函数式编程与内置函数
目录 函数即变量 lambda关键字定义匿名函数 高阶函数 内置函数map 内置函数filter 内置函数reduce 内置函数看文档 函数即变量 书接上回,Python里面,函数就是变量,可以被当成普通变量一样作为返回值,调用。 def foo():pr…

学术-数学:哥德巴赫猜想
ylbtech-学术-数学:哥德巴赫猜想哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,…

wk_10.md
Python检测和处理异常 try-except语句 try-except语句定义了进行异常监控的一段代码,并且提供了异常处理的机制,下面是使用的语法: try:# 可能抛出异常的语句,会一直执行,直到抛出异常。 except:# 异常处理额语句&…

计算机网络实验五,计算机网络(实验五).docx
计算机网络(实验五).docx实验五一、实验内容在这个实验室里,我们将探讨ICMP 协议得几个方面由 Ping 项目产生得P 信息Tracer ute程序生成得C消息关于 CM 信息得格式与内容。在攻击这个实验室之前,我们鼓励您在第4 3 节中回顾 CMP 得内容 text1. 我们在微软 Win o s …

mac android 真机调试
1.已经安装好Androidstudio或者eclipse 2.下载配置好Android Sdk等 3.将android手机通过USB数据线连接Mac,打开终端输入system_profiler SPUSBDataType 4.找到对应设备的Product ID,并且复制出来 5.终端输入vi ~/.android/adb_usb.ini ,进入vi 6.输入i …

Python基础12-常用的内置函数
abs 取绝对值,数学上的绝对值 print(abs(-1)) all 接收一个可迭代参数。如果里面有一个False的元素,那么返回值就是False,否则返回True,类似逻辑“与”。如果可迭代参数本身为空,那么返回True。需要记住什么是Fals…

Andorid自定义attr的各种坑
本文来自网易云社区作者:孙有军在开发Andorid应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样就可以在XML中配置我们想要的属性值,以下就…

JS的Dom树小结
一【DOM树节点】DOM节点分为三大类:元素节点、文本节点、属性节点文本节点、属性节点,为元素节点的两个子节点;通过getElement系列方法,可以去到元素节点。二【查看节点】1、getElementById:通过ID获取唯一的节点&…

高考631能上什么好的计算机学校,2021年高考630分能上什么大学 可以报哪些学校...
高考结束后,最重要的事情就是如何填报志愿,高考630分能上什么大学?高考630分可以读哪些专业等等。小编下面就来为大家分享高考630分能上什么大学,供大家参考!!2021年高考630分能上什么理科大学高校名称专业批次平均分最高分中国科学技术大学…

CV00-01-CV基础理论
目录 CV的level和CV的方向 CV的level CV研究方向 CV应用方向 CV工程方向 CV的路线 CV比较好的会议 CV的平台、框架 认识几个CV的缩写 CV的level和CV的方向 CV的level Low Level,图像的基本操作;比如,图像的变换、像素操作、色彩等…

VC++关于UNICODE版本的开发
关于UNICODE版本的开发 代码转换方案 概述 在VC6.0中,相应的有一些宏来代替ANSI的函数、宏或数据类型,这些宏在ANSI编译条件中处理字符串为单字节,而在UNICODE中处理字符串为双字节,请在编写程序中请使用这些宏。 数据类型 表-1.1…

计算机基础办公软件应用技能,计算机一级计算机基础及 ms office 应用考些什么...
一、计基础知识1.计算机的发展、其应用领域。2.计算机中数据的表示、存储与处理。3.多媒体技术的概念与应用。4.计算机病毒的概念、特征、分类与防治。5.计算机网络的概念、组成和分类;计算机与网络信息安全的概念和防控。6.因特网网络服务的概念、原理和应用。二、操作系统的功…

ffmpeg 编译Android
环境 macOS 10.15.4 NDK 21.3.6528147 ffmpeg 4.2.3 1.执行sudo xcodebuild -license,防止编译的时候找不到一些文件报错 2.下载ffmpeg(4.2.3),解压后进入主目录,修改configure文件,找到 SLIBNAME_WITH_MAJOR$(SLIBNAME).$(LIBMAJOR) LI…

Python基础14-迭代器与生成器
目录 迭代器 官方文档对迭代器的解释 迭代器协议 基于迭代器协议的统一的for循环机制 生成器 官方文档对生成器的解释 生成器函数 生成器表达式 生成器用法举例 利用生成器用单线程实现生产者消费者问题模型 生成器只能遍历一次 迭代器 官方文档对迭代器的解释 Thi…

Android学习笔记进阶九之Matrix对称变换
网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可。 Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y -x对称等等。 1 关于Y轴对称 [java] view plaincopy// 获取资源文件的引用res Resources res…

《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
《计算机与网络应用基础知识1》模拟试卷 (4页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分《计算机与网络应用基础知识1》模拟试卷 一考生注意:1.本试卷共五道大题&…

ios架构篇-1 项目组织架构
关键字:项目组织架构 CocoaPod + 多项目级联 + xib + MVVM ProjectApp 项目app project Vendor 第三方.a、.framework库或源码 Resources 项目静态配置文件 Database 数据库文件夹,如CoreData Component 此项目特定的组件 Base 此项目…

Error 0162 - Setup data integrity check failure after updating BIOS via Thinkvantage
Start the computer and start pressing F1 and get into set up. In setup press F9 for default settings and press F10 for svae and exit. Problem solved. 转载于:https://www.cnblogs.com/gaoshaonian/p/9700130.html

CV00-02-CV基本操作1
目录 数字图像属性 opencv-python环境搭建 基本操作I Read in / Show out,读取、显示图像; Change color,修改颜色; Gamma Correction,伽马校正; Crop,切割; Histogram&…

链式表的按序号查找
本题要求实现一个函数,找到并返回链式表的第K个元素。 函数接口定义: ElementType FindKth( List L, int K );其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToL…

Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)
题意:有n(n<100000)个机器。。。第i个机器最开始有bi(1<bi < 100000)个单位的电量,机器可以储存的电量没有上限,启动后每秒消耗ai(1<ai<100000)个单位的电量,有一个充电器每秒可以充p(1<p<1e9)的电量。求保持所有机器电…

电子计算机的发展与应用教案,川教版信息技术七上第3课《电子计算机的发展与应用》教案1.doc...
川教版信息技术七上第3课《电子计算机的发展与应用》教案1整理双流县中学现代课堂教学分课时教学设计课题第3课 计算机的发展与应用课时1课型新课教学目标知识与能力:了解计算机的产生和发展,了解我国计算机的发展状况,计算机的特点与具体应用…

ios架构篇-2 国际化多语言
关键字:ios,国际化,多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文,包含页面、app名称、系统默认权限弹框(如相机相册权限) 思路:app首次初始设置为系统语言,用户在app内切换语言时发送语言切换通知,刷新所有页面 1.project增加需要支持的…

Python基础15-函数闭包与装饰器
目录 装饰器概念 装饰器的实现 修改被装饰函数的代码(非装饰器实现) 修改被装饰函数的调用方式(非装饰器实现) 装饰器的实现(不完整的实现level1) 装饰器实现的语法糖(不完整的实现level2…

python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到版权问题,此附件没有图片和音乐。请参考链接,手动采集一下ÿ…

iOS技术篇1-CocoaPods
iOS技术篇1-CocoaPods 上一篇: 目录 下一篇:ios技术篇2-CoreData