Python 入门 之 函数

Python 入门 到 精通 (四)

  • 函数基本知识
  • 递归函数
  • Lambda(匿名函数)
  • 实例运用

本篇文章重点讲解 Python 函数 的以下内容:

定义函数语法、调用函数、函数参数、参数的传递方式、参数的类型、可变参数、函数的返回值、函数说明文档、作用域 。

大家也可参照我的另一篇博客,是有关python函数的拓展,有关本章的匿名函数,在这篇文章也有深入解析:Python 之 高阶函数

Python 入门 之 函数_第1张图片

函数基本知识

函数定义语法:

			def   函数名(参数):
			
			         '''函数文档说明'''
			
			         函数体
			
			         return 返回值
			
			eg:定义两个数求和的函数
			
			def  sum(a,b):
			
			        return a+b

注意:必须先定义函数,然后再调用该函数

函数调用:

			直接使用函数名,再跟上参数的值即可。
			
			eg:
			
			#调用上面定义好的函数sum
			
			result=sum(1,2)
			
			结果为:result为3

函数参数:

			情况1:函数定义的参数的个数必须和调用函数传入的值个数保持一致
			
			情况2:如果指定了函数的参数,在调用函数的时候,没有传入相对应的值,则会出错
			
			情况3:在没有传入函数值的情况下,可以对函数参数设置默认值
			
			eg:
			
			#在定义函数时候,指定参数的默认值
			
			def  sum(a=1,b=1):
			
			        return  a+b
			
			#调用函数,传递参数
			
			sum(2,3):有参数传递,结果为5
			
			sum():没有参数传递,结果为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=0
			
			       for   i   in  a:
			
			              sum+=i
			
			       return sum

函数返回值:

			语法:
			
			return  结果
			
			注意:返回结果可以是一个值、多个值,也可以是另外一个函数
			
			def sum(*a):
			
			        sum=0
			
			        for i in a:
			
			            sum+=i
			
			        def 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 1
			    return 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))
				
				
				# 带条件的lambda
				test7 = lambda a,b : a if a > b else b
				print(test7(22, 44))
				
				
				# 求1,2,3内的和,用lambda实现
				test8 = lambda *args: sum(args)
				# print(test8(1, 2, 3))
				
				
				
				# 定义可变参数1,参数是元组类型
				# 多个值的和
				def test1(*args):
				    """这是一个求多个值和的函数"""
				    sum = 0
				    for i in args[0]:
				        sum += i
				    else:
				        # 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 += 100
				    b += 100
				    c += 100
				    return a, b, c
				
				
				# 计算多个值的平均值
				def test4(*args):
				    sum = test1(args)
				    return sum / len(args)
				
				
				# 测试变量范围
				a = 222  # 全局变量
				
				
				def test5():
				    # 在函数内部修改全局变量的值
				    # 必须声明 变量为全局变量
				    global a
				    a = 333
				    print(f"函数内:{a},地址为:{id(a)}")
				
				
				# 递归:函数内部调用函数本身
				# 求某个数以内的和
				def test6(num):
				    if num == 1:
				        return 1
				    return 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删除,从emps
				            emps.remove(emp)
				            print("\n\t\t\t\t删除OK  ^V^ !\n")
				            break
				    else:
				        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")
				            break
				    else:
				        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")
				            break
				    else:
				        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^ ")
				        break
				    else:
				        print("\n\t\t请输入正确的指令")
				

你可能感兴趣的:(Python,Python,入门)