美文网首页
千锋的第八天

千锋的第八天

作者: 堪怜咏絮才 | 来源:发表于2018-07-25 21:27 被阅读136次

一、函数的返回值

函数的返回值:
1.函数返回给调用者的值
2.return后面的表达式的值
3.函数调用表达式的值
函数有没有返回值主要是看有没有return,如果有return,返回的就是return后面的值;如果没有return,函数返回的是None.
函数的调用过程:-------------重点、重点、重点
1.先回到函数声明的位置
2.用实参给形参赋值
3.执行函数体
4.将返回值返回给函数调用表达式
5.回到调用函数的位置

函数的结束:
1.函数体自然执行到结束
2.遇到return,直接结束,返回return后面的值

练习:写一个函数,求1+2+3+.....,和不能大于10000

def my_sum():
    sum1 = 0
    number = 1
    while True:
        if sum1 + number >= 10000:
            return sum1,number-1
        sum1 += number
        number += 1
print(my_sum())
结果:(9870, 140)

二、作用域

作用域:一个变量可以使用的范围,就是这个变量的作用域。(函数和类可以影响变量的作用域)
全局变量:从声明开始到文件结束都可以使用的变量
局部变量:在函数(类)中声明的变量就是局部变量。作用域是从声明开始到文件结束。
如果要让一个局部变量变成全局变量,可以用global语句
格式:
global 变量
变量 = 新值
在声明函数的时候,如果函数里面在声明新的函数,可能用到nonlocal,不过这样使用的频率很低。

练习:声明一个变量,统计一个函数调用的次数

count = 0
def function():
    global count
    count += 1
function()
print(count)
function()
print(count)
function()
print(count)
function()
print(count)
结果:1
2
3
4

三、匿名函数

匿名函数:本质还是函数,以另外一种简单的方式来声明的
匿名函数的声明:
函数名 = lambda 参数列表:返回值

写一个函数,计算两个数的和

me = lambda x,y:x+y
print(me(10,20))
结果:30

注意:匿名函数本身就包含了一个返回值

四、函数作为变量

1.将函数作为参数

def my_sum(*number):
    sum1 = 0
    for item in number:
        sum1 += item
    return sum1
def my_mul(*numbers):
    sum1 = 1
    for item in numbers:
        sum1 *= item
    return sum1

def operation(method,x,y):
    return method(x,y)

result1 = operation(my_sum,10,20)
result2 = operation(my_mul,10,20)
result3 = operation(lambda x,y:x<y,10,20)
result4 = operation(lambda x,y:x if x > y else y,10,20)
print(result1,result2,result3,result4)
结果:30 200 True 20

python中的三目运算符
值1 if 表达式 else 值2----->判断表达式是否为True,为True整个表达式的结果为'值1',否则表达式的结果为'值2'

五、递归函数

1、什么是递归
递归函数:在函数的函数体中调用函数本身
理论上循环能做的事情,递归都可以做
对递归的要求:能不用就不用
函数调用的过程是一个压栈的过程(每调用一次函数,系统都要为其分配内存空间,
用来存储函数中声明变量和参数,这个内存在函数调用结束的时候会自动释放)
2、怎么去写一个递归函数
a.找临界值(跳出循环---->return)
b.找关系:假设当前函数对应的功能已经实现,找到f(n)和f(n-1)的关系
c.使用f(n-1)和前面找到的关系去实现f(n)的功能

写一个递归函数实现:1+2+3+4+.....+n

def my_sum(n):
    if n == 1:
        return 1
    return my_sum(n-1)+n
print(my_sum(5))
结果:15

作业:

1.写⼀个函数将⼀个指定的列表中的元素逆序(例如[1, 2, 3] -> [3, 2, 1])(注意:不要使⽤列表⾃带的逆序函数)

list1 = [1,2,3]
def reverse_list(list1):
    for item in list1[0:len(list1)]:
        list1.pop()
        list1.insert(0,item)
    return list1
print(reverse_list(list1))
结果:[3, 2, 1]

2.写⼀个函数,提取出字符串中所有奇数位上的字符

str1 = 'hjhkfjio14484845*(^^#%$#%^*^*'
def extract(str1):
    str2 = ''
    for item in str1[0:len(str1):2]:
        str2 += item
    print(str2)
extract(str1)
结果:hhfi1444*^#$%**

3.写⼀个匿名函数,判断指定的年是否是闰年

def leap_year(number):
    if number%100 == 0:
        if number%400 == 0:
            return '闰年'
        else:
            return '平年'
    else:
        if number%4 == 0:
            return '闰年'
        else:
            return '平年'
print(leap_year(189))
结果:平年

4.使⽤递归打印:

n = 3的时候

@

@@@

@@@@@

n = 4的时候:

@

@@@

@@@@@

@@@@@@@

def print_star(n,m=0):
    if n == 1:
        print(' '*m,'@ ')
    else:
        print_star(n - 1,m+1)
        print(' '*m,'@ '*n)
print_star(5)
结果:
# 5.写函数,检查传⼊列表的⻓度,如果⼤于2,那么仅保留前两个⻓度的内容,并将新内容返回给调⽤者。

list1 = [1,2,3,4,5,6,7,8]
def length(list1):
list2 = []
if len(list1) > 2:
for item in list1[0:2]:
list2.append(item)
return list2
print(length(list1))
结果:[1, 2]

# 6.写函数,利⽤递归获取斐波那契数列中的第 10 个数,并将该值返回给调⽤者。

def sequence(n):
if n == 1 or n == 2:
return 1
return sequence(n-1)+sequence(n-2)
print(sequence(6))
结果:8


# 7.写⼀个函数,获取列表中的成绩的平均值,和最⾼分

list1 = [1,2,3,4,5,6,7,8,9]
def average(list1):
max1 = list1[0]
for item in list1:
if item > max1:
max1 = item
sum1 = 0
for x in list1:
sum1 += x
return max1,sum1/len(list1)
print(average(list1))
结果:(9, 5.0)

# 8.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新的列表返回给调

list1 = [1,3,8,'hfh','uryihi','&^%',')((&','4']
def check(list1):
list2 = []
for item in list1[1:len(list1):2]:
list2.append(item)
return list2
print(check(list1))
结果:[3, 'hfh', '&^%', '4']

相关文章

  • 千锋的第八天

    一、函数的返回值 函数的返回值:1.函数返回给调用者的值2.return后面的表达式的值3.函数调用表达式的值函数...

  • Unity官方培训认证中心

    想学Unity官方培训认证,就是要找千锋教育! 千锋教育,一向主打教学品质,千锋相信,要收入,先要投成本;要盈利,...

  • PHP学习路线图

    千锋PHP

  • 千锋PS基础教程精讲-千锋PS教程

    千锋PS基础教程精讲-千锋PS教程 https://www.jczhijia.com/CourseChapters...

  • 关于千锋

    千锋教育中国IT教育领先品牌 我们的愿景 成为一个有情怀、有良心、有品质的中国一流IT职业教育机构! 我们的使命 ...

  • 一日一诗

    《千家诗》抄写第八天

  • Django学习笔记(一)基础

    前言 本文根据千锋教育的 2019最新Django全套教程 教学视频学习整理所得,衷心感谢千锋教育的无私共享。视频...

  • Zookeeper学习笔记

    此文章为博主在Bilibili上看完(千锋教育)Java微服务架构Dubbo篇之后所做的记录的 链接地址:(千锋教...

  • 孔雀女王 12、诱捕白沙

    千夫人掀开床板,凌锋爬了出来。 见有男子从夫人的床下出来,千玉刚大怒,立即拔剑对准凌锋。 千夫人赶紧拦住丈夫,说:...

  • 如来。

    千锋流转,百转成圣。

网友评论

      本文标题:千锋的第八天

      本文链接:https://www.haomeiwen.com/subject/yafmmftx.html