Python还在原地踏步?今天女友程序员教你函数的定义与使用
生活就像是一场戏,人在其中扮演的不过是一个个角色,打工人也好,丈夫也罢,儿子也好,父亲也罢。每个人涂上或淡或浓的脂粉,带着千疮百孔的面具,披挂着久经沙场的盔甲,在舞台上挪移踱步,念词唱戏,时而顺遂,时而踉跄。
当我明白这些道理,我知道这一切还不晚。我告诉自己,热爱生活便是认识到生活的不顺之后依然满怀希望,所以,虽然两肩压着那太行山,我依然能够步履蹒跚。
在我的女友程序员带领下,我也走上了编程的道路,今天就让她带着你们教你函数的定义与使用。
定义函数
- 函数的定义
- 函数的分类
- 函数的创建方法
- 函数的返回return
函数的定义
- 将一件事情的步骤封装在一起并得到最终结果
- 函数名代表了这个函数要做的事情
- 函数体是实现函数功能的流程
- 函数可以帮助我们重复使用功能,通过函数名我们可以知道函数的作用
函数的分类
- 内置函数:print、id、int、max、min、type....等
- 自定义函数:def 创建函数
函数的创建方法
通过关键字def来创建函数,def的作用是实现python中函数的创建
函数定义过程:
def 函数名(参数列表):函数体
# coding:utf-8def say_Hello():print("Hello Python")
函数的调用
函数名+()小括号执行函数
# coding:utf-8# 定义函数
def say_Hello():print("Hello Python")# 执行函数
say_Hello()# 执行结果:Hello Python
函数的返回return
- return-将函数结果返回的关键字
- return只能在函数体内使用
- return支持返回所有的python类型
- 有返回值的函数可以赋值给一个变量
- return也有退出函数的作用
# coding:utf-8def add(a,b):c=a+breturn c
result=add(1,2)
print(result)
# 输出结果:3
函数的参数
- 必传参数
- 默认参数
- 不确定参数
- 参数规则
必传参数
- 函数中定义的参数没有默认值,在调用函数时如果不传入则会报错
- 在定义函数的时候,参数后边没有等号与默认值
- 在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,且顺序与参数的顺序相同,就是必传参数
# coding:utf-8def add(a,b):c=a+breturn c result=add(1,2) print(result) # 输出结果:3
默认参数
- 在定义函数的时候,定义的参数含有默认值,通过赋值语句给他是一个默认值
- 如果默认参数在调用函数的时候传递了新的值,函数将会优先使用后传入的值进行工作
# coding:utf-8def add(a,b=1):c=a+breturn cprint(add(1)) # 输出结果:2print(add(1,3)) # 输出结果:4
不确定参数-可变参数
- 没有固定的参数名和数量(不知道要传的参数名具体是什么)
- *args代表:将无参数的值合并成元组
- **kwargs代表:将有参数与默认值的赋值语句合并成字典
# coding:utf-8def test_args(*args,**kwargs):print(args,type(args))print(kwargs,type(kwargs))
test_args(1,2,3,4,5,6,name="zhangsan",age=22,top=175)
# 输出结果:
# (1, 2, 3, 4, 5, 6) <class 'tuple'>
# {'name': 'zhangsan', 'age': 22, 'top': 175} <class 'dict'>
# coding:utf-8#参数是变量传递时,需要在变量前面加上*和**来区分传递的是元组还是字典,否则一律按元组*args处理
def test_args(*args,**kwargs):print(args,type(args))print(kwargs,type(kwargs))a=('python','java')
b={"name":"zhangsan","age":22,"top":175}test_args(a,b)
# 输出结果:
# (('python', 'java'), {'name': 'zhangsan', 'age': 22, 'top': 175}) <class 'tuple'>
# {} <class 'dict'>test_args(*a,**b)
# 输出结果:
# ('python', 'java') <class 'tuple'>
# {'name': 'zhangsan', 'age': 22, 'top': 175} <class 'dict'>
参数规则
- 参数的定义从左到右依次是:必传参数、默认参数、可变元组参数、可变字典参数
- 函数的参数传递非常灵活
- 必传参数与默认参数的传参多样化
- 传递的参数与函数定义时的参数顺序不一致时,使用赋值语句的方式传参
# coding:utf-8def test(a,b=1,*args):print(a,b,args)s=(1,2)
test(1,2,*s) #1 2 (1, 2)# test(a=1,b=2,*s)
'''
Traceback (most recent call last):File "D:/WorkSpace/Python_Study/test01.py", line 8, in <module>test(a=1,b=2,*s)
TypeError: test() got multiple values for argument 'a'
'''
# 报错原因:当我们必选参数、默认参数与可选的元组类型参数在一起的时候,如果需要采取赋值的形式传参,则在定义函数的时候需要将可变的元组参数放在第一位,之后是必传、默认参数;这是一个特例!!!
def test2(*args,a,b=1):print(a,b,args)
test2(a=1,b=2,*s) #1 2 (1, 2)
# coding:utf-8def test(a,b=1,**kwargs):print(a,b,kwargs)
test(1,2,name="zhangsan") # 1 2 {'name': 'zhangsan'}
test(a=1,b=2,name="zhangsan") # 1 2 {'name': 'zhangsan'}
test(name="zhangsan",age=33,b=2,a=1) # 1 2 {'name': 'zhangsan', 'age': 33}
函数的参数类型
- 参数类型的定义在python3.7之后可用
- 函数不会对参数类型进行验证,只是看的作用
- 函数的参数类型具体是什么,还得看方法中对参数的操作
全局变量与局部变量
- 全局变量
- 局部变量
- global
全局变量
函数体内对全局变量只能读取,不能修改
# coding:utf-8name="张三"
age=22
def test():name="李四"print(name)print(age)
test() #李四 22
print(name) #张三
局部变量
局部变量,无法在函数体外使用
# coding:utf-8def test():name="李四"print(name) #报错
global
- 将全局变量可以在函数体内进行修改
- global只支持str,int,float,tuple,bool,None类型。
- 对于list,dict不需要global声明即可应用自带方法在函数体内修改。
- 不建议使用global对全局变量进行修改
# coding:utf-8name="张三"
age=22
source={"数学":"100","英语":99,"语文":80}
like=["足球","篮球","乒乓球"]
drink=("雪碧","可乐")
eat={"汉堡","薯条"}def test():global name,agename="zhangsan"age=18source["英语"]=60like[2]="羽毛球"# drink[0]="百事" 元组不可变,报错eat.update("鸡翅")test()
print("%s,%s,%s,%s,%s,%s"%(name,age,source,like,drink,eat))
# 输出结果:zhangsan,18,{'数学': '100', '英语': 60, '语文': 80},['足球', '篮球', '羽毛球'],('雪碧', '可乐'),{'薯条', '翅', '汉堡', '鸡'}
递归函数
- 递归是一种常见的数学和编程概念。它意味着函数调用自身。这样做的好处是可以循环访问数据以达成结果,类似while和for循环
- 通过return返回def()自身,即可实现递归效果
# coding:utf-8count=0def test():global countif count<=5:count +=1return test()else:print("当前计数为:{}".format(count))
test()
# 输出结果为:当前计数为:6
匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- 自带return
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# coding:utf-8f=lambda x,y:x+y
print(f(1,2)) #3user=[{"name":"zhangsan"},{"name":"lisi"},{"name":"wangwu"}]user.sort(key=lambda x:x["name"])
print(user) #[{'name': 'lisi'}, {'name': 'wangwu'}, {'name': 'zhangsan'}]
Python还在原地踏步?今天女友程序员教你函数的定义与使用相关推荐
- python中国地图程序设计_神级程序员教你用Python如何画一个中国地图!(好好玩)...
为什么是Python 先来聊聊为什么做数据分析一定要用 Python 或 R 语言.编程语言这么多种, Java , PHP 都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用 Python ...
- 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...
- 程序员工作压力大,为什么还这么多人想做程序员?是因为喜欢吗?
最近过年遇到很多亲戚和朋友,不知道大家的身边是怎样的,阿粉身边的亲戚朋友从事计算机相关的还是挺少的,很多还是从事一些传统行业. 最近跟一个亲戚聊天的时候就聊到网上对程序员的一些刻板影响,什么格子衫呀, ...
- 10开发Python老程序员教你学习Python的的几大秘诀
Python 是一门优雅而又不失实用的语言,它语法简单很容易学会,又具有极高的可读性和灵活性.在知乎上 Python 是受关注最多的编程语言.很遗憾在我初学的时候没有知乎这样的平台提供这么多的资源,甚 ...
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...
- 微商成功神器,python程序员教你,一键分析微信好友近期所有信息
其他精彩内容:https://blog.csdn.net/weixin_45400881/article/details/95754294 几千个好友,怎么统计 相信做微商的微信好友都会很多,多到很多 ...
- python开发程序知道微信好友是否已读信息吗_微商成功神器,python程序员教你,一键分析微信好友近期所有信息...
好友太多怎么保活 相信做微商的微信好友都会很多,多到很多都成了"僵尸"好友,但是想要成为一个成功的微商,要有两点: 1.好友多,基数决定高度 2."活的"好友多 ...
- python相关职业-浅谈Python全栈开发工程师,让程序员都眼红的职业!
原标题:浅谈Python全栈开发工程师,让程序员都眼红的职业! Python Python 的排名从去年开始就借助人工智能与独特的魅力持续上升,现在它已经成为了第一名. 与其它编程语言相比所占的优势 ...
- 裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职
本文转载自:裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职 有位朋友私信我: 我从事Java工作,今年受了很大的影响,我们公司采取了节源措施,给在岗的每位员工只发底薪.底薪太少了, ...
最新文章
- 先发制人!Waymo将首推商用载人自动驾驶服务,Uber们怕不怕?
- 全面对比,深度解析 Ignite 与 Spark
- RSA非对称加密算法Java实现之输出key文件
- IP地址概念及其划分
- dotNET Core 3.X 使用 Autofac 来增强依赖注入
- Android笔记-对称与非对称加密及DH密钥交换
- 字符设备驱动笔记(二)
- 用C#製作PDF文件全攻略
- C语言递归求圆周率,python中的递归问题,求圆周率
- 10个SQL注入工具
- Ubuntu 19.04 磁盘加密
- 第四百九十一章 战利品
- 前台HTML现在预览附件
- 关于大成资源网这一个月大成网停更详细原因
- 数据对接—kettle使用之一
- linux命令名字由来--整理
- 【转】Java8 函数式编程详解
- nginx配置赛门铁克ssl
- createjs php通信,createjs与animateCC协作教程5(必看)
- .net 海关跨境进口公服报文