Python 入门 之 函数
Python 入门 到 精通 (四)
- 函数基本知识
- 递归函数
- Lambda(匿名函数)
- 实例运用
本篇文章重点讲解 Python 函数 的以下内容:
定义函数语法、调用函数、函数参数、参数的传递方式、参数的类型、可变参数、函数的返回值、函数说明文档、作用域 。
大家也可参照我的另一篇博客,是有关python函数的拓展,有关本章的匿名函数,在这篇文章也有深入解析:Python 之 高阶函数
函数基本知识
函数定义语法:
def 函数名(参数):'''函数文档说明'''函数体return 返回值eg:定义两个数求和的函数def sum(a,b):return a+b
注意:必须先定义函数,然后再调用该函数
函数调用:
直接使用函数名,再跟上参数的值即可。eg:#调用上面定义好的函数sumresult=sum(1,2)结果为:result为3
函数参数:
情况1:函数定义的参数的个数必须和调用函数传入的值个数保持一致情况2:如果指定了函数的参数,在调用函数的时候,没有传入相对应的值,则会出错情况3:在没有传入函数值的情况下,可以对函数参数设置默认值eg:#在定义函数时候,指定参数的默认值def sum(a=1,b=1):return a+b#调用函数,传递参数sum(2,3):有参数传递,结果为5sum():没有参数传递,结果为2
函数参数的传递方式:
方式1:位置参数,以正确的顺序传入函数,调用时的数量必须和声明时一样方式2:关键字参数,允许函数调用时参数的顺序和声明时不一致#位置参数sum(1,2):调用后a=1,b=2#关键字参数sum(b=1,a=2),调用后a=2,b=1
函数参数类型:
在Python函数中,参数的类型可以是任意类型eg:#定义函数def test(a):#调用函数a可以为任意类型,可以为number,也可以为String,可以为List、Tuple、set、Dictionary都可以
函数可变参数:
在某些情况下,函数的参数的个数是不固定的。可以传入参数,也可以选择不传递参数,可以传递一个参数,也可以传递多个,参数为元组类型或字典类型,语法格式:
def 函数名(*参数名):eg:求多个值的和def sum(*a):sum=0for i in a:sum+=ireturn sum
函数返回值:
语法:return 结果注意:返回结果可以是一个值、多个值,也可以是另外一个函数def sum(*a):sum=0for i in a:sum+=idef dayin():print(f"计算的结果为:{sum}")return dayin()sum(1,2,3)
函数的说明文档:
类似Java中的每个方法都会有个说明,说明该方法的作用,在Python函数中,定义函数说明格式如下:
在函数的第一行写上:'''函数文档说明'''eg:def sum(a,b):'''这是一个求两个数之和的函数参数有两个'''return a+b查看可以使用help()函数,比如查看sum()help(sum)
作用域:
变量的作用域分为两种:
全局作用域
函数作用域
全局作用域 :不能调用函数作用域中的变量,但是函数作用域可以调用全局作用域中的变量;
若在函数作用域中修改全局作用域中的值,必须使用global 声明
eg:a=1 #全局作用域def sum():b=2 #局部作用域global a #声明a为全局作用域a=2 #直接改a的值会出错
递归函数
递归:函数内部调用函数本身
# 求某个数以内的和def test(num):if num == 1:return 1return num + test(num - 1)# 调用递归函数print(test(100)) # 5050
Lambda(匿名函数)
匿名函数:如果函数有一个返回值,并且只有一句代码,可以用lambda简化
lambda 表达式:
语法:变量名 = lambda 参数列表 : 表达式/返回值 注意:参数可以省略参数形式:无参数一个参数默认参数可变参数:*args 、**kwargs带判断的lambda:返回值中使用三元运算符列表内字段数据进行排序的语法:列表.sort(key = lambda x:x['排序的列'])列表.sort(key = lambda x:x['排序的列'],reverse=True)
本章代码:
# 函数:sa = """定义函数:语法:deg 函数名():代码调用函数:语法:函数名()注意:在Python中,函数必须先定义,后调用"""print(sa)def say():print("俺正在说话")# 使用lambda表达式简化上面函数say = lambda: "俺再一次说话"# print(say())sb = """函数参数:语法:def 函数名(参数名1,参数名2):代码调用有参函数:语法:参数名(参数值1,参数值2)注意:形参:参数名1,参数名2实参:参数值1,参数值2"""print(sb)# 带参数的函数def eat(what):print(f"你们正在吃{what}")eat = lambda what: f"你们正在吃{what}"# print(eat("螺蛳粉"))sc = """参数的传递方式:1、位置参数调用函数时根据函数定义的参数位置来传递参数注意:传递和定义参数的顺序、个数必须一致2、关键字参数函数调用,通过“键=值” 形式加以指定3、缺省参数默认参数,用于定义函数时,为参数提供默认值,调用函数时可不传该默认参数的值4、不定长参数(可变参数)包裹位置传递语法:def 函数名(*args):代码包裹关键字传递语法:def 函数名(**kwargs):代码"""print(sc)# 定义带两个参数的函数def test(a, b=222):print(f"a={a}")print(f"b={b}")test = lambda a,b=222: f"a={a},b={b}"# print(test(111))# 带条件的lambdatest7 = lambda a,b : a if a > b else bprint(test7(22, 44))# 求1,2,3内的和,用lambda实现test8 = lambda *args: sum(args)# print(test8(1, 2, 3))# 定义可变参数1,参数是元组类型# 多个值的和def test1(*args):"""这是一个求多个值和的函数"""sum = 0for i in args[0]:sum += ielse:# print(f"和为{sum}")# 返回值return sum# 定义可变参数2:# 参数为字典类型def test2(**kwargs):for k, v in kwargs.items():print(k, v)# 返回值为多个def test3(a, b, c):"""这是一个测试函数,测试函数为多个返回值:param a: 值1:param b: 值2:param c: 值3:return: 返回多个值"""a += 100b += 100c += 100return a, b, c# 计算多个值的平均值def test4(*args):sum = test1(args)return sum / len(args)# 测试变量范围a = 222 # 全局变量def test5():# 在函数内部修改全局变量的值# 必须声明 变量为全局变量global aa = 333print(f"函数内:{a},地址为:{id(a)}")# 递归:函数内部调用函数本身# 求某个数以内的和def test6(num):if num == 1:return 1return num + test6(num - 1)# 调用递归函数# print(test6(100))# print(f"函数外:{a},地址为:{id(a)}")# test5()# print(f"函数外:{a},地址为:{id(a)}")# 调用函数:必须放在定义函数的后面# say()# 调用有参的函数# eat("辣椒炒尖椒")# 调用参数:1.位置方式# test(11, 22)# 2.关键字方式# test(b=22, a=11)# 3.缺省参数(默认值)# 注意:有默认值的参数必须放在没有默认值参数的后面# test(11, 22)# 调用可变参数1# print(test1(1, 2, 3))# 调用可变参数2# test2(name="罗旺", age=19)# 调用返回值为多个值的函数# print(test3(20, 10, 30))# 查看函数的说明文档# help(test3)# 函数嵌套# print(test4(1, 2, 3))# 使用lambda对字典列表进行排序persons = [{"name": "张三", "age": 22},{"name": "A罗旺", "age": 12},{"name": "王五", "age": 23},{"name": "赵六", "age": 2}]persons.sort(key= lambda person:person["name"], reverse=True)print(persons)
实例运用
"""需求:员工管理系统功能:1.添加员工信息2.删除员工信息3.修改员工信息4.查看单个员工信息5.查看所有员工信息6.退出技术:函数、数据类型(字典列表)、循环、条件语句"""emps = [{"id": "001", "name": "魏无羡", "gender": "男", "age": "19"},{"id": "002", "name": "蓝忘机", "gender": "男", "age": "20"},{"id": "003", "name": "江晚吟", "gender": "男", "age": "19"}]"""选择功能列表"""def chocieFunc():print("*" * 30)print("\t^V^ 1.添加员工信息")print("\t^V^ 2.删除员工信息")print("\t^V^ 3.修改员工信息")print("\t^V^ 4.查看单个员工信息")print("\t^V^ 5.查看所有员工信息")print("\t^V^ 6.退出")print("*" * 30)"""添加员工信息"""def addEmp():id = input("\n\t\t\t\t请输入要添加的员工编号:")name = input("\n\t\t\t\t请输入要添加的员工姓名:")gender = input("\n\t\t\t\t请输入要添加的员工性别:")age = input("\n\t\t\t\t请输入要添加的员工年龄:")emp = {"id": id, "name": name, "gender": gender, "age": age}emps.append(emp)print("\n\t\t\t\t添加OK ^V^ !\n")"""删除员工信息"""def delEmp():id = input("\n\t\t\t\t请输入要删除的员工编号:")for emp in emps:if emp.get("id") == id:# 将emp删除,从empsemps.remove(emp)print("\n\t\t\t\t删除OK ^V^ !\n")breakelse:print("\n\t\t\t\t查无此人,请输入正确的员工编号!!\n")"""修改员工信息"""def updateEmp():id = input("请输入要修改的员工编号:")for emp in emps:if emp["id"] == id:# 特别注意emp["name"] = input(f"\n\t\t\t\t请输入要修改后的员工姓名(原来姓名:{emp['name']}):")emp["gender"] = input(f"\n\t\t\t\t请输入要修改后的员工性别(原来性别:{emp['gender']}):")emp["age"] = input(f"\n\t\t\t\t请输入要修改后的员工年龄(原来年龄:{emp['age']}):")# emp = {"id": id, "name": name, "gender": gender, "age": age}# 先删除原有的emp,在追加新的emp【不推荐】print("\n\t\t\t\t修改成功 ^V^ !!!\n")breakelse:print("\n\t\t\t\t查无此人,请输入正确的员工编号!!\n")"""查看单个员工信息"""def getEmpById():id = input("\n\t\t\t\t请输入要查询的员工编号:")for emp in emps:if emp["id"] == id:print("\n\t\t\t\t编号\t姓名\t性别\t年龄")print(f"\n\t\t\t\t{emp['id']}\t\t{emp['name']}\t {emp['gender']}\t\t{emp['age']}\n")breakelse:print("\n\t\t\t\t查无此人,请输入正确的员工编号!!\n")"""查看所有员工信息"""def getAllEmps():print("\n\t\t\t\t编号\t姓名\t性别\t年龄")for emp in emps:print(f"\n\t\t\t\t{emp['id']}\t\t{emp['name']}\t {emp['gender']}\t\t{emp['age']}")else:print(f"\n\t\t\t\t共查询到{len(emps)}条数据\n")print("\n\t\t******欢迎使用员工管理系统******")while True:chocieFunc()num = int(input("\n\t\t请输入指令:"))if num == 1:addEmp()elif num == 2:delEmp()elif num == 3:updateEmp()elif num == 4:getEmpById()elif num == 5:getAllEmps()elif num == 6:print("\n\t\t\t\t\t\t\t\t ^V^ 欢迎下次再来 ^V^ ")breakelse:print("\n\t\t请输入正确的指令")
Python 入门 之 函数相关推荐
- python入门之函数结构函数的参数_python3基础之函数参数类型
函数的参数是函数内部与外部交流的纽带,上一篇文章我们使用了最简单的参数形式(就一个参数).接下来测试一下多个参数的情况是怎样的? 1.测试1 例子中使用了两个参数p1和p2, 函数的功能就是打印出p1 ...
- python入门day16——函数的递归调用、二分法、三元表达式、匿名函数
文章目录 函数的递归调用 递归调用应该分为两个阶段 二分法 三元表达式 匿名函数 函数的递归调用 函数的递归调用:就是在调用一个函数的过程中又直接或间接地调用自己 示例1:直接调用自己 def foo ...
- Python入门之函数结构——第3关:函数的使用范围:Python作用域
任务描述 函数是有使用范围的,在一个模块中,我们可以定义很多函数和变量,但我们希望有的函数和变量别人可以使用,有的函数和变量仅仅可以在模块内部使用.这就是Python作用域的相关问题. 本关的目标就是 ...
- python 入门 guess 函数
猜年龄限制次数,使用while函数和count计数器. age_of_spencer = 28 count = 0 while True:if count == 2:breakage = int(in ...
- python入门——全局函数思维导图
全局函数的具体使用方法在这里
- python入门之函数结构函数的参数_Python 基础之函数初识与函数参数
一.函数初识 定义:满足某一个方法 满足某一个功能#(1)功能(包裹一部分代码 实现某一个功能 达成某一个目的)#(2)可以反复调用,提高代码的复用性,提高开发效率,便于维护管理#(3)函数的基本格式 ...
- python入门——常用函数总结
一.输入输出函数 1.print()函数 #输出指定的内容 print('hello world')#可以同时输出多个字符串,用逗号','隔开 print('hello','how','are')#可 ...
- python3.7.4-Python3.7.4入门-3函数
3 函数 3.1 定义函数 def fib(n): # write Fibonacci series up to n """Print a Fibonacci serie ...
- Python入门篇-匿名函数
Python入门篇-匿名函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数概述 1>.什么是匿名函数 匿名,即没有名字 匿名函数,即没有名字的函数 2>. ...
最新文章
- 服务器定期巡检项目,服务器定期巡检制度..docx
- 2018/Province_Java_C/1/哪天返回
- OData Console in C4C and Gateway Client in CRM Fiori
- sed之G、H、g、h使用
- 智能车学习(八)——菜单的实现
- can和could的用法_can和could的区别和用法
- 红孩儿编辑器的详细设计第二部分
- 加油站会员管理系统用什么好
- Defcon 2019 Qualify: redacted puzzle Writeup
- 浅析人工智能体系建设
- 被吹爆的性能强者FastAPI,实际性能不到Flask一半
- 转换字符串中数字为整数
- Android开发者编写自己的API接口(下)
- python开发酷q插件_基于python和酷Q的QQ机器人开发实践(1)
- 服务器入侵之找出隐藏字符的原理
- Java零基础到传奇的必经之路,你准备好了吗?
- 985博士生盲审未过!学界泰斗喊冤后决定带他去港科大重读博士?
- 路由器回流--内网不能访问网站的问题
- python png转jpg
- 管理员宝典:迷死人不偿命的开源工具
热门文章
- 【论文阅读|深读】DANE:Deep Attributed Network Embedding
- 【公告】MD毛豆新发现新域名注册成功了_彭世瑜_新浪博客
- Symantec AntiVirus 9.0 Corporate Edition Client 病毒库更新下载
- 缓慢的HTTP拒绝服务攻击漏洞验证
- JavaScript--【JS】基础语法
- 浅谈Android模块化设计(模块化的一些思考)
- 水货还是行货?相机怎么买才能让人放心
- php 两表关联查询,Thinkphp连多表查询,关联2个或多个字段
- 信号处理——Hilbert端点效应浅析
- 【Pregel+】Pregel+安装配置及使用教程