Day8-课堂笔记-函数

2018-07-25  本文已影响0人  晓晓的忍儿

1.函数的返回值

a.就是函数返回给调用者值
b.就是return关键字后面的表达式的值
c.就是函数调用表达式的值

函数调用:

a.回到函数的地方
b.传参(实参给形参赋值)
c.执行函数体
d.执行完函数体,将返回值返回给函数调用表达式
e.回到函数调用的位置
函数的函数体只有在调用之后才会执行

2.return关键字

a.将return后面的值,返回给函数调用表达式
b.结束函数
函数结束:
    a.函数体执行完
    b.遇到return

3.函数调用表达式:python中每个函数调用表达式都是有值的

(python中每个函数都是有返回值的,返回值就是return后面的值
如果没有return,那么函数的返回值就是None)
练习:写一个函数,判断指定的年龄是否属于成年人(返回结果)

def age_ren(age):
    if age>18:
        return  '是成年人'
    else:
        return  '还未成年'
str=age_ren(10)
print(str)
if age_ren(10)=='是成年人':
    print('可以进入网吧')
else:
    print('回家吃奶去吧')

结果:

还未成年
回家吃奶去吧
练习:写一个函数,求1+2+3+...,和不能大于10000

def sum(n):
    sum=0
    for x in range(1,n+1):
        sum+=x
        if sum>10000:
            return sum
print(sum(10000))
def sum1():
    sum1=0
    sum2=0
    while True:
        if sum2+sum1>10000:
            return sum2,sum1 
#python中函数可以有多个返回值,在return
        #后面返回多个值,每个值之间用逗号隔开。返回值是一个元组
            sum2 += sum1
print(sum1())

结果:

10011

4.作用域

a=10 #全局变量
def func1():
    b='a' #局部变量
    print(a)
    print(b)
for _ in range(10):
    c=100 #全局变量
print(c)
func1()
print(a)

结果:

100
10
a
10

# python中函数里面可以声明函数
abc='abc'
bcd='bcd'
def func4():
    abc='aaa' #如果全局变量名和局部变量名相同,在函数中使用的是局部变量
    print(abc)
    global bcd #说明bcd是一个全局变量,并可以在函数和类中创建一个全局变量
    bcd = 200
    print(bcd)
func4()
print(abc)
print(bcd)

结果:

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

sum1=0
def math():
    global sum1
    sum1=1
    print('===')
math()
math()
math()
print(sum1)
def func8():
    a1=10
    print('外部:',a1)
    def func9():
        # a1 = 100
        # print('内部:', a1)
        nonlocal a1
        a1=100
        print('内部:', a1)
    func9()
    print('外部:',a1)
func8()


结果:

===
===
===
1
外部: 10
内部: 100
外部: 100

5.匿名函数

匿名函数:本质还是函数,以另外一种简单的方式来声明
格式:函数名=lambda 参数列表:返回值--->结果就是一个函数变量

#写一个函数计算两个数的和
sum=lambda x,y:x*y
print(sum(10,20))
print((lambda x:x*4)(2))

结果:

200
8

6.函数作为变量

声明一个函数就是在声明一个变量。函数名可以当成变量来使用
可以打印,可以赋值,可以查看类型,可以作为函数的参数,可以作为函数的返回值

#将函数func1赋给变量a,这个时候a就是一个函数
def func1(a):
    print(a)
    return 10
print(func1,type(func1))
a=func1
b=func1(10)+100
a('aaa')
#将函数func1作为列表的元素
functions=[func1,func1(10)]
functions[0]('b')

结果:

10
aaa
10
b

1)将函数作为参数

def my_sum(*numbers):
    sum1=0
    for item in numbers:
        sum1+=item
    return sum1
def my_mul(*numbers):
    sum1=1
    for item in numbers:
        sum1*=item
    return  sum1
def operation(method,x,y):
# 求10和20的和
result=operation(my_sum,1,3)
print(result)
# 求10和20的积
result=operation(my_mul,1,3)
print(result)
# 判断10是否大于20
result3=operation(lambda x,y:x>y,10,23)
# result3=operation(lambda x,y:x if x>y else y,10,5)
print(result3)
'''
    :param method: 运算方式
    :param x: 变量1
    :param y: 变量2
    :return: 返回两个值
    '''
    return method(x,y)

结果:

4
3
False

2)三目运算

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

print(a=10 if 10>20 else 20)

结果:

20

3)将函数作为函数的返回值

print((lambda x,y:x*y)(10,20))

结果:

200
练习:写一个函数有个参数,要求传入一个运算符(+,-,*,>,<),返回符号对应的功能

def get_method(method):
    if method=='+':
        def get_sum(*number):
            num = 0
            for item in number:
                if num==0:
                    sum1=item
                else:
                    sum1+=item
                num += 1
            if num<2:
                sum1=None
            return sum1
        return get_sum
    if method == '>':
        return lambda x,y:x>y
    if method == '<':
        return lambda x,y:x<y
    if method=='-':
        def get_cha(*number):
            num=0
            for item in number:
                if num==0:
                    sum2=item
                else:
                    sum2-=item
                num += 1
            if num<2:
                sum2=None
            return sum2
        return get_cha
    if method=='*':
        def get_mul(*number):
            num=0
            for item in number:

                if num==0:
                    sum3=item
                else:
                    sum3*=item
                num += 1
            if num<2:
                sum1=None
            return sum3
        return get_mul
print(get_method('+')(10,20,30))
print(get_method('*')(10,20,30))
print(get_method('-')(-10,-20-30))
print(get_method('>')(10,20))
print(get_method('<')(10,20))

7.递归函数

*递归函数:在函数的函数体中调用函数本身理论上循环能做的事情,递归都可以做
*对递归的要求:能不用就用
函数调用的过程是一个压站的过程(每调用一次函数,系统都有为其分配内存空间,用来存储函数中声明的变量和参数等,这个内存在函数调用结束后会自动销毁)

#普通函数

def get_sum(n):
    sum1 = 0
    for x in range(1,n+1):
        sum1+=x
    return sum1
print(get_sum(10))
# 递归函数
def my_sum2(n):
    # 找到临界值
    if n==1:
        return 1
    return my_sum2(n-1)+n
print(my_sum2(10))

# 练习:用递归求2*4*6*...*n(n是偶数)
def my_mul(n):
    if n==2:
        return 2
    # 关系
    # f(x)=f(x-2)*n
    if n%2!=0:
        n=n-1
    return my_mul(n-2)*n
print(my_mul(10))

结果:

55
55
3840



**

上一篇 下一篇

猜你喜欢

热点阅读