20190523-Python函数-笔记

Python函数

一. 函数的基础知识

  1. 函数定义及调用
    1)什么是函数?
    编写代码的效率
    代码的重用
    具有独立功能的代码块组织为一个小模块
    2)定义函数:
    def 函数名():
    函数体
    3)调用函数:通过函数名()可直接进行调用
    需要先定义,再调用!!在这里插入图片描述

通过函数进行封装,使用时直接调用该函数即可

def sum_two_nums():
a=23
b=45
result=a+b
print(result)
sum_two_nums()

在这里插入图片描述

练习:
定义一个函数,输出自己的姓名和年龄,并且可以定义该函数

def print_mess():
    name=input('请输入姓名:')
    age=input('请输入年龄:')
    print('姓名:%s,年龄:%s'%(name,age))
print_mess()

在这里插入图片描述

  1. 函数的参数

1)定义带有参数的函数
形参:定义函数时,()小括号中的内容;用来接收实参中的内容。
实参:调用函数时,()小括号中的内容
eg1:

def sum_two_nums(a,b):
    result=a+b
    print(result)
#调用函数:29赋值给a,78赋值给b
sum_two_nums(29,78)

在这里插入图片描述

2)调用带有参数的函数
eg2:求三角形周长

#abc为形参
def print_perimeter(a,b,c):
    per=a+b+c
    print('三角形的周长是:%d'%per)
#调用三个实参
print_perimeter(3,4,5)

在这里插入图片描述

3)调用函数时参数的顺序

  1. 函数的返回值
    1)定义:返回值就是程序中完成一件事情之后,最后给调用者的结果
    2)带有返回值的函数:在函数中把结果返回给调用者,需要在函数中使用return
    return相当于循环中的break,即在函数中,只要遇到return,就结束。

eg3:

def print_perimeter(a,b,c):
    per=a+b+c
    return per
    print('三角形的周长:') #不会执行
#调用三个实参
per=print_perimeter(3,4,5)
print(per)

在这里插入图片描述

如果返回多个返回值,则可以将多个返回值组成列表、元组等,或用逗号将返回值分隔。

3)保存函数的返回值:
def add(a,b):
return a+b #思考:能不能返回多个值
result = add(11,15)
print(result)

  1. 函数的类型
    根据参数、返回值
    ①无参数,有返回值
    def A():
    pass
    ②无参数,有返回值
    def A():
    return
    ③有参数,无返回值
    def A(a):
    pass
    ④有参数,有返回值
    def A(a):
    return

  2. 函数的参数(补充)
    1)缺省参数:在调用时,缺少参数,但是缺少的参数在定义函数时,已经赋值给它了
    在调用函数时,如果没有给这个参数赋值,则使用定义函数中这个参数的默认值,否则会报错
    在调用函数时,如果调用过程中给出了这个参数的值,并且在定义时也赋值了,则使用调用函数中的值。

eg5:

def add(a,b,c,d=22):
    print(a)
    print(b)
    print(c)
    print(d)
add(33,56,21)

在这里插入图片描述

2)不定长参数
在调用函数时,参数个数不确定,所以需要在定义不定长参数时,用*表示可以接收的参数个数为n个,前的参数,需确定个数,且必须传入;后的参数则放入一个元组中。
args 是有特殊含义的参数:表示不定长的参数,将后面写的都存在一个元组中。
在不定长参数中:
一个
代表元组
两个
代表字典
eg6:

def add_nums(a,b,c,*args):
    result=a+b+c
    #后面的n个都合成一个元组,合成args
    print(args)
    for temp in args:
        result+=temp
    print('resule=%d'%result)
add_nums(2,6,8,34,5,21,32)

插入图片描述
2,6,8为a,b,c的参数值
34, 5, 21, 32为*后的参数,放在一个元组中

eg7:

def print_num(a,b,c,*args,**kwargs):
    result=a+b+c
    print()
    print(args)
    print(kwargs)
    print('resule=%d' % result)
print_num(32,41,26,11,23,51,5,'dfs',name='chen',age=23)

在这里插入图片描述

二. 函数的嵌套调用

  1. 函数嵌套使用

一个函数里面调用了另一个函数,就是函数嵌套。
eg8:

def A():
    print('这是函数A') #控制台打印
def B():
    print('这是函数B')
    A() #调用A
    print('end')
#调用B
B()

在这里插入图片描述
2. 函数嵌套的应用

1)打印图形
①写一个函数打印一条横线

 def print_one_line():
        print('-'*30)
 print_one_line()

在这里插入图片描述

②打印自定义行数的横线

def print_one_line():
    print('-'*30)
def print_num_lines(a):
    i=0
    while i<a:
        print_one_line()
        i+=1
print_num_lines(3)

在这里插入图片描述
打印3行

2)数学计算
①写一个函数求三个数的和

def sum_three_num(a,b,c):
    result=a+b+c
    print('和是:%d'%result)
sum_three_num(19,42,33)

在这里插入图片描述
②写一个函数求三个数的平均值
#求平均值

def sum_three_num(a,b,c):
    result=a+b+c
    return result #result赋值给sum1
def avg_three_num(a,b,c):
    sum1=sum_three_num(a,b,c)
    avg=sum1/3 #sum1/3赋值给avg
    print('平均值是:%d'%avg)
#调用avg
avg_three_num(23,53,41)

在这里插入图片描述

三. 局部变量和全局变量

  1. 局部变量和全局变量的定义

1)局部变量:在函数内部定义的变量 ,定义在函数体内
不同的函数可以定义相同的名字的局部变量
为了临时保存数据,在函数中定义变量进行存储
2)全局变量:在函数外部定义的变量,必须定义在函数调用之前的任意位置
如果一个变量,既能在一个函数中使用,也能在其他函数中使用,就是全局变量

a=10
def A():
    a=10 
    print(a)
def B():
    print(a)
A()
B()

在这里插入图片描述

  1. 全局变量和局部变量名字相同

探讨当局部变量和全局变量名字相同时,在函数中怎样进行调用?
当函数中有自己的变量时,则使用自己的局部变量
当函数中没有自己的变量时,则使用全局变量。

a=20
def A():
    a=10 #刚好变量名相同,并没有修改
    print(a)
def B():
    print(a)
A()
B()

在这里插入图片描述

  1. 修改全局变量

全局变量能在所有函数中使用,当局部变量和全局变量名称一样时,若想在函数中将局部变量修改成全局变量,则使用global
如果在程序中,没有全局变量,可以在函数中通过global设置某个变量为全局变量

a=20
def A():
    global a #设置成全局变量
    a=15 #刚好变量名相同,并没有修改
    print(a)
def B():
    print(a)
A()
B()

在这里插入图片描述

四. 递归函数和匿名函数

  1. 递归函数

递归函数:如果一个函数在内部不调用其他的函数,而是自己本身
例子:计算阶乘n! = 1 * 2 * 3…n
eg:

def num(a): # 5 4 3 2 1
    if a>1:
        result=a*num(a-1) #5*num(4) 5*4*num(3) 5*4*3*num(2) 5*4*3*2*num(1)
    else:
        result=1
    return  result # =5*4*3*2*1
res=num(5) #5的阶乘
print(res)

在这里插入图片描述

def calc(n):
    print(n)
    if int(n/2)==0:
        return n
    res=calc(int(n/2))
    return res
res=calc(10)
print(res)

在这里插入图片描述
2. 匿名函数

匿名函数:用lambda关键字创建一个函数,省略了用def定义函数的标准步骤
用法:lambda [arg1,arg2,argn]:expression
调用:
匿名函数返回的是一个表达式的值,所以需要用一个变量接收
匿名函数(参数值)
匿名函数的使用:
作为函数,可直接实现想要的功能
作为函数的参数,在调用的时候把lambda式子传递给函数的参数
作为内置函数的参数

def add_num(a,b):
	return a+b
res=lambda a,b:a+b
print(res(3,5))

在这里插入图片描述

自己定义的函数

def fun(a,b,opt):
print('a=%d'%a)
print('b=%d'%a)
print('result=%d'%opt(a,b))
fun(1,2,lambda x,y:x+y)

在这里插入图片描述
作为内置函数的参数:下面的数据如何指定按age或name排序?

students=[{'name':'xiaoli','age':23},{'name':'xiaozhao','age':20},{'name':'xiaozhang','age':28}]
#按照年龄倒序排列
students.sort(key=lambda x:x['age'],reverse=True)
print(students)

在这里插入图片描述

#字符串拼接
def name(username):
print('miss_'+username)
name('zhang')

在这里插入图片描述

#自定义字符串
def str_name(n1,n2,test):
print(n1)
print(n2)
print(test(n1,n2))
str_name('zhang','xiaoming',lambda m,n:m+n)

在这里插入图片描述

def add_sum(a,b,fun):
    return fun(a,b)
fun_new=input('请输入一个lambda表达式:')
fun_new=eval(fun_new) #需要用eval转化成函数
res=add_sum(3,4,fun_new)
print(res)

在这里插入图片描述

五. 函数使用注意事项

  1. 自定义函数
    一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
    在开发中往往根据需求来设计函数需不需要返回值
    函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成
    在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
    参数列表中变量的个数根据实际传递的数据的多少来确定

  2. 调用函数
    调用方式:函数名([实参列表])
    如果调用的函数在定义时有形参,那么在调用的时候就应该传递参数
    调用时,实参的个数和先后顺序应该和定义函数中要求的一致
    如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值

  3. 作用域
    在一个函数中定义的变量,只能在本函数中用(局部变量)
    在函数外定义的变量,可以在所有的函数中使用(全局变量)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值