生活就像是一场戏,人在其中扮演的不过是一个个角色,打工人也好,丈夫也罢,儿子也好,父亲也罢。每个人涂上或淡或浓的脂粉,带着千疮百孔的面具,披挂着久经沙场的盔甲,在舞台上挪移踱步,念词唱戏,时而顺遂,时而踉跄。

当我明白这些道理,我知道这一切还不晚。我告诉自己,热爱生活便是认识到生活的不顺之后依然满怀希望,所以,虽然两肩压着那太行山,我依然能够步履蹒跚。

在我的女友程序员带领下,我也走上了编程的道路,今天就让她带着你们教你函数的定义与使用。

定义函数

  • 函数的定义
  • 函数的分类
  • 函数的创建方法
  • 函数的返回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还在原地踏步?今天女友程序员教你函数的定义与使用相关推荐

  1. python中国地图程序设计_神级程序员教你用Python如何画一个中国地图!(好好玩)...

    为什么是Python 先来聊聊为什么做数据分析一定要用 Python 或 R 语言.编程语言这么多种, Java , PHP 都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用 Python ...

  2. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

  3. 程序员工作压力大,为什么还这么多人想做程序员?是因为喜欢吗?

    最近过年遇到很多亲戚和朋友,不知道大家的身边是怎样的,阿粉身边的亲戚朋友从事计算机相关的还是挺少的,很多还是从事一些传统行业. 最近跟一个亲戚聊天的时候就聊到网上对程序员的一些刻板影响,什么格子衫呀, ...

  4. 10开发Python老程序员教你学习Python的的几大秘诀

    Python 是一门优雅而又不失实用的语言,它语法简单很容易学会,又具有极高的可读性和灵活性.在知乎上 Python 是受关注最多的编程语言.很遗憾在我初学的时候没有知乎这样的平台提供这么多的资源,甚 ...

  5. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员

    原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...

  6. 微商成功神器,python程序员教你,一键分析微信好友近期所有信息

    其他精彩内容:https://blog.csdn.net/weixin_45400881/article/details/95754294 几千个好友,怎么统计 相信做微商的微信好友都会很多,多到很多 ...

  7. python开发程序知道微信好友是否已读信息吗_微商成功神器,python程序员教你,一键分析微信好友近期所有信息...

    好友太多怎么保活 相信做微商的微信好友都会很多,多到很多都成了"僵尸"好友,但是想要成为一个成功的微商,要有两点: 1.好友多,基数决定高度 2."活的"好友多 ...

  8. python相关职业-浅谈Python全栈开发工程师,让程序员都眼红的职业!

    原标题:浅谈Python全栈开发工程师,让程序员都眼红的职业! Python Python 的排名从去年开始就借助人工智能与独特的魅力持续上升,现在它已经成为了第一名. 与其它编程语言相比所占的优势 ...

  9. 裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职

    本文转载自:裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职 有位朋友私信我: 我从事Java工作,今年受了很大的影响,我们公司采取了节源措施,给在岗的每位员工只发底薪.底薪太少了, ...

最新文章

  1. 先发制人!Waymo将首推商用载人自动驾驶服务,Uber们怕不怕?
  2. 全面对比,深度解析 Ignite 与 Spark
  3. RSA非对称加密算法Java实现之输出key文件
  4. IP地址概念及其划分
  5. dotNET Core 3.X 使用 Autofac 来增强依赖注入
  6. Android笔记-对称与非对称加密及DH密钥交换
  7. 字符设备驱动笔记(二)
  8. 用C#製作PDF文件全攻略
  9. C语言递归求圆周率,python中的递归问题,求圆周率
  10. 10个SQL注入工具
  11. Ubuntu 19.04 磁盘加密
  12. 第四百九十一章 战利品
  13. 前台HTML现在预览附件
  14. 关于大成资源网这一个月大成网停更详细原因
  15. 数据对接—kettle使用之一
  16. linux命令名字由来--整理
  17. 【转】Java8 函数式编程详解
  18. nginx配置赛门铁克ssl
  19. createjs php通信,createjs与animateCC协作教程5(必看)
  20. .net 海关跨境进口公服报文

热门文章

  1. Win7如何搜索文件内容
  2. 今天女神打了个电话让我去修电脑,无数次戳中笑点
  3. 通过电话拨号上网的家用计算机,拨号上网需计算机、电话线、帐号和()
  4. (转)大数据量分页存储过程效率测试附代码
  5. 半桥llc 增益 matlab程序,【我已收藏】很完整的LLC谐振半桥电路分析与计算
  6. 世界上最简单的会计书—读书笔记
  7. Tracup丨产品管理与项目管理的区别
  8. Matlab中的Smith 预估器
  9. 【思维导图】LAMPer技能树
  10. Tomcat 在本地创建虚拟目录myapp