Python函数

Python函数

函数介绍
  • 函数概念
java函数构成	名称	参数	返回值类型	方法体	访问修饰符
python函数 	构成	名称	方法体	参数
			参数不需要指定数据类型
			函数没有重载,若函数名相同,则覆盖原有的参数,后面覆盖前面函数
			函数的参数可以带默认值,当不传递实参时,执行形参结果;当传递实参时,执行传递参数运算结果
			函数调用的时候,可以带有参数名称,此时按照名称进行赋值
				def add (a=100,b=200)
					print(a)
					print(b)
				add(b=1,a=2)
				打印结果为:2	1
			
			

一般情况下,某段代码需要反复使用多次,
而且这段代码又具备特定的功能,
我们会把这段代码组织成为单独的功能模块,
这个功能模块就可以叫做函数
  • 函数的定义和调用

    • 函数的定义(函数可以重复调用,不能重复定义)
    语法格式:
    def  函数名():
        代码块...
    
    • 函数的调用
    调用格式:
    函数名()
    
  • 练习 封装函数打印99乘法表:

# 函数的定义
def show99():
    i = 1
    while i < 10:
        j = 1
        while j <= i:
            print("%d * %d = %d\t"%(j,i,i*j),end=" ")
            j += 1
        i += 1
        print("")
        # 函数的调用,只有调用函数,函数中的代码才会被执行
show99()
  • 函数的文档说明
使用help(自定义方法名) 可以查看函数的文档说明
help(show99)
显示结果:
Help on function show99 in module __main__:
show99()
    # 函数的定义: 打印99乘法表
函数的参数
  • 定义带有参数的函数
语法格式:
def 方法名(形参...):
    代码块(带代码中,形参可以被理解为定义好的一个变量)
  • 带参数的函数的调用
方法名(实际参数)
注意:参数的个数要匹配
  • 不定长参数

    *args 表示一组值的集合,普通数据

    **kwargs 表示kv格式的数据

  • 引用传参(可变,不可变)

函数的返回值
  • 什么叫做返回值(生活实例)
让同桌帮你买饭回来,对你来说,饭,就是返回值
  • 开发中的返回值
两个数字求和函数,有时候,调用者只是想得到这个和。
  • 带返回值函数的案例:
def getSum(a,b):
    c = a + b
    return c
#简化:
def getSum(a,b):
    return a + b
#调用
result = getSum(10,20)
#这时候的result就是得到的返回值
四种函数的类型
  • 无参数,无返回值
  • 无参数,有返回值
  • 有参数,无返回值
  • 有参数,有返回值
函数的封装强化练习
  • 函数的嵌套调用
def test2():
    print("test2")
def test1():
    #调用函数2
    test2()
test1()
  • 封装函数练习

    • 封装函数,完成自定义个数的*组成的直线
    比如:参数为5,打印出如下内容
    
    *****
    
    • 封装函数,完成 自定义行数的 上题 实现的直线
    例如:参数为3,打印如下效果
    
    *****
    *****
    *****
    
    • 封装函数
    封装求3个数字平均数的函数
    
局部变量
  • 概念
在函数内部定义,用来存储临时数据的变量,称为临时变量,形参也是局部变量
  • 注意
    • 在函数内部定义,作用域为函数内部

    • 不同函数中可以存在同名变量,互不干涉,没有关系

全局变量
  • 概念

    • 既能在其中一个函数中使用,又能在其他函数中使用的变量,成为全局变量
    #例:
    a = 100
    def test1():
        print(a)
    def test2():
        print(a)
    
  • 全局变量与局部变量同名问题

    • 可以重名
    a = 100
    def test():
        a = 200
        print(a)
    test()
    #这种写法是允许的,打印出的结果为“200”,访问的为离的近的
    
    • 函数内部修改全局变量问题
    	局部变量不能修改全局变量的值,如果需要修改就要加关键字global,换句话说,只要局部变量中使用global关键字,这个变量就成为全局变量
    	不能在global前定义重名的局部变量
    
    a = 100
    def test():
         # global a(需要手动声明a 为全局的才可以进行修改)
        a += 10
        print(a)
    

如果在函数内部,想修改全局变量的值,需要手动将变量前使用global进行修饰(可变类型的全局变量,不需要修饰)

例:
a = [1]
def test():
   a.append(10)
   print(a)	
test()
函数应用:图书管理系统
def showMenu():
    print("1.添加图书")
    print("2.查询图书")
    print("3.删除图书")
    print("4.修改图书")
    print("5.退出系统")
函数的返回值二
  • 多个返回值问题
允许多个返回值,本质利用的是元组
def divid(a,b):
    shang = a // b
    yushu = a % b
    return shang,yushu
value1,value2=divid(10,20)
print(value1)
print(value2)
函数的参数二
  • 缺省参数
# 缺省参数
def test3(a,b=10):
    print(a)
    print(b)
test3(100)
  • 可变参数
# 可变参数  *tu	   元组形式
def test4(*tu):
    print(a)
test4(1)
test4(1,2,3)
test4([1,2,3])
test4((1,2,3))
# 可变参数 **kw    字典形式
def test5(**kw):
    print(kw)
test5(m=1,b=2)
  • 引用参数(可以画图讲解)

    • 基本参数
    a=100
    # 在方法中修改变量的值
    def changValue(v):
        v = 200
    changValue(a)
    # 打印发现a的值依旧为100
    print(a)
    
    • 引用参数
    list1=[1,2,3]
    # 在函数中修改变量的值
    def changValue(v):
        v[0] = 100
    changValue(list1)
    # 打印发现list1的值变成了[100, 2, 3]
    print(list1)
    
递归函数
  • 递归概念
占用内存
在函数中不是调用其他而是调用自身,这种调用方式,称为递归调用
  • 递归的使用
    • 递归求 ∑100
    • 求 n!
匿名函数 lambda
  • 概念
用lambda关键字创建的简单的没有函数名的函数,这种函数不用def声明
适应于简单的逻辑判断
  • 语法
语法格式:
lambda  参数... :  表达式
sum = lambda args1,args2: args1+args2
print(sum(1,2))
#结果为:3
  • 注意事项:
    • 在匿名函数中,不能有return
    • 可以有0、1、多个参数
    • 表达式计算后只能返回一个值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值